各位技术们,最近做adc多通道采样,发现采样的数据错位了,而且好像还是高低位错位了,不知道问题出在哪,还希望哥哥们指导一下。程序以及实验数据已上传,数据发送格式 是8位da采集值+一个8位数据+0x0d 0x0a
评分
查看全部评分
应该不会吧,我数据数组就设置了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);
}
楼主的贴图是19个数据,扣除0D 0A,还有17个数据是单数呀!STM32的12位ADC每个数据需要2个字节。3楼贴出的代码是DMA处理,但是串行发送19个数据就肯定有问题的。
是这样的,哥.我是这样采集数据的:我用了一个联合体来存储采集数据并用串口发送
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位发送,这个应该不会丢失数据吧,我觉得。
听说过有这么个软件,但是一直使用keil习惯了,
哥哥 我ad数据就前面的16哥数据后面三位是帧尾
评分
查看全部评分