你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7275|回复: 5

USART通信程序死机问题

[复制链接]

6

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-9-19
发表于 2012-9-5 15:09:25 | 显示全部楼层 |阅读模式
 请教STM32跑UCOS的问题,我用USART2和另块板子通信,9600波特率,中断方式收发,数据比较少时没问题,多的时候(75字节)运行10几秒钟到1分钟程序就死掉了,我是每1秒钟读取75字节。
用仿真看了下程序停的位置,如下,这是怎么回事?知道的麻烦解释一下,非常感谢!

;******************************************************************************************
;*  Fault interrupt handler. 
;*  It simply enters an infinite loop.
;******************************************************************************************
HardFaultException
        B       HardFaultException
 
 
附上串口中断函数:
----------------------------------------------------------------------------------

void USART2_IRQHandler(void)
{
                unsigned int i;
    unsigned char msg[100];
        OS_CPU_SR  cpu_sr;
         
        OS_ENTER_CRITICAL();  //保存全局中断标志,关总中断// Tell uC/OS-II that we are starting an ISR
          OSIntNesting++;
       
          OS_EXIT_CRITICAL();          //恢复全局中断标志
       
          //OSTimeTick();     // Call uC/OS-II's OSTimeTick(),在os_core.c文件里定义,主要判断延时的任务是否计时到
 
           if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)           //判断读寄存器是否非空
          {       
                // Read one byte from the receive data register 
       
                msg[RxCounter1++]= USART_ReceiveData(USART2);   //将读寄存器的数据缓存到接收缓冲区里
       
                if(msg[0]!=0x3A)
                { 
                        RxCounter1 = 0;                                                 //判断起始标志
                }   
                else if(msg[RxCounter1-1]==0x0A && RxCounter1 > 2)                  //判断结束标志               
                {
                        if(msg[RxCounter1-2]==0x0D)
                        {                               
                                for(i=1; i< RxCounter1-2; i++)
                                {
                                        /* 判断接收的数据为数字或字母 */

                                        if((msg >= '0' && msg = 'A' && msg = 'a' && msg
回复

使用道具 举报

1

主题

20

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-9-5 15:25:46 | 显示全部楼层

回复:USART通信程序死机问题

看下NVIC的配置,把USART2的优先级提高试试。
回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-9-5 21:22:15 | 显示全部楼层

RE:USART通信程序死机问题

有没有可能是你的帧协议不对呢?导致溢出。
回复 支持 反对

使用道具 举报

2

主题

240

回帖

0

蝴蝶豆

中级会员

最后登录
2020-8-11
发表于 2012-9-5 23:14:32 | 显示全部楼层

回复:USART通信程序死机问题

回复第 3 楼 于2012-09-05 21:22:15发表:
有没有可能是你的帧协议不对呢?导致溢出。 


你厉害帧协议不对也会导致溢出。I 服了 YOU。
这是你的程序逻辑不严谨造成的 栈溢出 的问题。。
首先我要说的是你的程序逻辑不够清晰,你没有超时的操作。
 
 
回复 支持 反对

使用道具 举报

24

主题

317

回帖

0

蝴蝶豆

高级会员

最后登录
2020-10-10
发表于 2012-9-6 08:01:58 | 显示全部楼层

RE:USART通信程序死机问题

指针栈溢出  查看RxBuffer1 msg指针范围
回复 支持 反对

使用道具 举报

6

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-9-19
 楼主| 发表于 2012-9-6 08:50:47 | 显示全部楼层

RE:USART通信程序死机问题

确实是msg溢出,非常感谢上面的几个朋友!
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版