STM32G0 ADC-HAL库 DMA 连续采集
2023-12-15 19:32:20
1、简介
测试平台:STM32G030C8
需求:ADC-DMA连续转换
2、特殊说明
使用STM32CubexMx初始化时会发现某些通道是灰色的,不能使用
原因是和Sequencer配置参数有关,大致意思是
- Sequencer set to fully configurable (完全序列模式)
在这个模式下,用户可以自己配置通道轮询的次序。但该模式明确指出,只支持AN0~AN14通道。
- Sequencer set to not fully configurable (不完全序列模式)
在这个模式下,ADC通道轮询次序是按照通道号从小到大(或从大到小)的顺序依次轮询的,不可改变。该模式支持AN0~AN18通道(即所有通道都可用)。
3、配置
3.1、基础配置
3.2、取消中断
注意:如果开启中断,会连续触发DMA转换完成中断,转换完一轮也就是所有通道就会中断一次,时间在us级别,会极大浪费CPU时间。
3.2、循环采集
4、使用
4.1、校准
- 使用ADC前需要主动校准一次,否则转换精度异常
- 实测如过不校准,采集VBAT时会偏大200mV
LL_ADC_StartCalibration(ADC1);
while( LL_ADC_IsCalibrationOnGoing(ADC1));
4.2、启动
除去STM32CubeMX自动添加的 MX_ADC1_Init(); 还需手动启动DMA转换
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_value, 5);
5、测试代码
void adc_test()
{
uint16_t adc_dma_value[5];
LL_ADC_StartCalibration(ADC1);
while (LL_ADC_IsCalibrationOnGoing(ADC1));
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_value, 5);
while (1)
{
HAL_Delay(100);
board_iwdg();
SEGGER_RTT_printf(0, "adc value:\t%d\t%d\t%d\t%d\t%d\r\n", adc_dma_value[0] * 3300 / 4096, adc_dma_value[1] * 3300 / 4096, adc_dma_value[2] * 3300 / 4096, adc_dma_value[3] * 3300 / 4096, adc_dma_value[4] * 3300 / 4096);
for (size_t i = 0; i < 5; i++)
{
adc_dma_value[i] = 0;
}
}
}
文章来源:https://blog.csdn.net/ai5945fei/article/details/135023497
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!