STM32F103ZET6和C8T6程序移植过程中的问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天发现一个很有意思的事,之前写的C8T6上的程序在战舰开发板(ZET6)上一点问题没有,仅仅只需要改一下芯片的选型,而使用C8T6上的程序移植到ZET6只改变芯片的信号却是会报错,而且不能下载,在网上搜了搜,看到有的博主说是STM32芯片是向下兼容,即大容量ZET6兼容中容量C8T6,而C8T6改成ZET6却是需要进行下面一些操作。
一、解决报错问题
如果只更改芯片型号的话将会出现12个error,12个warning,大概情况会是这样。
想要解决这个问题,不仅仅需要改变芯片型号,还需要将启动文件改成中容量芯片启动文件,然后添加进来,之后把宏定义改成中容量宏定义,之后配置Programming Algorithm(可有可无,因为你在选择芯片型号的时候这个地方会自动更改),具体操作过程如下:
1.改变芯片型号
魔法棒->Device,将STM32F103ZE改成STM32F103C8
这个时候,魔法棒->Utilities-setings->Programming Algorithm中的配置会自动更改成相对应的容量大小的。
2.替换启动文件
将高容量芯片的启动文件改成中容量启动文件,即CORE文件夹下的
startup_stm32f10x_hd.s替换成与c8t6相对应的启动文件startup_stm32f10x_md.s。文件所在位置,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm文件夹下。
替换之后需要在MDK中也要换掉,将原来的startup_stm32f10x_hd.s remove掉,然后添加上startup_stm32f10x_md.s,过程就是点击魔法棒右边的那个图标,管理CORE文件夹下的startup_stm32f10x_hd.s ,删除之后,点add添加我们原来从固件库复制过来的startup_stm32f10x_md.s。这里要注意的是选择文件时要把文件类型改成AllFiles,不然就看不到startup_stm32f10x_md.s。
最终替换成功之后应该是这样
3.更改宏定义
魔法棒->C++中STM32F10X_HD,USE_STDPERIPH_DRIVER,改成STM32F10X_MD,USE_STDPERIPH_DRIVER,如图所示
最终编译效果如下图
二、下载问题
虽然编译没有问题,但是下载程序时还是会出现
这个时候,你就有可能选择芯片类型的时候没有点ok,去检查一下这魔法棒->Utilities-setings->Programming Algorithm中的配置会自动更改成相对应的容量大小的,我之前说可有可无的地方,看是否对应的中容量
如果全部完成了的话,应该就可以下载到c8t6单片机中了,如果想要再下回到zet6中,就只需要更改一下之前那个芯片选择即可。
最终的效果如图所示,