在做一个工程测量的项目,由于探头要下放到100米深,因此采用了走485差分信号的方式来提高传输距离和增强抗干扰能力,为了防止出问题时一遍一遍的拆开设备,所以决定通过预留出来的485的A,B线来进行固件的在线升级。
首先简要介绍一下IAP,IAP即In Application Programming(在应用中编程),一般stm32的程序下载的时候都是下载到flash中地址0x800 0000的地方,而IAP就是在0x8000000处放入IAP程序,将主程序放在后面的地方,当需要在线更新固件的时候,跳转到IAP程序中,调用flash函数重写擦写主程序所在flash地址处的内容,擦写成功后即重新跳转到主程序去运行。(更详细的介绍可以点击这个链接 http://www.51hei.com/stm32/4315.html )
stm32官方给了一个通过串口进行IAP的例程,其原理是按照ymodem协议(可自行谷歌,在此不做详细介绍),一个包一个包的发送,接收完一个包之后发送ACK,配合超级终端使用,超级终端可以按照ymodem协议来传送文件,省去了人为去编写PC端程序的工作。这个例程中提供了keil,IAR等集成开发环境的工程,在此基础上稍作修改即可完成我们的程序。首先要做的便是加上485的控制端,由于485是半双工的,接收数据的同时不能发送,发送时不能接收,所以需要加上485的收发控制,即在每次发送数据前使能485发送,发送完成之后使能485接收。例如下面代码中的RS485_TX_Enable