本帖最后由 dcexpert 于 2016-2-29 00:16 编辑
前几天发了一篇《
神器拆机-艾刷》的帖子,发现里面使用了STM32F401CC单片机,就想着能不能把它改造成一个STM32F401的学习板。经过一番摸索和实验,终于改造成功,可以用STLink下载仿真,因此把过程分享给大家。
先看一下改造后的连接图,使用Nucelo64开发板上的STLink/v做仿真下载器和STM32F401小板相连。
要实现仿真下载,就需要将SWD接口引出来。这个板子没有留专门的下载口,但是有一些测试点,其中就包含了SWD接口使用的SWCLK和SWDIO。
SWD接口的位置,有些引脚有多个位置可以连接,特别是VCC和GND,图示只是其中的一种方式。
特别需要注意的是虽然这个小板支持48pin和64pin两种封装的芯片,但是一些IO并不是一一对应的,不能只用方便测量的64pin去测。如LED的引脚,在64pin上是PA9和PC7,在48pin上却是PB4和PB7,为了这个问题还困扰了一会。
将Nucelo64开发板上CN2上的两个短路块取下,然后将杜邦线插在CN4上,只需要1-5这五个口。
连接好SWD后,并接上Nucelo和艾刷小板的USB线,然后在Keil中随便打开一个程序,修改Debug为STLink,如果可以识别出芯片,就说明没有连接正常了。
连接好SWD后,就可以编写一个小程序测试一下了。测试程序随便用什么软件,Keil、IAR、CoIDE都可以,这里使用了Keil和Mbed,也是为了顺便介绍一下Mbed的修改和移植。
- 首先用万用表找出LED的控制IO是PB4和PB7。
- 然后在Mbed的网站上(https://developer.mbed.org/compiler/)创建一个STM32F401的例程,使用blink模板,并将LED1改为PB_4。
- 注意这时程序还是不能直接用的,因为Mbed的程序只提供了STM32F401RE的程序,和STM32F401CC的不完全兼容,直接将BIN文件下载是不能运行的,需要进行一些修改。一种修改方法是修改源码,一种是直接替换obj和sct文件。下面介绍修改源码的方法,后面提供的参考程序是替换了文件。
- 先在Mbed网站的在线编辑器中,删除项目程序中的Mbed库,因为项目默认加入的是编译后obj文件,不能直接修改。
- 然后导入Mbed的源码,使用左上方菜单的导入(import)功能,选择导入库(Libraries),搜索mbed-src,选择mbed-src导入就可以了。如果激进一点,导入不稳定的开发库(mbed-dev)也是可以的。
- 完成后就可以把整个项目文件导出,可以选择多种不同的格式,这里选择Keil4的格式。
- 导出的文件是一个zip文件,展开后就可以用keil打开,Keil4或者Keil5都可以,使用Keil5需要先安装好STM32F4的支持包。先将芯片型号改为STM32F401CC,然后修改debugger为STLink,添加编程算法(Programming Algorithm)为STM32F4xx 256kB Flash。
- 编辑linker下的Scatter文件,修改分别ROM和RAM地址为0x40000和0x10000。
- 打开startup_stm32f401xe.s文件,修改54行的__initial_sp为0x20010000。
- 现在就可以编译程序,并通过STlink下载了。如果LED开始闪动,就代表ok了。否则在仔细检查一下上述的步骤。
- 修改好的测试程序:为了减少文件大小,我是直接替换了对应的obj文件和sct文件。需要完整源码的可以按照上面步骤进行修改。
STM32F401_blink.7z
(316.07 KB, 下载次数: 9)
再顺便介绍一下使用DFU方式下载程序的方法,对于怕麻烦不想连接SWD接口或者只想简单DIY的网友,可以使用这种方式。
虽然这个小板的资料不多,但是也可以自己尝试逐步摸索一下。下一步可以把串口和其他GPIO引出来,就可以实现更多功能了。如果在配一个小的OLED,效果更好。也可以想办法尝试一下音频口通信,这也是一个比较有趣的应用,就是参考资料太少。对于1元包邮的艾刷,这的确非常超值了,值得大家去弄一个回来研究和玩耍。