找回密码
 立即注册
楼主: Anred

关于串口进有限状态机不掉电烧录的问题(已解决,解决方式:删除所有Delay_ms();)

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-30 08:55:07 | 显示全部楼层
aho*** 发表于 2024-12-27 19:04
P40=1后要加延时,不然复位了,看不到指示动作

我中间测试的时候是加了的,能够看到指示动作
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-09 10:01:19

33

主题

2356

回帖

4886

积分

论坛元老

积分
4886
发表于 2024-12-30 09:02:47 | 显示全部楼层

结果如何?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-30 10:07:38 | 显示全部楼层

并不能进入复位,然后如果删除复位的那条,则可以进入灯的状态显示
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-30 10:26:29 | 显示全部楼层
_奶*** 发表于 2024-12-27 19:44
咱就说,,能不能把你的while循环里的delay_ms 干掉啊

大佬,可以了,干掉所有的delay_ms后,能启动了
截图202412301025509773.jpg
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-09 10:01:19

33

主题

2356

回帖

4886

积分

论坛元老

积分
4886
发表于 2024-12-30 11:11:57 | 显示全部楼层

那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在主函数中处理接收的数据包。。虽然写的不算太好,但是就目前的这些功能上来说也是能用的,从你测试修改RTC时间的功能上就能看的出来。

由于你再没有处理当前数据包的时候就清除了RF,,那么在你主函数运行到数据包处理的代码之前,如果串口再次接收到其他的数据,那么你下面处理数据包的代码(你所谓的有限状态机部分)就会判断失效。

那么为什么 修改RTC时间的 就能正确执行呢?原因是,在你串口发送完数据之后,理论上你是不会发送其他的串口数据的,这个时候等到主函数去处理时,就能正确的执行功能。

那么为什么 不停电烧录功能 就极少数可以,大多数不行呢?原因是,你发送命令的这个行为,对于单片机来说可以看作是一个随机事件,如果当程序正好运行到 你的 有限状态机 这里,正好串口接收完一包命令,随后立马执行 状态机程序,那么就可以触发不断电下载。。。但是,如果当前的程序运行在 延时函数中(实际上你单片机绝大部分时间都在运行你的延时函数),串口接收了 不断电下载的命令,但是ISP软件很快就会接着发送7F通讯命令。显而易见的是还没有轮到你主函数处理串口数据,,这一包的数据就被破坏了。这样就是失败的情况。

image.png

那么如何解决呢?请广大坛友们群策群力了wunai

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-30 11:46:13 | 显示全部楼层
_奶*** 发表于 2024-12-30 11:11
那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在 ...

好强的分析流,大佬真棒,叩谢大佬
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-30 11:51:38 | 显示全部楼层
_奶*** 发表于 2024-12-30 11:11
那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在 ...

串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在主函数中处理接收的数据包。。虽然写的不算太好,但是就目前的这些功能上来说也是能用的,从你测试修改RTC时间的功能上就能看的出来。

我还想问一下大佬,这个地方中断怎么写是比较高效靠谱的呢
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-10 05:35 , Processed in 0.113231 second(s), 93 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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