打印
[STM32F1]

平均每10次有两次会收不到数据

[复制链接]
381|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tian111|  楼主 | 2017-7-21 21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
波特率是9600
void UART5_IRQHandler(void)
{
         u8 res;               
         //if(USART_GetFlagStatus(UART5, USART_FLAG_RXNE)!=RESET)
         if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)//接收到数据中断,(接收到的数据必须是0x0d 0x0a结尾)
         {               
                 res =USART_ReceiveData(UART5);//读取到收到的数据        
                 if(UART5_RX_STA<UART5_MAX_RECV_LEN)                //还可以接收数据
                {
                         TIM_SetCounter(TIM3,0);//计数器清空                                         
                         if(UART5_RX_STA==0)TIM3_Set(1);                 //使能定时器3的中断
                        UART5_RX_BUF[UART5_RX_STA++]=res;                //记录接收到的值                                 
                 }else
                 {
                         UART5_RX_STA|=1<<15;                                        //强制标记接收完成
                }         
          }        
}

采用的是循环发送数据方式:
/**************************************************
   UART5发送一个字节
**************************************************/
void UART5_Tx_Char(u8 i)
{
     USART_SendData(UART5,i); //发往WIFI模块
        while(USART_GetFlagStatus(UART5, USART_FLAG_TXE)==RESET);
}  
/*******************************************
UART5发送字符串
*******************************************/
void UART5_Tx_Str(u8 *pt, u8 length)
{   
         u8 i;
         for( i=0;i<length;i++ ){
         UART5_Tx_Char(*pt++);        
         //printf("\r\nUART5_test_2:\r\n",USART_ReceiveData(UART5));
    }        
    //delay_ms(500);
}  

UART5发送数据没有问题,但是接受数据时,平均每10次有两次会收不到数据,这是为什么?
沙发
gongche| | 2017-7-21 21:47 | 只看该作者

手册上怎么说得

使用特权

评论回复
板凳
tian111|  楼主 | 2017-7-21 21:48 | 只看该作者

UART5<=>WIFI,手册技术支持上WIFI波特率115200

使用特权

评论回复
地板
chenho| | 2017-7-21 21:49 | 只看该作者

那你没试试115200

使用特权

评论回复
5
tian111|  楼主 | 2017-7-21 21:50 | 只看该作者
试过,收发数据根本不行,9600恰好可以

使用特权

评论回复
6
gongche| | 2017-7-21 21:51 | 只看该作者

也就是说,当状态值UART5_RX_STA为数组最大缓存值时,接收数据时正确的,如果小于数组最大缓存值,则收不到数据?

使用特权

评论回复
7
tian111|  楼主 | 2017-7-21 21:52 | 只看该作者

是啊,或者接收数据不完全

使用特权

评论回复
8
huwr| | 2017-7-21 22:00 | 只看该作者

U5串口中断里加清除中断函数了吗

使用特权

评论回复
9
huanghuac| | 2017-7-21 22:01 | 只看该作者

我估计你的逻辑也有些问题

使用特权

评论回复
10
happy_10| | 2017-7-21 22:02 | 只看该作者
STM32和外部通信的时候,是向UART5的寄存器里面不停的写数据么。

使用特权

评论回复
11
wenfen| | 2017-7-21 22:03 | 只看该作者

USART_ClearITPendingBit(USART_TypeDef* USARTx, u16 USART_IT);
USART_ClearFlag(USART_TypeDef* USARTx, u16 USART_FLAG);

使用特权

评论回复
12
tian111|  楼主 | 2017-7-21 22:04 | 只看该作者

哦,还真是啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

797

主题

8878

帖子

7

粉丝