通用外设驱动模型(四步法)
- 初始化
- 时钟设置:选择时钟源,启动时钟
- 参数设置:gpio 工作方式
- io 设置:除了 gpio,如串口 usart,
- 中断设置:开启,设置 NVIC
- 读函数(可选)
- 从外设读取数据
- 写函数(可选)
- 往外设写入数据
- 中断服务函数(可选)
- 根据中断标志,处理外设各种中断事务
GPIO 配置步骤
#配置
使能时钟
__HAL_RCC_GPIOx_CLK_ENABLE()
主要寄存器:
F1:RCC_APB2ENR //APB2 总线上的
F4:RCC_AHB1ENR
F7:RCC_AHB1ENR
H7:RCC_AHB4ENR
开启 GPIO 时钟
设置工作模式
HAL_GPIO_Init()
主要寄存器:
F1:CRL、CRH、ODR
F4/F7/H7:MODER、OTYPER、OSPEEDR、PUPDR
初始化 GPIO
设置输出状态(可选)
HAL_GPIO_WritePin()
HAL_GPIO_TogglePin()
主要寄存器:
BSRR,控制 IO 输出高/低电平;BSRR,每次调用 IO 输出电平翻转一次
读取输入状态(可选)
HAL_GPIO_ReadPin()
主要寄存器:
IDR,读取 IO 电平
关键结构体简介
F1
1 | typedef struct |
F4/F7/H7
1 | typedef struct |
- Date:2023-06-08
- Time:19:32
- Subject: none
- Tags: #stm32 #GPIO
[[2023-06]]
GPIO 寄存器介绍
x:A B…
yyy:寄存器简写
端口配置 低 寄存器(CRL)- F1
需要上下表格同时看,3 2 1 0 控制一个 io 口,4bit 控制一个 io 口,
端口配置 高 寄存器(CRH)- F1
上面两个加起来控制 16 个 io 口,都起配置作用;每组 GPIO 下有 16 个 IO 口,一个寄存器共 32 位,每 4 个位控制 1 个 IO,所以才需要两个寄存器完成。
工作模式配置补充 – F1
补充的原因:cnf1 cnf0 位置配置上下拉输入,但是不确定,需要在 odr 寄存器中再设置
端口输出数据寄存器(ODR)– F1
用于设置 IO 引脚输出的电平
PA10 对应 ODR10,设置功能对应的值看上图
端口输入数据寄存器(IDR)– F1
用于判断 IO 引脚的电平,用于读取的外部输入的是高还是低的寄存器
端口位设置/清除寄存器(BSRR)– F1
比如再 BS10 设置为 1,则 ODR10 位就输出高电平
F4/F7/H7 系列的 GPIO 相关寄存器略(看 ppt
ODR 和 BSRR 寄存器控制输出有什么区别?
ST 官方给的答案:使用 ODR,在读和修改访问之间产生中断时,可能会发生风险;BSRR 则无风险。
BSRR VS ODR:
1 | GPIOB->ODR |= 1 << 3; /* PB3 = 1 */ |
ODR 修改:读->改->写
BSRR 修改: 写
可能在 读改 或者 改写 的过程中有中断,发生问题
建议大家使用 BSRR 寄存器控制输出
- Date:2023-06-08
- Time:11:03
- Subject:
- Tags: #stm32 #GPIO
[[2023-06]]
IO 端口基本结构介绍
F1 的 IO 结构图
F4/F7/H7 的 IO 结构图
施密特触发器简介
施密特触发器就是一种整形电路,可以将非标准方波,整形成方波
特点:
- 当输入电压高于正向阈值电压,输出为高;
- 当输入电压低于负向阈值电压,输出为低;
- 当输入在正负向阈值电压之间,输出不改变。
效果:整形!如正弦波转方波
P-MOS & N-MOS 管简介
MOS 管是压控型元件,通过控制栅源电压( Vgs )来实现导通或关闭。
Vgs=Vg-Vs,用 1,0 的逻辑来看也可以的
P 是 G 接入高电平不导通,相当于两个 1 不导通
N 则是两个 0 不导通,G 接入高电平导通
GPIO 的八种模式分析
从 stm32f103 参考手册中的章节可以找出来
四个输入,四个输出
GPIO 工作模式:输入浮空
外部高阻态的时候
GPIO 工作模式:输入上拉
GPIO 工作模式:输入下拉
GPIO 工作模式:模拟功能
GPIO 工作模式:开漏输出
P-MOS 的 G 端一直高电平,一直不导通,N 端受输出控制控制,ODR 给 0,则输出控制高(输出控制的地方相当于对信号进行了取反操作),mos 导通(把 VSS 的低电平输出出去了),给 1 则输出低,mos 不导通(形成高阻态,没有意义,但是看后面),这样让 N-MOS 开或者关,同时外面 I/O 引脚处有个上拉电阻(必须),那么则会输出上拉电阻处的高电平,高阻态则可忽略掉,让整个引脚的电压情况随着 N-MOS 的情况改变
相当于这样:
f1 是要自己搞外部上拉,其他的自带内部,可看前面的图
允许输入,ttl 肖特基触发器接通了
ODR 是输出数据寄存器,IDR 就是上面输入的那个
GPIO 工作模式:开漏式复用功能
片上外设控制,仍让需要外部上拉
GPIO 工作模式:推挽输出
与开漏有区别,两个 mos 分别在 ODR 的 0/1 的时候作用
GPIO 工作模式:推挽式复用功能
- Date:2023-06-08
- Time:10:50
- Subject:
- Tags: #stm32 #GPIO
[[2023-06]]
什么是 GPIO
General Purpose Input Output,即通用输入输出端口,简称 GPIO
作用:负责采集外部器件的信息或者控制外部器件工作,即输入输出
例子:
STM32 GPIO 简介
GPIO 特点
- 不同型号,IO 口数量可能不一样,可通过选型手册快速查询
- 快速翻转,每次翻转最快只需要两个时钟周期(F1 最高速度可以到 50Mhz)
- 每个 IO 口都可以做中断
- 支持 8 种工作模式
GPIO 电器特性
TTL 端口:标识 FT,5v-3.3v
为什么是-0.3 和 3.6,因为有保护二极管,钳位,有压降和压升
GPIO 引脚分布
STM32 引脚类型:
- 电源引脚(v 开头)、晶振引脚(低速标 32,高速不确定)、复位引脚(nrst)、下载引脚、BOOT 引脚(boot0 boot1)、GPIO 引脚(p 开头)