adc多通道采集数据错位
各位技术们,最近做adc多通道采样,发现采样的数据错位了,而且好像还是高低位错位了,不知道问题出在哪,还希望哥哥们指导一下。程序以及实验数据已上传,数据发送格式是8位da采集值+一个8位数据+0x0d0x0a从发送的数据量看是奇数,串口发送时漏了第一个字节的数据。查查发送代码的BUG wenyangzeng 发表于 2020-6-2 09:52
从发送的数据量看是奇数,串口发送时漏了第一个字节的数据。查查发送代码的BUG ...
应该不会吧,我数据数组就设置了16位大小,如果漏了数据那我前16位中应该有一个值是00的呀,我数据发送是这样的:
voidDMA1_Channel1_IRQHandler(void)
{
u8i=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=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);
} 直接使用STM32Cube配置,他不香么?;P;P;P 倔强红军 发表于 2020-6-2 11:15
应该不会吧,我数据数组就设置了16位大小,如果漏了数据那我前16位中应该有一个值是00的呀,我数据发送是 ...
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的代码是DMA处理,但是串行发送19个数据就肯定有问题的。 wenyangzeng 发表于 2020-6-2 13:11
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的 ...
是这样的,哥.我是这样采集数据的:我用了一个联合体来存储采集数据并用串口发送
union AD_values
{
uint16_t AD_A_Value;
uint8_tAD_B_Value;
} AD_VStoregy;
其中 uint16_t AD_A_Value;是我8个adc采集通道的采集数据缓存,然后 uint8_tAD_B_Value;
是我串口发送的数据,应为联合体共用一段内存,所以我只是把采集到的16位ad数值按8位发送,这个应该不会丢失数据吧,我觉得。
MrJiu 发表于 2020-6-2 13:02
直接使用STM32Cube配置,他不香么?
听说过有这么个软件,但是一直使用keil习惯了,:lol,谢谢大哥 wenyangzeng 发表于 2020-6-2 13:11
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的 ...
哥哥我ad数据就前面的16哥数据后面三位是帧尾 建议楼主调试一下看呗,看看转换结果,搬运后结果,这样更容易就发现问题所在了:)
页:
[1]