菜鸡求教,本人用stm32f103做串口通讯实验,接收时出现数据丢失。

任务是用stm32f103向一块超声波模块发送一个16进制指令
内容为55 aa 01 01 01 01
模块返回一个55 aa 01 01 xx xx xx的数据(xx为测量数据)
结果是串口监视串口显示打印接收到的数据只有55 aa(本应该是55 aa 01 01 xx xx xx的数据)

图片说明

经过检查模块确实发送了7个16进制数回来,但为啥单片机只收到两个呢?
跪求大佬帮忙!

具体代码为

u8 rece[100];
u16 dist=0;
u8 relen=0; 

int main(void)
{
        u8 t=0;
        u8 send[6];
        u8 len=sizeof(send);     
        send[0]=0x55; send[1]=0xaa; send[2]=0x01; send[3]=0x01; send[4]=0x01; send[5]=0x01; 
        delay_init();     
        LED_Init();         
        KEY_Init();       
        BEEP_Init();
        uart_init1(9600);   
        uart_init2(9600);    
      TIM3_PWM_Init(7199,9);    
      TIM_SetCompare2(TIM3,4700);   
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
        while(1){
                for(t=0;t<len;t++){
                        USART_SendData(USART1,send[t]);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                }
                LED0=0;
                LED1=1;
                delay_ms(1000);
                //printf("\r\ndist=%d   \r\n",dist);
        }
}
void USART1_IRQHandler(void){   
        u8 res; 
        if(USART_GetITStatus(USART1,USART_IT_RXNE)){
                res= USART_ReceiveData(USART1);  
                printf("\r\nres=%x   ",res);
        }
}

2个回答

你真牛逼,敢在中断里面加打印!你这样收不到很正常啊!后面数据都因为你的打印函数发生中断溢出了,也就是都冲掉了!你把printf("\r\nres=%x ",res)
去掉,定义一个数组接收串口数据吧!

weixin_42718387
EtaYang 确实成功了哈哈哈,我太傻了
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐