moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

STM32F407学习

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 的工作模式
image
每组 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 的输出类型。
image
在输入模式下不起作用。低 16 位有效。默认输出模式下 IO 口为推挽输出。

1.1.1.3 GPIO 端口输出速度寄存器(GPIOx_OSPEEDR)#

image
也只用于输出模式。

1.1.1.4 GPIO 端口上拉 / 下拉寄存器(GPIOx_PUPDR)#

image

  • 00:无上拉下拉
  • 01:上拉
  • 10:下拉
  • 11:保留

1.1.1.5 GPIO 输入数据寄存器(GPIOx_IDR)#

image

1.1.1.6 GPIO 输出数据寄存器(GPIOx_ODR)#

image

1.1.1.7 GPIO 端口置位 / 复位寄存器(GPIOx_BSRR)#

image

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 主要特性#

  1. 可配置 12 位、10 位、8 位、6 位分辨率
  2. 在转换结束、注入转换结束、发生模拟看门狗或溢出时产生中断
  3. 单次和连续转换模式
  4. 数据对齐以保证内置数据的一致性
  5. 独立设置各通道采样时间
  6. 不连续采样模式
  7. ADC 电源:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
  8. ADC 输入范围:$V_{REF-} \leq V_{IN}\leq V_{REF+}$
  9. 规则通道转换期间可产生 DMA 请求

1.2.2 转换顺序#

当任意 ADCx 多通道以任意顺序进行一系列转换时就诞生了成组转换,有两种成组转换类型:规则组和注入组。规则组最多允许 16 个输入通道进行转换,注入组允许最多 4 个输入通道进行转换。

1.2.2.1 规则组#

按照一定的顺序成组转换,常用。

1.2.2.2 注入组#

“注入” 即为打破原来的状态,相当于中断。如果在规则组转换的过程中,注入组启动,则注入组转换完成后规则组才继续转换。
image

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 定时器的基本特性表如下: ![|455](ipfs://QmezCyADZUZwpuUCQftwB6pmgZyupStk8UCHjKUKRRo2jY) ## SPI SPI 全称为 Serial Peripheral interface,串行外围设备接口。SPI 的结构框图如下: ![|535](ipfs://QmaKpmxfqkbGY5jPn96xt46ahN8ocjwPtPSUWRt6EDrhdb) 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) ![](ipfs://QmbXeQQ2Uqcecx3ohHDHJFdGwBPyJ2BNnjyCa1ijdwbEed) - 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]:控制波特率。 - ![](ipfs://QmYJ3Q21c8Sxrwopy11pESKP15g9boiAbiwsy6EU3i7hoq) - Bit 2:主模式选择。0:从模式,1:主模式 - Bit 1:CPOL - Bit 0:CPHA #### SPI_SR(SPI 状态寄存器) ![](ipfs://QmV5Ggb2fgjvNuSuy9mzMg7NqvkC4SC7cHKz4HGR8XLA2Q) - 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 数据寄存器) ![](ipfs://QmYDcgSDE4dmfbJANB4hjZxjrnpB6r4hx4zR4Uzpor68Nk) 当数据帧为 8 位时只使用低八位,16 位时使用整个寄存器
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。