# STM32G030_BOOT **Repository Path**: JimmyOnline/stm32-g030-boot ## Basic Information - **Project Name**: STM32G030_BOOT - **Description**: 基于STM32G030和NRF24L01模块实现远程升级OTA的功能。 Bootloader协议打算采用Ymodem协议。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 7 - **Created**: 2022-02-15 - **Last Updated**: 2022-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32G030_BOOT ## 2022-01-17更新 经过反复考量,nRF24L01不适合做透传模块。因为我始终无法解决半双工如何正确分包的问题。研究了它的动态负载长度功能,发现它无法分包。比如你想发送“你好”,这串字符串的HEX码是`C4 E3 BA C3`,但是在接收端收到的是 ``` C4 E3 BA C3 ``` 它按照每个HEX被分包了,这点我无法接收。 如果仅仅做Bootloader是可行的,Yomdem协议正好是一问一答,可以用半双工实现。不过在Bootloader之前,有用串口做的一些简易菜单选项,这个就很难通过nRF24L01实现了。 ## 介绍 基于STM32G030和NRF24L01模块实现远程升级OTA的功能。 Bootloader协议打算采用Ymodem协议。 主芯片采用STM32G030F6P6,与NRF24L01模块的通讯方式采用硬件SPI,原理图如下:

把整体任务分解主要是以下四步: - [x] 1.实现NRF24L01的驱动,完成对其透传功能的实现。 - [x] 2.APP和BOOT互相之间跳转的功能的实现。 - [x] 3.FLASH读写功能的实现。 - [x] 4.Ymodem协议的移植。 - [ ] 5.把串口的驱动,替换成nRf24L01的驱动。 # 操作说明 在Doc文件夹中有SecureCRT这个工具,需要用它作为上位机来发送Ymodem协议的文件。 1.连接后输入回车键。出现以下界面(我用的芯片是STM32G030F6P6不过这里的字符串我没改,程序是移植的官方的IAP例程,所以显示的是F10X):

2.按照提示,输入1之后,单片机会一直发送字符“C”等待Bin文件传输。 3.使用Yomdem发送需要的文件,Bin文件我已经生成了,在RC-2G4_SEND_APP文件下。

3.等待传输完成。

4.按下3跳转到APP程序

这里就跳转到NRF24L01的发送程序了。我代码里是循环在发送0x00~0xff。 这儿的中文显示乱码了,因为我的程序的字符编码方式GBK。而这个上位机是不支持这个汉字编码的。所以这里的中文会乱码。(可能支持UTF-8编码,不过我没尝试过,忽略中文乱码这点) 至此为止,BootLoader就全部完成了。 # 未来展望 基于这个简单的例程,我们应该就可以设计出自己的BootLoader程序了。 最开始制作的时候我是像设计三个程序区,一个备份区,一个APP区,一个BootLoader区。如果发生升级失败,可以把备份区的代码烧录到APP区,而不会导致升级失败就卡死。 不过最后完成的时候,STM32G030F6P6这个单片机,他的Flash空间就只有32KB。我制作了BootLoader程序之后,就用掉了14kb。所以剩下的空间不够划分成两个程序区了。所以这个想法就作为未来展望。