43.QT自定义boot工具(上下位机联调)--Apple的学习笔记

一,前言

42.QT上位机CAN通信--Apple的学习笔记我已经实现了can通信的上位机,那么我要让其发挥作用,就是添加其实用功能,比如bootloader,但是要用uds协议,下位机我这边uds实现起来很容易,但是基于QT c++的上位机基于uds的bootloader代码,我得从空白开始实现了。所以我觉得移植一个现成的自定义的bootloader协议,先不用uds。目的是验证上下位机的框架,将来再替换为uds就解决问题了。

二,说干就干

仅移植QT上位机的协议,先从st官网下载了一个stm32f1的自定义bootloader代码,看懂它的自定义boot代码后,自己添加一个ui界面,然后赋予按钮功能,分分钟解决了。它的自定义协议是通过id来作为命令,不同的命令发给下位机有不同的操作。

三,遇到的问题

  1. hex文件识别不正确,read的raw文件也就是bin文件可以正常解析下载。keil生成bin文件,需要在配置的user界面中添加fromelf --bin -o "[email protected]" "#L"。
  2. 我的下位机用的是can中断的方式,原来官网的是一个while循环中一直等待用的,里面还有第一次的mac握手,基于我这边中断方式的架构修改了下位机的框架仅将自定义的bootloader协议移植过来,底层flash驱动也重新修改了来适配stmf407zg芯片。
  3. QT中原版协议中有can握手,类似于以太网的心跳包,我删除了。添加了按住key0则进入刷新,否则power on reset是直接跳入app的。

四,效果

自动bootloader,上下位机联调成功。boot用了16K。然后就是app了,app地址从0x08004000开始


image.png

一收一发,抽查了下载的bin内容,是通过QT的0x706发出的。最后刷新完成后,通过0x704发送跳转地址命令,然后app正常运行了,哈哈~


image.png

五,小结

又发明创造了一个简易小工具,当然功能太弱了,通用性也不强。但是凡事从简单到复杂,将来会对QT功能进一步扩展。且将bootloader改成标准uds协议,哈哈,好有成就感,学以致用,乐趣无穷!

你可能感兴趣的:(43.QT自定义boot工具(上下位机联调)--Apple的学习笔记)