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

adc多通道采集数据错位

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

捕获.PNG

ADC实验1.rar

下载

3.02 MB, 下载次数: 2, 下载积分: 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版