网站备案幕布可以ps么,专业3合1网站建设,产品设计方案2000字,做网站学cdr吗一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V#xff0c;对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方#xff0c;都可以用GPIO来完成#xff0c;如果控制的功率比较大的设备#xff0c;只需加入驱动电路即可 GPIO 通用输入输出口#xff0c;可配置为 8种 …一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方都可以用GPIO来完成如果控制的功率比较大的设备只需加入驱动电路即可 GPIO 通用输入输出口可配置为 8种 输入输出模式。 输出模式下可控制端口输出高低电平用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。而如果控制的是功率比较大的设备只需要再添加驱动电路即可。 输入模式下可读取端口的高低电平或电压用于读取按键输入、外接模块电平信号输入GPIO甚至还能配置成模拟信号输入的模式配合内部的ADC外设就能直接读取模拟电压了、ADC电压采集、模拟通信协议接收数据等。
二、GPIO基本结构 所有的 GPIO 都是挂载在 ABP2 总线结构上的 每个 GPIOX 外设有 16 个引脚编号从 0~15比如GPIOA 的第0引脚称为 PAO 每个 GPIO 模块内主要包含了寄存器和驱动器这些东西内核可以通过 APB2 总线对寄存器进行读写。 stm32 是32位单片机所以寄存器是32位GPIO模块的寄存器只有低 16 对应IO 引脚 其中的驱动器是用来增加信号的驱动能力比如电灯操作
三、 (重要)GPIO 位结构电路
四、GPIO模式
五、外设GPIO配置
六、LED和蜂鸣器模块 七、外设硬件电路 GPIO在推挽输出模式下,高低电平均有较强的驱动能力但在单片机里一般用第一种,因为使用高电平弱驱动 ,低电平强驱动的规则 八、LED闪烁电路接线 九、主要程序
1、第一步使用RCC初始化GPIO时钟
2、第二步使用GPIO_Init函数初始化GPIO
3、第三步设置高低电平
1、点亮一个灯低电平亮LED连接PA0口
#include stm32f10x.h // Device header
#include Delay.h
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用RCC初始化GPIO时钟//使用GPIO_Init函数初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //点灯通用推挽输出GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //用的是GPIOA外设的0号引脚GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //50兆hz的速度//用结构体的函数初始化GPIO口GPIO_Init(GPIOA,GPIO_InitStructure); //第二个参数为指向结构体的指针故传地址GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//加两个延时函数Delay_ms(500);//毫秒延时函数参数500GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//熄灭LEDDelay_ms(500);//毫秒延时函数参数500GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);Delay_ms(500);//毫秒延时函数参数500//加两个延时函数GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);Delay_ms(500);}
}
2、流水灯低电平亮LED连接PA0~PA6
#include stm32f10x.h // Device header
#include Delay.h
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_All; //初始化所有端口 配置为推挽输出模式GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_Write(GPIOA,~0x0001); //0000 0000 0000 0001Delay_ms(500);GPIO_Write(GPIOA,~0x0002); //0000 0000 0000 0010Delay_ms(500);GPIO_Write(GPIOA,~0x0004); //0000 0000 0000 0100Delay_ms(500);GPIO_Write(GPIOA,~0x0008); //0000 0000 0000 1000Delay_ms(500);GPIO_Write(GPIOA,~0x0010); //0000 0000 0001 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0020); //0000 0000 0010 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0040); //0000 0000 0100 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0080); //0000 0000 1000 0000Delay_ms(500);}
}
3、蜂鸣器低电平的时候响蜂鸣器接口为PB12
#include stm32f10x.h // Device header
#include Delay.h
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;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);}
}
十、下面是程序详解 来自于博主的笔记