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

2019-07-21 00:27发布

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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
www88988
2019-07-21 04:14
15级的许同学 发表于 2019-5-12 09:36
5楼大哥你好,我按照你说的单独测试了串口输出:
  以下是主函数实验程序:[mw_shl_code=cpp,true]int m ...


这是我的测试结果  ((4 * 320)+3)*240 = 307920 一点也不少啊

//下面是子函数
void test(void)
{
  u16 i,k;//color;
         for(i=0;i<240;i++)               
        {                        
                                        USART1_SendStr("L");//???                        
                                        for(k=0;k<320;k++)                        
                                        {        
                                                                        //color=0x9EF7;        
                                                                        //printf("%04X", color);//???????,? ??        
                                                                        ////???:??????
                                                                        USART1_SendOneChar('9');
                                                                        USART1_SendOneChar('E');
                                                                        USART1_SendOneChar('F');
                                                                        USART1_SendOneChar('7');
                                                                                                         
                                        }
                                        //UART_Put_Num(i);        //????????i????
                                        USART1_SendStr(" ");  
          IWDG_Feed();  // 喂狗(没开启看门狗可以去掉)                               
        }
}

void USART1_SendOneChar(u8 ch)
{      
                USART_SendData(USART1,ch);        
                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        }

void USART1_SendStr(u8 *str)
{
     while( (*str)!='' )
    {
       USART1_SendOneChar(*str);
       str++;
     }
}



一周热门 更多>