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

查看: 7282|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版