麻烦各位帮忙看下,关于串口发送数据的问题

2019-07-21 00:27发布

          各位大哥好,小弟我用的是stm32f103:通过串口发数据,在不加入延时函数,串口调试助手接收到的数据会有丢失

          以下OV7670_CreatColor()是通过串口向pc发送数据的,重点在两个for循环上,内for循环,我加入了延时20ms时候接收到的数据是完整的,延时10ms也会出现数据丢失。但是我觉得串口发送数据,通过判断发送标志位TC,应该能确保发发送正确的。现在困惑问题出在哪里了。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
15级的许同学
2019-07-21 11:32
本帖最后由 15级的许同学 于 2019-5-12 10:13 编辑
www88988 发表于 2019-5-11 09:46
你那个 USART1_SendOneChar(uchar ch) 函数可这么写
USART1_SendOneChar(uchar ch)
{

5楼大哥你好,我按照你说的单独测试了串口输出:
  以下是主函数实验程序:[mw_shl_code=cpp,true]int main()
{
        u16 i,j,k,color;
        SysTick_Init(72);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
        LED_Init();
        
        USART1_Init(115200);
        
        
        for(i=0;i<240;i++)               
        {        
               
                USART1_SendStr("L");//列有效                        
                for(k=0;k<320;k++)                        
                {        
                        color=0x9EF7;        
                        //printf("%04X", color);//打印一列的颜 {MOD},以 结尾        
                        //已修改:单独发送字符
                        USART1_SendOneChar('9');
                        USART1_SendOneChar('E');
                        USART1_SendOneChar('F');
                        USART1_SendOneChar('7');
                                
                }
                UART_Put_Num(i);        //这个用来输出当前i的计数值
                USART1_SendStr(" ");        
               
        }
}[/mw_shl_code]



以下是串口发送一个字符程序:(已修改)
[mw_shl_code=applescript,true]int USART1_SendOneChar(uchar ch)  {
  
        //USART1->SR;
        //USART_ClearFlag(USART1,USART_FLAG_TC);  //发送完成,tc位自动置1

        USART_SendData(USART1,(u8)ch);        
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}
  return (ch);
}[/mw_shl_code]

串口初始化函数中,也已经注释掉USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断
串口助手里收到数据,还是会有丢失,比如前一次是i=4的时候,下一次就变成了i=6了,中间i=5的数据不知道去哪里了。

以下是串口助手收到的部分情况。
QQ图片20190512095731.png

一周热门 更多>