差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
stm32:gpio [2024/12/20 00:20] laythystm32:gpio [2024/12/21 20:15] (当前版本) laythy
行 2: 行 2:
 {{ :stm32:gpio.jpeg?600|}} {{ :stm32:gpio.jpeg?600|}}
 stm32f103中的GPIO电路结构: stm32f103中的GPIO电路结构:
-{{ :stm32:gpio2.jpeg?600|}}+{{ :stm32:gpio2.jpeg?400|}}
 {{ :stm32:gpiostructure.jpeg?600|}} {{ :stm32:gpiostructure.jpeg?600|}}
   保护电路:输入电压大于3v3,保护二极管从输入向3v3放电;输入电压小于0v,保护二极管从0v向输入放电;输入介于0v-3v3,保护二极管不放电,正常工作。   保护电路:输入电压大于3v3,保护二极管从输入向3v3放电;输入电压小于0v,保护二极管从0v向输入放电;输入介于0v-3v3,保护二极管不放电,正常工作。
行 76: 行 76:
   void GPIO_ResetBits(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_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
   其实作用就是上面两个的集合。前两个参数同上。第三个参数为设置高/低电平。第三个参数为 Bit_SET 置高电平,Bit_RESET 置低电平。   其实作用就是上面两个的集合。前两个参数同上。第三个参数为设置高/低电平。第三个参数为 Bit_SET 置高电平,Bit_RESET 置低电平。
行 83: 行 83:
   第一个参数同上。第二个参数为十六进制值(2字节,16位),其中0代表置低电平,1代表置高电平。其中低位为0号口,高位为15号口。   第一个参数同上。第二个参数为十六进制值(2字节,16位),其中0代表置低电平,1代表置高电平。其中低位为0号口,高位为15号口。
   举例 GPIO_Write(GPIOA, 0x5555); 就会把GPIOA的0号口置高,……,15号口置低(二进制 0101 0101 0101 0101 = 十六进制 5555)。   举例 GPIO_Write(GPIOA, 0x5555); 就会把GPIOA的0号口置高,……,15号口置低(二进制 0101 0101 0101 0101 = 十六进制 5555)。
 +**轻触开关(数字量输入):**\\
 +  轻触开关每次按下和松开都有5-20毫秒的抖动期,期间IO脚会收到多次电平变化,必须要消抖。
 +  软件消抖:延时。
 +  硬件消抖法其一:开关两端并联电容。由ai计算,抖动期取最大20ms,电压取0v与3v3,上拉电阻取10k,时间系数取5倍的情况下,电容大小应该是1uf。
 +
 +  设置引脚B12为按键(其余代码同初始化LED):
 +  ……
 +  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    // 设置引脚模式为上拉(弱上拉输入)
 +  ……
 +  GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12);      // 读取B12按下的值,数据类型uint8_t