stm32week14
stm32学习
十.GPIO
2.基本结构
基本结构:

F1与其它的的最大区别是上下拉电阻的位置
施密特触发器是一种整形电路,可以将非标准方波,整形成方波

图中MOS管的输出规则:

3.8中工作模式
①输入浮空:
- 上下拉电阻均不工作
- MOS管关闭
- 输入引导至寄存器然后读出
- 空闲时,IO状态不确定
②输入上拉:
- 上拉电阻工作
- MOS管关闭
- 输入引导至寄存器然后读出
- 空闲时,IO呈现高电平
③输入下拉:
- 下拉电阻工作
- MOS管关闭
- 输入引导至寄存器然后读出
- 空闲时,IO呈现低电平
④模拟输入:
- 上下拉电阻均不工作
- MOS管关闭
- 施密特触发器关闭,输入引导至模拟输入
⑤开漏输出:
- 上下拉电阻均不工作
- P-MOS管关闭
- 往ODR(输出控制)输出0,则N-MOS管导通;输出1则关闭
- 施密特触发器打开(允许输入)
- 不会输出高电平,必须有外部或内部上拉才能输出1
⑥复用开漏输出:
- 上下拉电阻均不工作
- P-MOS管关闭
- 往ODR(输出控制)输出0,则N-MOS管导通;输出1则关闭
- 施密特触发器打开(允许输入)
- 不会输出高电平,必须有外部或内部上拉才能输出1
- 输出来自片上外设
⑦推挽输出:
- 上下拉电阻均不工作
- 往ODR输出0,则N-MOS管导通;输出1,则P-MOS管导通
- 施密特触发器打开(允许输入)
- 可输出高低电平
⑧复用推完输出:
- 上下拉电阻均不工作
- 往ODR输出0,则N-MOS管导通;输出1,则P-MOS管导通
- 施密特触发器打开(允许输入)
- 可输出高低电平
- 输出来自片上外设
F1与其它系列的GPIO的不同:
- F1在输出模式,禁止使用内部上下拉,其它系列允许
- 不同系列IO翻转速度不同
9.GPIO的寄存器
一共7个寄存器:
- CRL:控制位的低位,配置工作模式,输出速度
- CRH:控制位的高位
- IDR:输入数据
- ODR:输出数据
- BSRR:设置ODR寄存器的值
- BRR:F4之后没有,一般不用
- LCKR:配置锁定,用得不多
CRL和CRH的寄存器相同:

CNF(Configuration Bits配置位)用于细化引脚工作模式的关键参数
IDR和ODR的寄存器相同:

BSRR(Bit Set/Reset Register)寄存器:

ODR和BSRR的区别:使用ODR,在读和修改访问之间产生中断,可能会产生风险;BSRR则无风险,所以一般用BSRR(HAL库中的WritePin用的就是BSRR)
10.配置步骤
①使能时钟:__HAL_RCC_GPIOx_CLK_ENABLE()
②设置工作模式:HAL_GPIO_Init()
相关函数:
HAL_GPIO_WritePin(…)
HAL_GPIO_TogglePin(…)
HAL_GPIO_ReadPin(…)
初始化函数示例:

十一.中断
1.介绍
中断:打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断
GPIO外部中断简图:
