益阳网站开发公司,网站建设佰金手指科杰三十,asp.net建立网站吗,免费个人主页注册STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平#xff0c;用以驱动Led蜂鸣器等外设#xff0c;以及模拟通信协议输出时序等。
输入模式时可以读取端口的高低电平或电压#xff0c;用于读取按键输入#xff0c;外接模块电平信号输入#xff0c;ADC电压采集灯
GP…STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平用以驱动Led蜂鸣器等外设以及模拟通信协议输出时序等。
输入模式时可以读取端口的高低电平或电压用于读取按键输入外接模块电平信号输入ADC电压采集灯
GPIO的位模式图如下所示 这个模式图接了一个上拉电阻和一个下拉电阻上拉表示的是高电平的输入模式下拉表示的是低电平的输入模式。
施密特触发器 的功能作用以及原理
施密特触发器对输入的电压进行整型如果输入的电压大于某一个阈值输出会瞬间升为高电平如果输入电压小于某一个阈值输出就会小于某一个阈值 输入数据寄存器存储施密特触发器整形的波形进入输入寄存器读取输入寄存器得到输入的电平 相关外设介绍led外设以及蜂鸣器外设 面包板介绍 接线连接STM32和最小系统班接线图 此处默认led项目创建完成
GPIO所包含的库函数如下所示 调用GPIO_DeInit这个函数后指定的gpio外设会被复位这是这个函数用途 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 复位AFIO外设 void GPIO_AFIODeInit(void); 用结构体的参数初始化gpio口 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 把结构体变量赋一个默认的值 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); 以上是GPIO的读取函数 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); 以上是GPIO的写入函数 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); void GPIO_EventOutputCmd(FunctionalState NewState); void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); typedef enum { GPIO_Mode_AIN 0x0, // 模拟输入 GPIO_Mode_IN_FLOATING 0x04, // 浮空输入 GPIO_Mode_IPD 0x28,// 下拉输入 GPIO_Mode_IPU 0x48, //上拉输入 GPIO_Mode_Out_OD 0x14, // 开漏输出 GPIO_Mode_Out_PP 0x10, // 推挽输出 GPIO_Mode_AF_OD 0x1C, // 复用开漏 GPIO_Mode_AF_PP 0x18 // 复用推挽 }GPIOMode_TypeDef; 点亮led灯使用的是推挽输出 使用GPIO ResetBits来点亮LED灯
#include stm32f10x.h // Device header// 操作GPIO 1 使用rcc开启gpio时钟// 使用GPIO_Init函数初始化GPIO// 使用输入或输出函数控制GPIO口
int main(void){// 开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;// 选择输出的引脚GPIO_InitStructure.GPIO_Pin GPIO_Pin_0;// 输出速度GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,GPIO_InitStructure);// GPIO设置A0口的灯亮GPIO_ResetBits(GPIOA,GPIO_Pin_0);// 设置LED灯熄灭GPIO_SetBits(GPIOA,GPIO_Pin_0);while(1){}} 查看函数的定义了解函数的功能以及如何使用函数 #include stm32f10x.h // Device header // 操作GPIO 1 使用rcc开启gpio时钟 // 使用GPIO_Init函数初始化GPIO // 使用输入或输出函数控制GPIO口 int main(void){ // 开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); // GPIO的结构体 GPIO_InitTypeDef GPIO_InitStructure; // 选择输出模式为推挽输出 GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; // 选择输出的引脚 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; // 输出速度 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; // GPIO初始化结构体的地址放到GPIO——Init的第二个参数 GPIO_Init(GPIOA,GPIO_InitStructure); // GPIO设置A0口的灯亮,最后一个参数Bit_RESET表示的是清除端口的值为0清除端口的值为1 GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);// Bit_RESET时LED灯是点亮状态当为Bit_SET时LED灯是熄灭状态 while(1){ } } STM32实现LED灯的亮灭
#include stm32f10x.h // Device header
#include Delay.h// 操作GPIO 1 使用rcc开启gpio时钟// 使用GPIO_Init函数初始化GPIO// 使用输入或输出函数控制GPIO口
int main(void){// 开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出// 选择输出模式为推挽输出PP表示的是推挽输出模式OD表示开漏输出模式// 推挽输出高电平和低电平均有输出能力开漏输出自由在低电平的情况下才有驱动能力GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;// 选择输出的引脚GPIO_InitStructure.GPIO_Pin GPIO_Pin_0;// 输出速度GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,GPIO_InitStructure);// GPIO设置A0口的灯亮,最后一个参数Bit_RESET表示的是清除端口的值为0清除端口的值为1GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);// Bit_RESET时LED灯是点亮状态当为Bit_SET时LED灯是熄灭状态while(1){// 实现led灯光闪烁的功能需要在主循环中写上点亮led灯熄灭led灯光的操作并在while中循环GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);Delay_ms(500);// 添加延时函数进行延时GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);Delay_ms(500);/* 使用GPIO点亮led灯GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);*/}} 延时函数从文件中引入
使用STM32实现LED流水灯
1接线 2编写流水灯功能代码在单片机中是无法使用二进制直接进行控制的因此我们需要使用16进制的方式控制单片机进行工作。
#include stm32f10x.h // Device header
#include Delay.h/*1: 操作GPIO 1 使用rcc开启gpio时钟2: 使用GPIO_Init函数初始化GPIO3: 使用输入或输出函数控制GPIO口*/
int main(void){// 开启GPIOA时钟,该程序连接的是GPIOA的端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出PP表示的是推挽输出模式OD表示开漏输出模式GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;// 选择输出的引脚GPIO_Pin_All将16个端口都设置为推挽输出模式GPIO_InitStructure.GPIO_Pin GPIO_Pin_All;// 输出速度GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,GPIO_InitStructure); while(1){//控制A号引脚GPIO_Write(GPIOA,~0x0001); // 0000 0000 0000 0001 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0002); // 0000 0000 0000 0010 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0004); // 0000 0000 0000 0100 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0008); // 0000 0000 0000 1000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0010); // 0000 0000 0001 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0020); // 0000 0000 0010 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0040); // 0000 0000 0100 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0080); // 0000 0000 1000 0000 二进制转换为16进制的写法Delay_ms(500);}}实现蜂鸣器功能
蜂鸣器接线使用最小系统班3根公对母的杜邦线完成蜂鸣器的接线工作 #include stm32f10x.h // Device header
#include Delay.h/*1: 操作GPIO 1 使用rcc开启gpio时钟2: 使用GPIO_Init函数初始化GPIO3: 使用输入或输出函数控制GPIO口*/
int main(void){// 开启GPIOA时钟,该程序连接的是GPIOA的端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出PP表示的是推挽输出模式OD表示开漏输出模式GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;// 选择输出的引脚GPIO_Pin_All将16个端口都设置为推挽输出模式GPIO_InitStructure.GPIO_Pin GPIO_Pin_12;// 输出速度GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOB,GPIO_InitStructure); while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_12);Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12);Delay_ms(100);GPIO_ResetBits(GPIOB,GPIO_Pin_12);Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12);Delay_ms(700);}}将程序运行并下载进STM32系统班中完成蜂鸣器发声功能。
库函数使用方式 第一种方式打开头文件拉到最下面查看有哪些函数然后查看函数的定义函数的使用方法建议使用这种方式 第二种方式查看库函数用户手册所有函数的介绍个使用方法 第三种方式最后一种方式是百度借助别人的代码进行使用