|
目前已经支持的mcu有: stm32f072cb, stm32f303cc, gd32f350cb, stm32f030c8, stm32f103rc. 前面三者均实测可用. 在flash每页1k的mcu上共占用8k flash, 其中eeprom占1页, 提供256字节eeprom空间; 在flash每页2k的mcu上共占用10k flash, 提供512字节eeprom空间.6 n. c3 f* y; _* Y, C+ ~3 ? ) C4 `! t; ^2 B; }- R4 \+ e- B7 H 串口波特率定为500kbps, 因为为了时钟配置简单起见, bootloader在8M HSI时钟运行.* A' a6 a7 W) L& y: S 使用时只需要选择对应型号的Makefile, 并在usart.c里修改用到的usart外设和管脚即可. 上位机见根目录的iap.py, 用python3执行, 需要zlib和bincopy两个第三方库. app这边需要做的:0 G0 J+ P. C; o7 d% `! R, u 1.写入bootloader后在串口命令行执行## sysinfo, 取得app区的入口地址, 应该是0x08002000或0x08002800.& U) X* {* x$ |$ g0 B, ^ 2.修改链接文件(.ld或.lds, 在不同开发环境下可能不同), 把flash区的起始地址改为上面的入口地址, length要根据页大小减去8k或10k. 3.Makefile或者其他类似指定了flash大小的场合,要减去8k或10k. 4.main.c在最前面加上两行, 其中VECT_TAB_OFFSET的值是0x2000或0x2800.
如果是stm32f0系列呢?它们不提供重定向中断向量表的功能, 所以NVIC_SetVectorTable就没用了. 不过bootloader还是能用的,稍微麻烦一点, 需要在main.c最前面加上这几行, 把中断向量表复制到SRAM的起始位置, 然后把复位地址改为指向SRAM起始位置. APP_BASE的值是前面提到过的0x08002000或0x08002800. __enable_irq()则还是需要的. 此外, .ld/.lds文件里SRAM起始位置需要改为0x20000100, LENGTH要减去256.
如果要在app里使用eeprom呢?只要在app里加上flash_eeprom.h和flash_eeprom.c两个文件, 并在使用前先初始化即可:' C5 q3 Q/ V v$ K4 @! w! Y
版权声明:被大佬糊弄的只会点灯的小菜鸡 如有侵权请联系删除 5 i" H- a1 j( y& {$ x( o, H 8 {: k4 v) q- n) A& |5 s W% J6 d |
STM32C542RC开发板的串口不定长数据接收实验
STM32C542RC开发板的串口DMA发送及接收实验
终于完成了STM32C542RC开发板的串口发送实验
STM32L562DK探索板——串口通讯的再测试
经验分享 | STM32 IAP应用时的跳转注意事项
实战经验 | 碰到hardfault问题你还在死磕代码吗?
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
微信公众号
手机版