ST意法半导体
直播中

学电超人

12年用户 819经验值
擅长:微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制
私信 关注
[问答]

确保看门狗在等待UART响应时不会重置系统的最佳方法是什么?

大家好,我正在为 STM8L152R8 编写一个程序,该程序通过 UART 将数据发送到另一个应该响应我的 mcu,尽管我使用定时器 4 的交易超时了 5 秒。不过我也想包括一个看门狗我们可以通过 IDWG 获得的最大超时是 1.7 秒。
确保看门狗在等待 UART 响应时不会重置系统的最佳方法是什么?








回帖(1)

吴晓成

2023-1-6 09:40:19
我看不到某些函数名称背后的内容,所以我假设。
while 循环中的feed_watchdog()看起来很危险,我只会在触发事件时调用它。
进一步假设看门狗周期为 1 秒,我将设置一个计数器(例如,值为 5),在定时器中断中递减它,并设置一个 WD 触发标志(并将计数器设置回 5)。
主循环根据标志向看门狗提供信息。安全系数 2 就足够了。
您可能需要仔细阅读 IWDG 规范,了解您应该如何喂养它。如果喂得太早,窗口 WDG 将触发。
这看起来也很危险:
send_uart_message() {
        同时(waiting_for_uart);
忙等待?
我曾经处理与任何主要代码分开的异步通信,主要是使用中断。
通过 TxE 传输,在发送最后一个字符之前需要将其禁用(因此在启动传输时启用)。
通过 RxNE 中断接收。相应的处理程序缓冲 Rx 数据,并在接收到消息结束字符(例如“n”)时再次设置标志。
主循环根据所述标志处理 Rx 数据。您可能需要复制 Rx 数据,否则可能会被新字符/消息覆盖。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分