4748|5

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32的UART5中断收发数据问题 [复制链接]

波特率是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                 {
                        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         UART5_Tx_Char(*pt++);       
        //printf("\r\nUART5_test_2:\r\n",USART_ReceiveData(UART5));
   }       
   //delay_ms(500);
}  

UART5发送数据没有问题,但是接受数据时,平均每10次有两次会收不到数据,这是为什么?
(UART5<=>WIFI,手册技术支持上WIFI波特率115200,但是我试过115200,收发数据根本不行,9600恰好可以)
此帖出自stm32/stm8论坛

最新回复

难以理解为什么一边用库,还一边用寄存器,要么多用库,要么都用寄存器。中断接收直接放入缓冲,在循环中处理缓冲中的数据就好。  详情 回复 发表于 2015-5-12 11:12
点赞 关注
 

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
其中,当状态值UART5_RX_STA为数组最大缓存值时,接收数据时正确的,如果小于数组最大缓存值,则收不到数据,或者接收数据不完全
此帖出自stm32/stm8论坛
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
有人吗?
此帖出自stm32/stm8论坛
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 
UART5_RX_STA 这是个寄存器吧,看看这个寄存器各位是什么意思?数据FIFO溢出了吧?
此帖出自stm32/stm8论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

5
 
难以理解为什么一边用库,还一边用寄存器,要么多用库,要么都用寄存器。中断接收直接放入缓冲,在循环中处理缓冲中的数据就好。
此帖出自stm32/stm8论坛
 
个人签名我的博客
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

6
 
Study_Stellaris 发表于 2015-5-12 11:05
UART5_RX_STA 这是个寄存器吧,看看这个寄存器各位是什么意思?数据FIFO溢出了吧?

的确是的,有数据溢出,UART5_RX_STA也很重要,关系到整个程序的逻辑问题。在解决数据溢出问题后,我在收到想要的数据后(进入中断后),完成后又会进入中断,具体是什么不清楚,不过我用程序把这个问题解决了,用的就是UART5_RX_STA
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 15

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表