你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

adc多通道采集数据错位

[复制链接]
倔强红军 提问时间:2020-6-2 09:14 /
各位技术们,最近做adc多通道采样,发现采样的数据错位了,而且好像还是高低位错位了,不知道问题出在哪,还希望哥哥们指导一下。程序以及实验数据已上传,数据发送格式  是8位da采集值+一个8位数据+0x0d  0x0a

捕获.PNG

ADC实验1.rar

下载

3.02 MB, 下载次数: 1, 下载积分: ST金币 -1

收藏 评论8 发布时间:2020-6-2 09:14

举报

8个回答
wenyangzeng 回答时间:2020-6-2 09:52:38
从发送的数据量看是奇数,串口发送时漏了第一个字节的数据。查查发送代码的BUG

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

倔强红军 回答时间:2020-6-2 11:15:10
wenyangzeng 发表于 2020-6-2 09:52
从发送的数据量看是奇数,串口发送时漏了第一个字节的数据。查查发送代码的BUG ...

应该不会吧,我数据数组就设置了16位大小,如果漏了数据那我前16位中应该有一个值是00的呀,我数据发送是这样的:
void  DMA1_Channel1_IRQHandler(void)
{
        u8  i=0;
  if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
        {         

                if(MYDMA_Enable_flag==1)
                {
                for(i=0;i<16;i++)
                        {
                         USART_SendData(USART1, AD_VStoregy.AD_B_Value);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
                         while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
                        }       
                        Logic_value[0]=logic_IO_Read();
                        for(i=0;i<3;i++)
                        {
                         USART_SendData(USART1, Logic_value);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
                         while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
                        }
                        MYDMA_Enable_flag=0;
          }               
        }
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        DMA_ClearITPendingBit(DMA1_IT_TC1);
}
MrJiu 回答时间:2020-6-2 13:02:45
直接使用STM32Cube配置,他不香么?
wenyangzeng 回答时间:2020-6-2 13:11:05
倔强红军 发表于 2020-6-2 11:15
应该不会吧,我数据数组就设置了16位大小,如果漏了数据那我前16位中应该有一个值是00的呀,我数据发送是 ...

楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的代码是DMA处理,但是串行发送19个数据就肯定有问题的。
倔强红军 回答时间:2020-6-2 16:31:35
wenyangzeng 发表于 2020-6-2 13:11
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的 ...

是这样的,哥.我是这样采集数据的:我用了一个联合体来存储采集数据并用串口发送
union   AD_values      
{
   uint16_t   AD_A_Value[8];
   uint8_t  AD_B_Value[16];
} AD_VStoregy;
其中 uint16_t   AD_A_Value[8];是我8个adc采集通道的采集数据缓存,然后   uint8_t  AD_B_Value[16];
是我串口发送的数据,应为联合体共用一段内存,所以我只是把采集到的16位ad数值按8位发送,这个应该不会丢失数据吧,我觉得。
倔强红军 回答时间:2020-6-2 16:33:15
MrJiu 发表于 2020-6-2 13:02
直接使用STM32Cube配置,他不香么?

听说过有这么个软件,但是一直使用keil习惯了,,谢谢大哥
倔强红军 回答时间:2020-6-2 16:34:32
wenyangzeng 发表于 2020-6-2 13:11
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的 ...

哥哥  我ad数据就前面的16哥数据后面三位是帧尾
butterflyspring 回答时间:2020-6-9 16:27:26
建议楼主调试一下看呗,看看转换结果,搬运后结果,这样更容易就发现问题所在了

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版