STM32 ADC转换实战:读取AD子函数解析

需积分: 0 1 下载量 176 浏览量 更新于2024-08-16 收藏 1.22MB PPT 举报
"STM32 ADC转换子函数及ADC特性介绍" STM32微控制器集成了一个12位的逐次逼近型模拟数字转换器(ADC),在STM32F103系列中,有两个这样的ADC(ADC1和ADC2)。这些ADC的设计允许用户在多种模式下进行模拟信号的数字化处理,提供了丰富的功能和灵活性。 7.1 ADC的硬件结构及功能 STM32的ADC具有以下特点: - 它们支持16个外部和2个内部信号源,总共18个输入通道,可以通过不同的引脚(如PA0到PA7, PB0到PB1, PC0到PC5, 以及PF6到PF10)进行选择。 - 输入时钟最大为14MHz,由PCLK2分频产生,确保转换速率的控制。 - ADC转换结果可以左对齐或右对齐的方式存储在16位的数据寄存器中。 - 提供了单次、连续、扫描和间断四种转换模式,满足不同应用场景的需求。 - 自动扫描模式允许从通道0到通道n的连续转换。 - 内置自校准功能保证了转换精度。 - 支持中断功能,如转换结束、注入转换结束和模拟看门狗事件,以实现响应速度的优化。 - 转换时间与系统时钟有关,例如,在56MHz时钟下为1us,在72MHz时钟下为1.17us。 - ADC供电电压范围为2.4V到3.6V,输入电压范围受限于参考电压VREF-和VREF+之间。 7.2 工作模式 ADC的工作模式包括: - 通道选择:可以根据需要选择不同的输入通道进行转换。 - 单次转换模式:只进行一次转换,然后停止。 - 连续转换模式:持续不断地进行转换,直到被软件禁用。 - 扫描模式:连续转换多个通道,无需手动切换。 - 间断模式:在特定条件下启动一次转换,如外部触发或定时器事件。 - 双重模式:在带有多个ADC的设备上,可以同时进行两个独立的转换。 7.3 ADC中断 中断功能允许在ADC转换完成或特定事件发生时,CPU能够及时响应,提高系统的实时性。 7.4 ADC寄存器 STM32的ADC有多个寄存器用于配置和状态监测,如ADC_CR1、ADC_CR2、ADC_SMPR1和ADC_SMPR2等,它们用来设置转换模式、触发源、采样时间等参数。 7.5 ADC库函数 STM32 HAL库和LL库提供了丰富的函数接口,如ADC初始化、通道配置、启动转换、读取转换结果等,简化了ADC的软件编程。 7.6 ADC程序设计 例如,`Get_Adc(u8 ch)`这个子函数展示了如何读取一个指定通道的AD转换结果: 1. 首先,通过`ADC_RegularChannelConfig()`函数配置ADC1的通道`ch`,设置其为第1个转换通道,并选择239.5个时钟周期的采样时间。 2. 使用`ADC_SoftwareStartConvCmd()`启动转换。 3. 循环等待`ADC_FLAG_EOC`标志位变为有效,表明转换已完成。 4. 最后,通过`ADC_GetConversionValue()`读取并返回转换结果。 这个子函数体现了在STM32中进行ADC操作的基本步骤,适用于简单的ADC应用。在实际项目中,可能需要根据具体需求对ADC的配置和中断处理进行更复杂的调整。