查看: 9552|回复: 14

[讨论] 怎么避免串口长时间等待应答进入死机状态

[复制链接]
  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
    发表于 2017-6-15 15:42:22 | 显示全部楼层 |阅读模式
    想实现的功能是:两mcu之间uart通信,我用的是mk64fn1m0xxx12,假如mcu1作为主动方,另一个mcu2等待数据应答,mcu2接受到mcu1的数据后给予应答,mcu1就处于等待应答,若超过5s还未收到应答,则重发一次,现在是怎么打破mcu等待应答这个过程,用的函数是

    UART_TransferSendNonBlocking(UART1, &g_uartHandle, &sendbuff);
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-6-12 12:56
  • 签到天数: 215 天

    连续签到: 1 天

    [LV.7]常住居民III

    3

    主题

    444

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1154
    最后登录
    2021-4-29
    发表于 2017-6-16 09:06:11 | 显示全部楼层
    用systick。Master一般用操作系统会好写一点。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24931
    最后登录
    2025-7-23
    发表于 2017-6-16 10:00:30 | 显示全部楼层
    楼主可以用中断结合定时器啊。
    发送过后,开启定时器,如果时间到5s,检查接收中断自定义标志,还没有接收到,则重发。
    如果接收到了,则关闭定时器。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
     楼主| 发表于 2017-6-16 15:33:35 | 显示全部楼层
    wuqt 发表于 2017-6-16 09:06
    用systick。Master一般用操作系统会好写一点。

    谢谢,我们项目可能暂时裸跑,不准备用系统
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
     楼主| 发表于 2017-6-16 15:42:54 | 显示全部楼层
    小恩GG 发表于 2017-6-16 10:00
    楼主可以用中断结合定时器啊。
    发送过后,开启定时器,如果时间到5s,检查接收中断自定义标志,还没有接收 ...

    思路是这样的,主要现在的问题是串口收发我是参考自带的ksdk2.1 uart里面的interrupt_transfer修改的,demo例程位置如下图,不知道串口中断ISR 在哪里,怎么把自定义的串口中断标志加上去,是不是添加在回调函数里面。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
     楼主| 发表于 2017-6-16 15:46:05 | 显示全部楼层
    zsltx 发表于 2017-6-16 15:42
    思路是这样的,主要现在的问题是串口收发我是参考自带的ksdk2.1 uart里面的interrupt_transfer修改的,de ...

    11.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24931
    最后登录
    2025-7-23
    发表于 2017-6-19 09:28:20 | 显示全部楼层
    zsltx 发表于 2017-6-16 15:42
    思路是这样的,主要现在的问题是串口收发我是参考自带的ksdk2.1 uart里面的interrupt_transfer修改的,de ...

    你可以在UART_UserCallback中添加。
    或者直接在UART0_RX_TX_DriverIRQHandler函数里面添加。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
     楼主| 发表于 2017-6-20 11:44:58 | 显示全部楼层
    本帖最后由 zsltx 于 2017-6-20 12:49 编辑
    小恩GG 发表于 2017-6-19 09:28
    你可以在UART_UserCallback中添加。
    或者直接在UART0_RX_TX_DriverIRQHandler函数里面添加。 ...

    我在回调函数里面设置了中断标志,我想在mcu1发送数据后,等待mcu2应答,超过2s  mcu1再发一次,如果mcu2还是没应答,在发一次,连续这样三次没应答,打印报错信息,程序里面逻辑是这样的:上电mcu1首先发送一次数据同时启动LPTMR定时器定时,等待mcu2应答,中断里面检测2s定时,定时到在中断服务程序里调用串口发送数据同时计数,计数三次关闭定时器。
    现在问题是:中断第一次能够发送数据,第二次和第三次发送不出去,如果把此处换成led亮灭,正常,怀疑是否是LPTMR中断和串口中断嵌套没有设置优先级导致的,不知道怎么设置优先级,或者这个问题是什么原因尼,默认的中断优先级是怎么样的。
    LPTMR中断服务程序
    bb.png

    串口回调函数,FPGAtoMCU_ACK_2S_WaitFlag  是我加的2s中断标志,
    cc.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-16 15:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    12

    主题

    61

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2018-1-24
     楼主| 发表于 2017-6-20 12:40:45 | 显示全部楼层
    zsltx 发表于 2017-6-20 11:44
    我在回调函数里面设置了中断标志,我想在mcu1发送数据后,等待mcu2应答,超过2s  mcu1再发一次,如果mcu2 ...


    LPTMR中断服务程序
    bb.png

    串口回调函数
    cc.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24931
    最后登录
    2025-7-23
    发表于 2017-6-20 17:14:42 | 显示全部楼层
    zsltx 发表于 2017-6-20 11:44
    我在回调函数里面设置了中断标志,我想在mcu1发送数据后,等待mcu2应答,超过2s  mcu1再发一次,如果mcu2 ...

    楼主你好!
    你说:中断第一次能够发送数据,第二次和第三次发送不出去,如果把此处换成led亮灭,正常
    此处指的是哪处?
    还有,你串口发送代码是中断还是查询?
    query_workcondition函数是什么样的?
    你可以把你程序文件分享出来,这样我好查看。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-25 07:17 , Processed in 0.099806 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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