STM32——ADC篇(ADC的使用)

一、ADC的介绍 

1.1什么是ADC
        ADC(Analogto-Digital Converter)模拟数字转换器,是将模拟信号转换成数字信号的一种外设。比如某一个电阻两端的是一个模拟信号,单片机无法直接采集,此时需要ADC先将短租两端的电压这个模拟信号转化成数字信号,单片机才能够进行处理。

1.2 ADC的用途

        ADC具有将模拟信号转换成数字信号的能力,比如将模拟的电压转换成数字信号,单片机进行处理。可以用作温度监测或者电流监测等方面,用途极广。

1.3 STM32F1系列的ADC介绍 

        STM32F1的ADC为12位ADC,是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

        STM32的ADC其转换时间为1us。 

二、STM32的ADC时钟介绍

        下图是截取的时钟树关于ADC部分,至于时钟树可以在编程参考手册的56页找到或者直接搜索时钟树就可以找到了。 

        

       可以看见其时钟来源于APB2总线,其频率最大可以达到72MHz,而ADC的时钟最大只能为14MHz,故先经过ADC预分频器经行6分频得到12MHz的时钟。

 三、ADC框图介绍:

        对于ADC的框图,下图以经把各个功能模块以及分好了,见下图:

 

3.1  ADC的18个通道介绍        

        首先其16个外部通道接口对应着某些GPIO口,至于哪些就不介绍了,可以查看引脚定义。

        而内部通道一个为内部温度传感器,可以用于查看CPU温度,另一个则是内部参考电压了,为一个1.2V左右的基准电压(不会随外部供电电压变化而变化)。有没有想过为什么ADC初始化需要校准呢?假如你芯片的供电电压不是标准的3.3V,那测量外部引脚的电压就可能不对,这时就可以读取这个基准电压经行校准,就能得到正确的电压值了,这就是校准的作用。

3.2  ADC转换单元的介绍

        规则组和注入组两个转换单元,在图中可以看见注入组最多四个通道,而规则组最多16个通道。如何选择这两种转换单元呢?下面我来说明这两种的区别:

ADC(Analog-to-Digital Converter,模拟数字转换器)的外部中断通常是在微控制器系统中用于捕获特定的模拟输入值变化。在许多嵌入式开发平台如STM32、AVR等,配置ADC外部中断一般包括以下几个步骤: 1. **初始化ADC模块**:首先需要在系统的初始化函数中配置ADC硬件,包括选择合适的通道、设置转换速率、配置中断源等。 ```c void configure_ADC(void) { // STM32的话可以参考ADC_HandleTypeDef的初始化 ADC_HandleTypeDef adcHandle; // 初始化adcHandle HAL_ADC_Init(&adcHandle); } ``` 2. **配置中断**:启用ADC中断,并将其连接到一个处理器可用的中断请求线上。例如,在STM32上可能用`HAL_NVIC_EnableIRQ(ADC_IRQn)`来开启中断。 ```c void enable_ADC_IRQHandler(void) { HAL_NVIC_EnableIRQ(ADC_IRQn); } ``` 3. **配置中断处理函数**:编写一个函数,当ADC完成转换并检测到中断条件(如超过预设阈值)时会被自动调用。 ```c void HAL_ADCEx_CalcISR(__IO ADC_HandleTypeDef* ADCx) { if (ADCx->SR & ADC_FLAG_ADRDY) { // 如果转换已完成 if (ADCx->ISR & ADC_ISR_OVR) { // 检查是否发生溢出 handle_ADC_Overshoot(); } else { handle_ADCConversionComplete(); // 处理常规中断情况 } ADCx->ISR = 0; // 清除中断标志位 } } void handle_ADCConversionComplete() { // 这里编写处理转换完成的代码,比如读取新的ADC值 } ``` 4. **设置中断触发条件**:根据应用需求设置中断触发条件,比如转换完成后触发,或者当ADC值达到预设范围时触发。 5. **结束中断服务函数**:记得在中断处理函数结束后返回主循环,让程序继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值