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

USART通信程序死机问题

[复制链接]
pyh921 提问时间:2012-9-5 15:09 /
 请教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
收藏 评论5 发布时间:2012-9-5 15:09

举报

5个回答
龙龙-341962 回答时间:2012-9-5 15:25:46

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

看下NVIC的配置,把USART2的优先级提高试试。
zykzyk-93033 回答时间:2012-9-5 21:22:15

RE:USART通信程序死机问题

有没有可能是你的帧协议不对呢?导致溢出。
yjwpm 回答时间:2012-9-5 23:14:32

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

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


你厉害帧协议不对也会导致溢出。I 服了 YOU。
这是你的程序逻辑不严谨造成的 栈溢出 的问题。。
首先我要说的是你的程序逻辑不够清晰,你没有超时的操作。
 
 
cjq_enjoy-15073 回答时间:2012-9-6 08:01:58

RE:USART通信程序死机问题

指针栈溢出  查看RxBuffer1 msg指针范围
pyh921 回答时间:2012-9-6 08:50:47

RE:USART通信程序死机问题

确实是msg溢出,非常感谢上面的几个朋友!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版