<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
快速应用部分是教给用户如何在当前源码的基础上增加自己的功能性程序
在当前源码的基础上增添自己的功能,以快速的完成项目是个不错的选择.
当前源码是以串口2和WIFI模块通信,串口1作为日志打印!(在制作电路板的时候需要注意!)
如果用户想调整串口请告知我,我来为大家免费调整.
如果做项目,请大家必须使用STM32F103CBT6 及其以上的Flash>=128KB的单片机
程序源码兼容STM32F103全系列!可以放心选择其它型号的单片机.
如果用户不是使用的ESP8266,但是通信模式和ESP8266是一样的,同样可以参考这篇文章移植使用!(最后有介绍)
打开BootLoader程序,我说一下用户增添程序可能需要知道的地方.
1.根据自己的芯片在stmflash.h设置下
2.如果需要屏蔽日志,屏蔽usart.c中fputc函数中的以下两行即可.
3.如果USART1_IT_IDLE==1 说明串口1接收到一条完整的数据
数据存储在 Usart1ReadBuff数组,接收的数据长度Usart1ReadCntCopy
4.程序是使用PB5控制着崩溃处理和APUConfig配网,低电平有效.
有些用户习惯高电平有效,可以在key.h文件中 修改 #define KeySmartConfigDown 1
5.一般BootLoader里面不会加其它程序,很多用户可能会加液晶屏
用液晶屏显示升级的状态.
获取程序文件的时候,当前的程序是在主循环不停的循环把程序文件从环形队列取出来
然后写入Flash,如果主循环有太大的延时会造成环形队列溢出,程序接收不完整!
用户使用液晶屏的时候如果判断 IAPStructValue.LoopListPutStart == 1 就说明
在接收程序文件中,这时候就不要去操作液晶了(如果使用的是软件延时除外)
6.开始更新,备份程序,更新错误,刚升级完程序等状态在IAP.C的IAPInit(); 函数里面
如果有必要可以用液晶屏显示
7.如果大家在BootLoader 里面增加了其它的中断函数,需要在此处屏蔽中断
8.修改完BootLoader程序以后,生成bin文件,看一下bin文件大小
然后根据bin文件大小在 stmflash.h中调整下flash分配
如果使用的是128KB Flash的单片机:
FLASH_IAP_SIZE XX 根据BootLoader生成的bin文件大小设置(该值需要大于生成的bin文件大小)
FLASH_UPDATE_SIZE 1 //存储更新相关数据所有FLASH大小,不需要改动.
FLASH_USERDATA_SIZE XX 如果用户存储的数据量比较大,增加该值即可
如果使用的是256KB及其以上 Flash的单片机:
FLASH_IAP_SIZE XX 根据BootLoader生成的bin文件大小设置(该值需要大于生成的bin文件大小,设置为4的倍数)
FLASH_UPDATE_SIZE 4 //存储更新相关数据所有FLASH大小,设置为4
FLASH_USERDATA_SIZE XX 如果用户存储的数据量比较大,增加该值即可(设置为4的倍数)
9.如果使用的其它网络芯片需要修改模块连接服务器部分,连接成功之后返回 1
10.如果模块不是透传模式,需要修改发送get指令部分(根据自己模块的指令做修改)
11, 如果模块不是透传模式,还需要修改接收数据部分
一般不是透传模式,模块接收每一条数据的开头都会携带着其它自己添加的信息
假设ESP8266在非透传模式下接收到123个数据,返回给单片机的数据为:
+IPD,123:真实数据
用户可以参考下面的剔除程序,修改为自己的剔除程序.
打开用户程序,说一下需要修改的地方.
1.BootLoader里面的看门狗并没有关闭,
跳转到用户程序照样运行,在运行用户程序的时候请及时喂狗(5S内)
2.编译下载BootLoader程序到单片机,根据打印的日志修改用户程序中断偏移和配置.
3.修改用户程序stmflash.h文件,和BootLoader里面保持一致
4.在用户程序里面获取上次更新的状态
一般把 IAPUpdateDispose() 函数放到客户认为用户程序执行已经没有问题的地方执行.
5.如果用户用的其它类似的网络模块,需要修改连接服务器获取info.txt文件部分
6.如果直接使用的当前用户程序源码并没有什么需要特别注意的地方
如果有疑问可以询问我,我将根据用户的疑惑修改完善此文章.