【STM32HAL库开发】学习笔记(1)——GPIO
1.引脚通用功能与复用功能通过直接控制单片机引脚输出高/低电平或者读取引脚高/低电平状态的方式叫做引脚的通用功能。除此之外的功能称为引脚的复用功能这些复用功能可以给其他模块进行使用如UART串口、TIM定时器等。2.引脚复用重映射在实际使用过程中IO引脚可能会出现一些功能定义重合即一个引脚可能既是TIM定时器的某个通道的引脚也是串口的TX/RX引脚但好在这些功能往往在单片机提供了一组或者多组备用引脚那么只需要将冲突引脚重映射到其他IO引脚那么IO定义冲突就可以解决了。上图PA9要定义为定时器1通道2使用那么USAERT1_TX就不能再使用这个引脚那么就需要重映射到另一组备用引脚上即PB6作为一对功能引脚那么相应的PB7就是USART1_RX3.GPIO输出与输入3.1 GPIO4种输出模式GPIO有四种输出模式通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出。通用一般设置直接控制引脚的状态复用通过一些模块或者功能如串口间接控制引脚的状态推挽输出输出引脚的两个MOS管总有一个导通引脚输出状态为低电平或者高电平开漏输出输出引脚的漏极的那个P-MOS管一直处于断开状态引脚输出状态为低电平或者高阻由N-MOS的通断控制3.2 IO最大输出速度高低电平的转换不是瞬间完成的从低电平到高电平需要一个上升时间、从高电平到低电平也需要一个下降时间这两个时间限制了IO引脚的最大输出速度。在STM32中有3种输出速度分别是低速、中速和高速。速率越高功耗越大甚至更高速可能对其他元器件产生电磁干扰可以根据实际需要进行选择。低速2MHz 中速10MHz 高速50MHz3.3GPIO4种输入模式输入上拉GPIO引脚接上拉电阻到VDD正电源3.3V使IO引脚默认处于高电平状态输入下拉GPIO引脚接下拉电阻到VSS电源地 0V使IO引脚默认处于低电平状态输入浮空GPIO引脚既不接上拉电阻到VDD正电源3.3V也不接上拉电阻到VDD正电源3.3VIO引脚处于浮空状态模拟模式常用于ADC模数转换采集外部模拟信号。数字输入电路如肖特基触发器被关闭避免将连续变化的模拟信号量化为 0/1内部上拉/下拉电阻关闭即使配置了上拉或下拉也不会生效从而保证信号不被干扰引脚处于高阻状态仅将外部电压直接送入 ADC 模块。上图为GPIO引脚的电路示意图4种输入模式同样根据需要进行选择。此外在选择上拉输入时要考虑电流大小单片机上拉引脚输出电流有限过大可能对单片机造成一些不好的影响。3.4代码HAL_GPIO_ReadPin、HAL_GPIO_WritePin函数是GPIO输入输出的函数。HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // 读取PA0的引脚状态 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置PA0的状态为高电平