完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
开发环境IAR7.50.2,芯片302RCT6,不知道如何解决多通道数据转化错位问题
1、需求:adc规则组采样3个通道,对ADC数据每隔不定时间处理一次,在处理函数中读取数组ConvValue[3],即为ADC采样的值。 2、HAL库配置: 扫描模式使能,连续转换模式使能,DMA连续转换请求使能 3、DMA2_CH1中断不使能(目的为了减少进出中断时间) 4、while(1)函数进入前开启dma HAL_ADC_Start_DMA( hadc2,(uint32_t*)ADC2HARDWARE.ConvValue,3); ConvValue[3]数据类型uint16_t 5、正常情况: ConvValue[0]存放ADC_CH0 ConvValue[1]存放ADC_CH1 ConvValue[2]存放ADC_CH2 6、异常情况(非常少见) ConvValue[0]存放ADC_CH2 ConvValue[1]存放ADC_CH0 ConvValue[2]存放ADC_CH1 或者 ConvValue[0]存放ADC_CH1 ConvValue[1]存放ADC_CH2 ConvValue[2]存放ADC_CH0
|
|
相关推荐
2个回答
|
|
估计ADC转换时间太快了,DMA还没读取就覆盖了。。。 还有就是检查一下DMA的数据长度
|
|
|
|
可能导致多通道转换数据错位的原因有以下几种:
1. DMA缓冲区设置错误:确保DMA缓冲区的大小足够容纳所有通道的转换值,每个通道的转换值应该按照通道顺序依次存放。 2. ADC配置错误:检查ADC的通道顺序和对应的GPIO引脚配置是否正确匹配。 3. 代码执行顺序错误:确保在处理函数中读取数组ConvValue[3]之前,DMA传输已经完成。 4. 数据处理函数错误:确保在处理函数中正确处理不同通道的转换值的位置。 解决方法: 1. 确认DMA缓冲区的大小是否足够存放所有通道的转换值,以及各个通道的转换值在数组中的顺序是否正确。 2. 确保ADC通道配置与GPIO引脚配置正确匹配。 3. 在处理函数中,增加等待DMA传输完成的代码,例如使用HAL_DMA_PollForTransfer完成等待。 4. 确保处理函数中正确处理不同通道的转换值,可以通过打印调试信息或者使用断点来检查数据的正确性。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 10:19 , Processed in 0.616802 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号