[应用相关] ADC采集电位器电压,生成PWM--STM32Cube配置RCC

[复制链接]
2206|27
 楼主| 尽快回复过 发表于 2023-12-28 14:49 | 显示全部楼层
单通道中断
配置ADC1
使用连续采样模式,采样转换完成自动进入中断
开启ADC全局中断
37754658d1a83d9302.png
 楼主| 尽快回复过 发表于 2023-12-28 14:50 | 显示全部楼层
在嵌套向量中断控制器NVIC修改一下ADC全局中断的优先级
9349658d1a8fb6db6.png
单通道中断采样配置过程与单通道轮询采样相同,利用cubemx配置完成后有两种开始ADC采样的方法。
 楼主| 尽快回复过 发表于 2023-12-28 14:50 | 显示全部楼层
配置定时器TIM2与轮询相同
使用的函数
使用以下函数开启ADC与ADC中断

__HAL_ADC_ENABLE_IT(&hadc1,ADC_IT_EOC);用于打开ADC转换完成中断HAL_ADC_Start(&hadc1);用于开启ADC采样

或者使用

HAL_ADC_Start_IT(&hadc1);
该函数比较特殊,调用一次该函数就打开了ADC转换完成中断和开启ADC采样
 楼主| 尽快回复过 发表于 2023-12-28 14:50 | 显示全部楼层
(开启中断一定要放到外设初始化函数的后面,否则串口函数初始化未完成,在ADC中断中使用printf函数可能会卡死) 71940658d1aafeb356.png
 楼主| 尽快回复过 发表于 2023-12-28 14:50 | 显示全部楼层
采样,转换完成后自动进入ADC中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)      
在中断回调函数中计算电压值,比较值,占空比并打印

问题是采样太快,从而中断更新很快,串口收到数据太多来不及打印 98679658d1abc61001.png
 楼主| 尽快回复过 发表于 2023-12-28 14:50 | 显示全部楼层
最后将adc.c文件中的通道转换结束标准修改为ADC_EOC_SEQ_CONV,否则只会进入一次中断

58716658d1ac9c85da.png
 楼主| 尽快回复过 发表于 2023-12-28 14:51 | 显示全部楼层
ADC_EOC_SEQ_CONV:在所有通道转换完成后进入中断
ADC_EOC_SINGLE_CONV:单个通道转换完成后进入中断
多个通道时,两种均可采用,单通道采样时需使用ADC_EOC_SEQ_CONV才能连续进入中断

配置定时器触发采样,解决直接ADC采样频率过快问题
步骤:

1.假设好采样频率
2.配置好ADC转换时间小于两点间隔时间
3.配置好定时器重装载更新事件频率为采样频率

对于直接用ADC采样,而不用定时器,转换时间就是两点间隔时间了,即采样频率为“1/转换时间”(个人不推荐使用,不好调时间)。
 楼主| 尽快回复过 发表于 2023-12-28 14:51 | 显示全部楼层
3.单通道DMA
定时器TIM三个功能
重装载产生中断
比较输出pwm
输入捕获
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部