STC单片机在每次上电前检测串口是否有有下载信号进入ISP模式否则运行用户程序。
以前下载的时候每次都需要一个断电再开电的过程,甚是痛苦。
后来发现STC 1T系列的单片可以通过下面的方式软件重启:
sfr IAP_CONTR = 0xC7; IAP_CONTR=0x60;
于是想到可以加入一个检测串口下载信号的代码,然后启动这个软件重启来达到不需要开关电源烧写程序的目的。
然后通过串口监控软件发现STC的ISP在烧写程序之前总是发送一连串的0x7F来寻找是否有单片机,单片机再发送一连串的0x7F与ISP程序握手。
于是我在单片机上写下一段检测0x7F然后软件重启的代码,结果发现不行。
我想应该是波特率的问题,单片机串口接收中断的波特率设为9600,而ISP不一定是9600,但找了几个串口监控软件都貌似不能监控波特率是多少。
直接将单片机接收到的数据打印出来后发现在9600波特率下接收到的“0x7F”是一连串的“0xFE 0x9e",不管了,直接就检测”0xfe 0x9e“吧。
结果成功了!
后来修改:
其实不是的,上面那句”结果成功了“是我杜撰出来的,我检测出0xfe 0x9e后没有试验就来写这篇了,以为绝对能成功了。
实际上是这样的,51单片机检测出来的值是0x80,那个0xfe 0x9e我是用stm32检测出来的,因为stm32上有个屏幕,我直接插上去打印的。嘿嘿
不过这个0x80确实成功了,不用每次都去按键,确实爽啊!!!哈哈