stm32-gpio
- Date:2023-06-08
- Time:20:49
- Subject: none
- Tags: #stm32 #GPIO
[[2023-06]]
通用外设驱动模型(四步法)
- 初始化
- 时钟设置:选择时钟源,启动时钟
- 参数设置: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开头)