查看: 2059|回复: 12

[求助] lpc1768上电偶尔死机,看门狗都不起作用

[复制链接]
  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
    发表于 2021-1-20 10:49:02 | 显示全部楼层 |阅读模式
    大佬们, 在设备上面,会出现单片机上电偶尔直接死机的现象,看门狗都不起作用,请问这个和软件相关性大吗?

    最佳答案

    wdliming-222461 发表于 2021-1-20 20:54 想问问,我bootloader里面初始化了串口,跳转前禁用串口,跳转后,app里面也重新初始化串口,这样的逻辑对 ... 初始化串口实际上是完成了串口寄存器的设置工作,如果有证据 ...
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 10:50:55 | 显示全部楼层
    晶振是8M,32768的rtc晶振,电路上也接了。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 10:55:34 | 显示全部楼层
    本帖最后由 wdliming-222461 于 2021-1-20 10:56 编辑

    启动文件都是使用的标准库里面的。单独在稳压电源上面,做测试,从未出现死机,都能正常运行,但是单片机安装到设备上面就会偶尔出现死机,
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-3-24 09:39
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12

    主题

    94

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2021-12-28
    发表于 2021-1-20 11:12:59 | 显示全部楼层
    wdliming-222461 发表于 2021-1-20 10:55
    启动文件都是使用的标准库里面的。单独在稳压电源上面,做测试,从未出现死机,都能正常运行,但是单片机安 ...

    这样的死机多半由于硬件或者环境造成,原因就太多了...,目前能做的也就是看看死机状态下的MCU的状态, 时钟波形还有没有,IO状态是什么样的等等
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 11:16:25 | 显示全部楼层
    tony2k20 发表于 2021-1-20 11:12
    这样的死机多半由于硬件或者环境造成,原因就太多了...,目前能做的也就是看看死机状态下的MCU的状态,  ...

    好的,多谢多谢~提醒
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 12:20:50 | 显示全部楼层
    tony2k20 发表于 2021-1-20 11:12
    这样的死机多半由于硬件或者环境造成,原因就太多了...,目前能做的也就是看看死机状态下的MCU的状态,  ...

    请教下,我上电有个读内部flash的操作,电源不稳定,读flash会死机吗??
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-3-24 09:39
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12

    主题

    94

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2021-12-28
    发表于 2021-1-20 13:18:17 | 显示全部楼层
    wdliming-222461 发表于 2021-1-20 12:20
    请教下,我上电有个读内部flash的操作,电源不稳定,读flash会死机吗??

    各种类型的干扰,信号线或者电源线上的脉冲或者大纹波,实际上对数字电路而言都有可能造成的是0,1判别的错误,不论是地址总线或者数据总线都有可能发生,包括MCU内部寄存器的内容都有可能发生错误,比如 PC 指针跳转到一个错误地址...
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 20:47:29 | 显示全部楼层
    tony2k20 发表于 2021-1-20 13:18
    各种类型的干扰,信号线或者电源线上的脉冲或者大纹波,实际上对数字电路而言都有可能造成的是0,1判别的 ...

    现在怀疑,是被串口接收中断搞得死机,因为lpc1768作为从机,上位机上电后,就发送一大堆数据,我lpc768初始化后,初始化串口,并先将rs485的反向引脚设置为输出,串口初始化后,才将rs485的反向引脚设置为输入,会不会我串口中断出面处理不当??
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 20:48:14 | 显示全部楼层
    tony2k20 发表于 2021-1-20 13:18
    各种类型的干扰,信号线或者电源线上的脉冲或者大纹波,实际上对数字电路而言都有可能造成的是0,1判别的 ...
    1. CM3_ROOT
    2. void UART3_IRQHandler(void)
    3. {
    4.     uint32_t intsrc, tmp, tmp1;
    5.     uint8_t tmpc, i;

    6.     NVIC_ClearPendingIRQ(UART3_IRQn);

    7.     /* Determine the interrupt source */
    8.     intsrc = UART_GetIntId(LPC_UART3);
    9.     tmp = intsrc & UART_IIR_INTID_MASK;


    10. #if 0
    11.     // Receive Line Status
    12.     if (tmp == UART_IIR_INTID_RLS)
    13.     {
    14.         // Check line status
    15.         tmp1 = UART_GetLineStatus(LPC_UART3);
    16.         // Mask out the Receive Ready and Transmit Holding empty status
    17.         tmp1 &= (UART_LSR_OE | UART_LSR_PE | UART_LSR_FE \
    18.                  | UART_LSR_BI | UART_LSR_RXFE);
    19.         // If any error exist
    20.         if (tmp1)
    21.         {
    22.             _MSG_DBG("tmp1=%x\n", tmp1);
    23.             UART3_IntErr(tmp1);
    24.         }
    25.     }
    26. #endif
    27. #if 1
    28.     // Receive Data Available or Character time-out
    29.     if ((tmp == UART_IIR_INTID_RDA) || (tmp == UART_IIR_INTID_CTI))
    30.     {
    31.         //UART_IntReceive();
    32.         //直接发送会上位机,232是全双工通信
    33.         //UART_SendByte(LPC_UART3, UART_ReceiveByte(LPC_UART3));
    34.         //上一句和下面两个语句等价
    35.         //UART_Receive((LPC_UART_TypeDef *)LPC_UART3, &tmpc, 1, NONE_BLOCKING);
    36.         //UART_SendByte(LPC_UART3, tmpc);

    37.         Uart_Receive_FSM(&uart_data_to_linux);
    38.     }
    39. #endif

    40. #if 0
    41.     // Receive Data Available or Character time-out
    42.     if (tmp == UART_IIR_INTID_RDA)
    43.     {
    44.         //UART_SendByte(LPC_UART3, UART_ReceiveByte(LPC_UART3));
    45.         //上一句和下面两个语句等价
    46.         //        UART_Receive((LPC_UART_TypeDef *)LPC_UART3, &tmpc, 1, NONE_BLOCKING);
    47.         //        UART_SendByte(LPC_UART3, tmpc);

    48.         for (i = 0; i < 7; i++)     /*  连续接收7个字节   剩余1个触发cti中断来读取,避免了接收8及8整数倍的字节数数据*/
    49.         {
    50.             //GucRcvBuf[i] = LPC_UART2->RBR;
    51.             GucRcvBuf3[cti_cnt_2] = UART_ReceiveByte(LPC_UART3);
    52.             cti_cnt_2++;
    53.         }
    54.     }
    55.     if (tmp == UART_IIR_INTID_CTI)
    56.     {
    57.         //UART_IntReceive();
    58.         //        UART3_Flag = 1;
    59.         //        UART_SendByte(LPC_UART3, UART_ReceiveByte(LPC_UART3));
    60.         while ((LPC_UART3->LSR & UART_LSR_RDR) == UART_LSR_RDR)    /*  判断数据是否接收完毕  */
    61.         {
    62.             //            cti_cnt++;
    63.             //            _MSG_DBG("cti=%d\n", cti_cnt);
    64.             GucRcvBuf3[cti_cnt_2] = UART_ReceiveByte(LPC_UART3);
    65.             cti_cnt_2++;
    66.         }
    67.         UART3_Flag = 1;
    68.     }
    69. #endif
    70. }

    复制代码


    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
     楼主| 发表于 2021-1-20 20:49:03 | 显示全部楼层
    这个中断函数是参考标准库的,标准库是rs232的,请问这个中断处理函数对不?
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 12:02 , Processed in 0.137228 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表