任务:
通过CueMX生成代码,然后烧写到STM32G0开发板上。
遇到的问题:
1. CubeMX生成的代码能用Keil编译,但是下载不到flash中
2. CubeMX再次生成代码后,SWD无法识别芯片。
逐个击破:
1. CubeMX生成的代码能用Keil编译,但是下载不到flash中
编译后,点击keil的debug后者download图标,无法下载,报没有flash算法。
既然报没有flash算法,那就去debug配置那里,选择flashdownload,的确没有选择算法
既然没有选择flash算法,那就add一个。
add的时候发现没有STM32 G0对应的flash算法。随便选择一个也是不能烧写的。那应该是必须选择适合STM32G0内falsh的算法。
回想一下,这一台电脑第一次烧STM32 G0的,应该是没有装G0对应的pack。
点击“魔法棒 - Device”一看,确实没有G0对应的芯片
立马安装对应pack(选中G0的pack,无脑下一步安装就行了)
官网下载都是很慢的,我都是网站找好别人下载的,哈哈哈哈
安装完后,重新打开keil工程。果然,芯片那里就有了G0芯片,算法选择那里也有了对应的G0的falsh算法。
至此,烧写正常了!!!
2. CubeMX再次生成代码后,SWD无法识别芯片。
由于没有开发板原理图,不知道LED对应哪个GPIO,改用串口输出打印,测试代码运行情况。CubeMX上选择uart1使能,配置相关串口参数,如异步、波特率,停止位等,这样PA9,PA10就复用成了uart1功能,重新生成代码后,重写f_putc函数,添加prtinf打印,再次编译,下载。
printf实现参考:
STM32使用printf函数的步骤和注意事项_stm32 printf_石头牛的博客-CSDN博客
无奈下载时说找不到设备,又无法下载了!!!
最终,点击debug的时候,发现STlink设备确实没有找到!!!
回想一下,我用的是Jlink,不应该是STlink,报错不是正常吗?!再次选择Jlink,终于烧写成功。
思考为什么会变成STlink??
---CubeMx重新生成代码,配置项会变回STlink!!
---CubeMx重新生成代码,部分代码会被恢复,不想自己辛辛苦苦写的代码被覆盖掉,那就要按照CubeMx的规则,将自己的代码写在两个注释之间,这样CubeMx重新生成代码时就不会覆盖自己的部分。
如:
/* USER CODE BEGIN */
MyCode...
/* USER CODE END */