由于前期是基于STM32Cube生产的code上改的,里面用的库都是HAL的。为了偷懒,在AN4735中找到一个基于HAL库的IAP例程,如下:
打开一看发现是通过USART升级的,但是本人用的是USB的VCP,也就是虚拟串口,虽说是串口,但还是有些不一样。
坑1:USB VCP通信
将USART收发程序改为USB收发程序后,发现Ymodem协议一直不通,没办法只能往里面看,先看了Ymodem协议,链接如下:http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt
本人使用的SecureCRT 6.5,收到数据包的时候,数据总是不完整。前后搞了两天,因为例程中说用的是超级终端,网上有人说这两者的Ymodem有一点点不通,我不太懂,所以就怀疑SecureCRT发的到底对不对。然后用两台PC,用两根串口对发,发现SecureCRT发的是对的,数据包很好。找了很久发现是,接收的buf太小了,不是UserRxBuffer,不知道这个设置有什么用。
坑2:CRC
CRC校验一直没有计算出对的值,发现初始化的时候设置问题,从历程中复制过去就好了;
坑3:Ymodem协议
例程中Ymodem在结束时的协议与说明Ymodem里的不同,这样SecureCRT会报错,但其实已经更新ok了。
最后面加了几句进去就好了: