GPIO
电气特性
STM32工作电压范围:2V<=VDD<=3.6V
GPIO识别电压范围:COMS端口:-0.3V ≤ VIL ≤ 1.164V, 1.833V ≤ VIH ≤ 3.6V
GPIO输出电流:单个IO最大25mA
引脚分布
电源引脚:V开头
晶振引脚 :HSE(外部高速晶振),HSI(内部高速晶振)
LSE(外部低速晶振),LSI(内部低速晶振)
复位引脚:NRST
下载引脚:
BOOT引脚:BOOT0...
GPIO引脚:
IO结构图
TTL肖基特触发器
特点: 当输入电压高于正向阈值电压,输出为高;
当输入电压低于负向阈值电压,输出为低;
当输入在正负向阈值电压之间,输出不改变。
作用: 整形,如正弦波转方波
八种工作模式
GPIO寄存器相关
(工作模式)CRL,CRH
这里其实可以注意,输入上拉和输入下拉,我可以通过ODR寄存器写0或者写1来操作
(端口输入数据寄存器)IDR
(端口输出数据寄存器)ODR
(端口位设置/清除寄存器)BSRR
ODR和BSRR的区别
使用ODR,在读和修改访问之间产生中断时,可能会发生风险;BSRR则无风险
GPIOB->ODR |= 1 << 3; /* PB3 = 1 */
GPIOB->BSRR = 0x00000008; /* PB3 = 1 */
//ODR修改,读.改.写
//BSRR修改,写
所以一般建议操作BSRR寄存器
GPIO配置步骤
//结构体介绍
typedef struct
{
uint32_t Pin; /* 引脚号 */
uint32_t Mode; /* 模式设置 */
uint32_t Pull; /* 上拉下拉设置 */
uint32_t Speed; /* 速度设置 */
} GPIO_InitTypeDef;
GPIO_InitTypeDef GPIO_InitStructure;
_HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA的时钟
GPIO_InitStructure.Mode = GPIO_MODE_OUT_PP; //推挽输出模式
GPIO_InitStructure.Pin = GPIO_PIN_0; //配置PA0端口
GPIO_InitStructure.Pull = GPIO_PULLDOWN; //默认下拉
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
//输出状态设置
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //设置低电平
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); //翻转电平
//读取输入状态
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); //读取PA0端口电平
该文章参考正点原子资料,请勿商用
有错误地方请大家指点