STM32F1系列的ADC配置

目录

ADC引脚

注入通道与规则通道

1. 注入通道

2. 规则通道

​ADC时钟

ADC的触发事件

ADC的运行模式

1. 单次转换模式

2. 连续转换模式

3. 扫描模式 

ADC的中断

ADC的时钟

RCC_CFGR寄存器

ADC控制寄存器

ADC_CR1

​ ADC_CR2控制器

​ADC的数据对齐

​ADC的采样时间设置

ADC的规则转换通道寄存器

​ADC的注入转换通道寄存器 

ADC数据寄存器

ADC状态寄存器

ADC使用的配置过程

1. 开启相关时钟,记住配置相应的GPIO引脚为模拟输入

2. 设置ADC时钟

3. 初始化ADC的相关参数

4. 使能ADC并进行校准

5. ADC配置规则转换通道参数使能软件启动并获取结果 


ADC引脚

注入通道与规则通道

1. 注入通道

相当于中断,最多4个通道,注入通道和它的转换顺序在ADC_JSQR寄存器中选择,注入通道转化的总数应写入ADC_JSQR寄存器的最低两位

注入通道的转换结果保存在下图中的注入通道寄存器(4*16位)

转换结束后产生标志位,能够产生相应的中断

2. 规则通道

相当于正常运行的程序,最多16个通道,规则通道和它的转化顺序在ADC_SQRx寄存器中进行选择,规则通道转换的总数应写入ADC_SQR1寄存器的最低4位中

规则通道的转换结果保存在下图中的规则通道数据寄存器(16位)

转换结束后产生标志位,能够产生相应的中断

 ADC时钟

ADC的触发事件

ADC的运行模式

1. 单次转换模式

只执行一次转换

可以通过以下方式启动:

  • 设置ADC_CR2寄存器的ADON位(规则通道)
  • 外部触发启动(规则通道或注入通道)

如果一个规则通道转换完成,则:

  1. 转换结果数据被存储在16位的ADC_DR寄存器中饭
  2. EOC转换结束标志被置1
  3. 如果设置了EOCIE,则产生中断

如果一个注入通道被转换,则:

  1. 转换结果数据被存储在16位的ADC_DRJ1寄存器中饭
  2. JEOC注入转换结束标志被置1
  3. 如果设置了JEOCIE,则产生中断

2. 连续转换模式

ADC转换已结束马上启动另一次转换

此模式可以通过外部触发启动或通过设置ADC_CR2寄存器的ADON位启动

如果一个规则通道转换完成,则:

  1. 转换结果数据被存储在16位的ADC_DR寄存器中饭
  2. EOC转换结束标志被置1
  3. 如果设置了EOCIE,则产生中断

如果一个注入通道被转换,则:

  1. 转换结果数据被存储在16位的ADC_DRJ1寄存器中饭
  2. JEOC注入转换结束标志被置1
  3. 如果设置了JEOCIE,则产生中断

3. 扫描模式 

用于扫描一组模拟通道

可以通过设置ADC_CR1的SCAN位来控制

一旦开启,ADC将会扫描所有被ADC_SQRX寄存器(针对规则通道)或ADC_JSQR寄存器(针对注入通道)选中的通道

在每个扫描组的每个通道上执行单次转换,每次转换结束时,同一组的下一个通道被自动转换

如果设置了CONT位,则转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换

如果设置了DMA位,每次EOC后,DMA控制器把规则通道的转换数据传输到SRAM中,而注入通道转换的数据总是存储在ADC_JDRx寄存器中

ADC的中断

规则通道转换结束和注入通道转换结束都能产生中断,有独立的中断使能位

ADC1和ADC2的中断映射在同一个中断向量上,而ADC3的中断有自己的中断向量

中断事件 事件标志 使能控制位
规则通道组转换结束 EOC EOCIE
注入通道组转换结束 JEOC JEOCIE
设置了模拟看门狗状态位 AWD AWDIE

ADC的时钟

RCC_CFGR寄存器

注意不要让ADC的时钟超过14 MHz

ADC控制寄存器

ADC_CR1

 ADC_CR2控制器

 ADC的数据对齐

左对齐或右对齐

由于STMF1自带的ADC是12位的,而数据寄存器是16位的,因此可以设置转化结果为左对齐或右对齐

 

 ADC的采样时间设置

设置好预分频后相当于确定了ADC的时钟,即ADC时钟的周期(ADC_CLK)

需要用多少的ADC采样周期来完成一次采样,可以在这2个寄存器里进行设置

总的转换时间为采样时间+12.5个ADC时钟周期

通过计算可知,STM32F1自带ADC的最小转换时间是1微秒

ADC的规则转换通道寄存器

 

 ADC的注入转换通道寄存器 

 ADC数据寄存器

ADC状态寄存器

ADC使用的配置过程

1. 开启相关时钟,记住配置相应的GPIO引脚为模拟输入

开启相关时钟

配置GPIO引脚 

2. 设置ADC时钟

设置完后复位

 这里的ADC_DeInit函数的实现如下

3. 初始化ADC的相关参数

 ADC初始化 

这个函数的实现如下

初始化的结构体如下:

 ADC_InitTypeDef

使用单次转换还是连续转换,可以选择的参数:

触发方式的可选择项:

数据对齐方式的可选性:

4. 使能ADC并进行校准

ADC_Cmd函数的实现如下

ADC_ResetCalibration函数实现如下

5. ADC配置规则转换通道参数使能软件启动并获取结果 

ADC_GetConversionValue函数的实现

 ADC_SoftwareStartConvCmd函数的实现

ADC_ITConfig的实现

ADC_StartCalibration的实现


 

 

版权声明:本文为CSDN博主「CodeForCoffee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24118527/article/details/122743940

生成海报
点赞 0

CodeForCoffee

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32实现SPI通信1

目录 SPI的结构框图 STM32的SPI模块 从选择NSS管理 软件NSS 硬件NSS 时钟信号的相位与极性 数据帧格式 状态标志 SPI中断 STM32F103RCT6的SPI1引脚​ SPI模块引脚配置的GPIO模式

STM32实现软件I2C通信

目录 I2C协议 1. 空闲状态 2. 开始信号 3. 停止信号 4. 应答信号ACK 5. 数据的有效性 6. 数据传输 I2C的实现 IIC_Init II2_START​ IIC_Stop​ IIC_Wait_Ack​

STM32F2————配置时钟延迟不准的问题

STM32F2配置时钟问题 笔者在本科毕业设计使用STM32F207芯片,但是在配置时钟时出现了问题。 问题 我按照F1写代码的延时函数放在F2竟然不准了 换个办法 使用Systick时钟也是不准,原因是笔者代