1 STM 32 相关外设接口学习#
1.1 GPIO#
STM 32 F 4 每组通用 GPIO 口由 7 个 32 位的寄存器控制,包括:
- 4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR、PUPDR)
- 2 个 32 位数据寄存器(IDR、ODR)
- 1 个 32 位置位、复位寄存器(BSRR)
- 1 个 32 位锁定寄存器(LCKR)
- 2 个 32 位复用功能选择寄存器(AFRH、AFRL)
1.1.1 寄存器#
1.1.1.1 GPIO 端口模式寄存器(GPIOx_MODER)(x=A.. I)#
用于控制 GPIO 的工作模式
每组 GPIO 下有 16 个 IO 口,两个寄存器位控制 1 个 IO。PortA 的复位值是 0 xA 800 0000,对应的二进制为 1010 1000 0000 0000 0000 0000 0000 0000,可知 PA 15/14/13 都为复用功能模式,其余端口为输入模式。
1.1.1.2 GPIO 端口输出类型控制器(GPIOx_OTYPER)#
用于控制 GPIO 的输出类型。
在输入模式下不起作用。低 16 位有效。默认输出模式下 IO 口为推挽输出。
1.1.1.3 GPIO 端口输出速度寄存器(GPIOx_OSPEEDR)#
也只用于输出模式。
1.1.1.4 GPIO 端口上拉 / 下拉寄存器(GPIOx_PUPDR)#
- 00:无上拉下拉
- 01:上拉
- 10:下拉
- 11:保留
1.1.1.5 GPIO 输入数据寄存器(GPIOx_IDR)#
1.1.1.6 GPIO 输出数据寄存器(GPIOx_ODR)#
1.1.1.7 GPIO 端口置位 / 复位寄存器(GPIOx_BSRR)#
1.2 ADC#
STM 32 F 4 拥有 3 个可独立使用的 ADC,其中 ADC 1 和 ADC 2 可以组成双重模式以提高采样率。STM 32 的 ADC 是 12 位逐次逼近型的 ADC。包含 19 个通道,可测量 16 个外部和 2 个内部信号源以及 Vbat 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描、不连续采样模式下进行。转换后的结果存储在一个 LSB 或 MSB 的 16 位数据寄存器中。
1.2.1 主要特性#
- 可配置 12 位、10 位、8 位、6 位分辨率
- 在转换结束、注入转换结束、发生模拟看门狗或溢出时产生中断
- 单次和连续转换模式
- 数据对齐以保证内置数据的一致性
- 独立设置各通道采样时间
- 不连续采样模式
- ADC 电源:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
- ADC 输入范围:$V_{REF-} \leq V_{IN}\leq V_{REF+}$
- 规则通道转换期间可产生 DMA 请求
1.2.2 转换顺序#
当任意 ADCx 多通道以任意顺序进行一系列转换时就诞生了成组转换,有两种成组转换类型:规则组和注入组。规则组最多允许 16 个输入通道进行转换,注入组允许最多 4 个输入通道进行转换。
1.2.2.1 规则组#
按照一定的顺序成组转换,常用。
1.2.2.2 注入组#
“注入” 即为打破原来的状态,相当于中断。如果在规则组转换的过程中,注入组启动,则注入组转换完成后规则组才继续转换。
1.2.2.3 转换速率#
ADC 转换时间计算公式为 $$
T_{CONV}=Sample_Time+TSAR\times ADC_CLK
采样时间由 ADC_SMPR 寄存器进行控制。
ADC_CLK 由 APB 2 分配产生,分频系数由 RCC_CFGR 寄存器中的 PPRE 2 进行设置,2/4/6/8/16 分频选项。
### 寄存器
## Timer
定时器的基本特性表如下:

## SPI
SPI 全称为 Serial Peripheral interface,串行外围设备接口。SPI 的结构框图如下:

SPI 的引脚信息为
1. MISO(Master In / Slave Out):主设备数据输入,从设备数据输出。
2. MOSI(Master Out / Slave In):主设备数据输出,从设备数据输入。
3. SCLK(Serial Clock):时钟信号,主设备输出。
4. CS(Chip Select):从设备片选信号,主设备输出。
==工作原理==:在进行 SPI 通信的从机和主机中都有一个 Shift Register,主机通过向它本身的移位寄存器写入一个 Byte 的数据发起一次传输。移位寄存器通过 MOSI 将字节传输给从机,同时从机将字节的移位寄存器中的内容通过 MISO 传输到主机,这样即可实现两个移位寄存器中的数据交换。因此,如果只进行写操作,主机忽略接收到的数据即可,如果主机想要读取从机的数据,则发送一个空字节引发从机传输。
SPI 支持全双工、半双工、单工传输方式。
### SPI 工作模式
SPI 的工作模式由 CPOL 和 CPHA 决定,它们都有 0、1 两种状态,因此 SPI 有四种工作模式。
| 工作模式 | CPOL | CPHA | SCL 空闲状态 | 采样边沿 | 采样时刻 |
| ---- | ---- | ---- | -------- | ---- | ---- |
| 0 | 0 | 0 | 低电平 | 上升沿 | 奇数边沿 |
| 1 | 0 | 1 | 低电平 | 下降沿 | 偶数边沿 |
| 2 | 1 | 0 | 高电平 | 下降沿 | 奇数边沿 |
| 3 | 1 | 1 | 高电平 | 上升沿 | 偶数边沿 |
由表可知,CPOL 决定 SCL 空闲状态时为高电平还是低电平,CPHA 决定是在时钟的奇数边沿采样还是在偶数边沿采样。
### SPI 寄存器
#### SPI_CR 1(SPI 控制寄存器 1)

- Bit 11 DFF:数据帧格式,0:8 位数据帧,1:16 位
- Bit 10 RXONLY:只接收。0:全双工,1:只接收
- Bit 7:帧格式。0:先发送 MSB,1:先发送 LSB。**通信时不应该修改此位**
- Bit 6:SPI 使能。0:关闭外设,1:使能外设。
- Bit 5-3:BR[2:0]:控制波特率。
- 
- Bit 2:主模式选择。0:从模式,1:主模式
- Bit 1:CPOL
- Bit 0:CPHA
#### SPI_SR(SPI 状态寄存器)

- 15-9 位保留,强制为 0
- Bit 8:帧格式错误。0:无帧格式错误,1:有帧格式错误
- Bit 7:忙标志。0:未处于忙状态,1:SPI 处于通信状态或者 Tx buffer 不空
- Bit 1:发送 buffer 空。0:非空,1:空
- Bit 0:接收 buffer 非空。0:空,1:不空
#### SPI_DR(SPI 数据寄存器)

当数据帧为 8 位时只使用低八位,16 位时使用整个寄存器