通过STM32Cube配置STM32G0系列ADC DMA多通道连续采样时存在的问题

背景

最近在使用STM32G0系列ADC时遇到一些问题,我需要使用ADC的八个通道、使用DMA方式连续不间断的进行采样,通过STM32Cube图形化工具配置时遇到一些问题,特此做个记录说明。

本文开发工具与数据包版本如下:
STM32CubeIDE - V1.9.0
STM32Cube MCU Package for STM32G0 Series - V1.5.1

问题说明与解决方法

通常ADC使用DMA多通道连续采样时部分参数应该设置如下:
在这里插入图片描述
其中 Continuous Conversion Mode 应该为 EnabledDiscontinuous Conversion Mode 应该为 Disbaled 。但是在文章开头的条件下设置时参数会设置为如下:
在这里插入图片描述
并且无法手动在图形界面中进行更改:
在这里插入图片描述
在这里插入图片描述
使用这个参数进行测试时ADC DMA多通道连续采样结果不符合预期。

所以使用时需要手动调整初始化代码:
在这里插入图片描述
调整后工作就正常了。

更多内容可以参考: 《使用HAL库开发STM32:ADC基础使用》

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于使用STM32G0系列微控制器的ADC模块读取电压的问题,你可以按照以下步骤进行操作: 1. 配置ADC模块:首先,你需要在STM32CubeMX或者直接在代码中配置ADC模块的相关参数,如设置参考电压、采样周期、转换分辨率等。 2. 初始化ADC:使用适当的函数初始化ADC模块,例如使用HAL库可以调用`HAL_ADC_Init()`函数来完成初始化。 3. 配置ADC通道:选择要读取电压的ADC通道。对于STM32G0系列,可以使用`HAL_ADC_ConfigChannel()`函数来配置ADC通道。 4. 启动ADC转换:调用`HAL_ADC_Start()`函数来启动ADC转换。 5. 等待转换完成:可以使用`HAL_ADC_PollForConversion()`函数来等待ADC转换完成。 6. 读取转换结果:使用`HAL_ADC_GetValue()`函数来获取转换结果,即读取电压值。 以下是一个简单的示例代码,用于读取ADC通道1的电压值: ```c #include "stm32g0xx_hal.h" ADC_HandleTypeDef hadc; void ADC_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.LowPowerAutoWait = DISABLE; hadc.Init.LowPowerAutoPowerOff = DISABLE; hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; HAL_ADC_Init(&hadc); sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; HAL_ADC_ConfigChannel(&hadc, &sConfig); } float ADC_ReadVoltage(void) { uint16_t adcValue = 0; float voltage = 0.0; HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY); adcValue = HAL_ADC_GetValue(&hadc); voltage = (float)adcValue * 3.3 / 4096; // 根据参考电压和分辨率计算电压值 return voltage; } int main(void) { HAL_Init(); ADC_Init(); while (1) { float voltage = ADC_ReadVoltage(); // 处理读取到的电压值 } } ``` 这是一个基本的示例,你可以根据自己的需要进行修改和扩展。请注意,以上代码仅供参考,具体的实现可能会因为使用的开发环境和库的版本而有所不同。请参考STM32G0系列微控制器的相关文档和库函数手册进行详细了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naisu Xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值