ADC DMA数据错误

文章讲述了在12路ADC通过DMA传输数据时遇到的问题,当全局变量定义较大时,DMA数据出现错乱。原因是ADC初始化缺少关键代码,导致数据对齐方式错误。添加ADC_ExternalTrigConv_T1_CC1初始化后问题解决。作者提醒在初始化外设结构体时应确保所有成员都被赋值,以防未赋值的成员覆盖已赋值的成员,因为它们可能在同一寄存器中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【故障现象】

12路ADC 通过DMA传输,其他全局数组定义小时,DMA数据OK,定义大时,DMA数据错乱。

【原因总结】

  1. ADC的数据采集偏了4位,DMA OK。
  2. ADC_Init()中少了一句代码 导致全局变量变大时,配置中的右对齐实际上变成了左对齐。初始化增加ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;即OK。
  3. 为什么全局变量变大 会引起ADC寄存器变化,全局变量和ADC寄存器都没在一个段,需要继续揣摩;
  4. 关于外设的结构体初始化中,一定将每个成员都赋值,否则容易引起异常问题。

因为这两个成员变量都在同一个寄存器中,未赋值的成员变量如果值乱了 会把已赋值成员变量的值覆盖掉 都是或的关系

	//ADC3转换序列
	ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;						//12位模式
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;								//扫描模式	
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;							//连续转换
	ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;	//禁止触发检测,使用软件触发
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; 
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;						//右对齐	
	ADC_InitStructure.ADC_NbrOfConversion = 10;									//10个转换在规则序列中
	ADC_Init(ADC3, &ADC_InitStructure);											//ADC初始化

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值