本帖最后由 eggeggice 于 2015-1-22 14:11 编辑
板子到了几天了,之前因为忙别的事没时间来玩,昨天玩了一下午,终于写进了第一个程序。
因为我不是按照
论坛上的攻略走的,所以遇到了很多问题,我觉得可以写下来,尤其适用和我一样觉得固件库和jlink太高端不敢用的。后来看了官方的manual,感觉很多问题讲的很全面很基础。资源:
废话不多,先上图(左边是同学自制的没有任何外设的51的板子,右边是freescale的板子,真的很小巧。。。)
首先要
认识一下这块板子,可以参见群主大大的帖子:
https://bbs.elecfans.com/jishu_464492_1_1.html和@ccly0208 的帖子:
https://bbs.elecfans.com/jishu_464663_1_2.html。
很多问题论坛里的帖子里已经解释了,建议大家多去看看论坛的帖子,能学到不少知识。
然后就是
连线。我刚开始看到两个miniUSB接口(不是正常那种大号的USB和现在流行的microUSB,而是以前MP3流行的miniUSB),以为需要两根线,后来才知道只要一根线就好了。如下图,
接下来是安装驱动、升级openSDA和安装keil了。
首先是
安装驱动。
运行
fslkinetisdriversv120.exe后一直点下一步,默认会把驱动给装上的。可能需要重启,否则不会被识别。我就是重启后才连上的。
如果出现以下状况,我建议重启试试:
1、右下角显示连上了硬件
2、非bootloader模式(也就是没有长按复位键再连线)我的电脑中显示为bootloader
3、双击该bootloader会卡住,然后……慢慢……就变为不可识别了→_→……
在我的电脑里看是这样,
或者这样,
或者这样,
楼主当时就抓狂了,在群里问了半天也没搞清楚,最后还是重启好了。
然后是
升级openSDA,这个也蛮重要的,因为升级后可以免去很多麻烦。升级可以参照群主大大的帖子:
https://bbs.elecfans.com/jishu_464564_1_1.html。
非常详细,我就不重复了。
配置openSDA:这一步很重要,因为@初代饭影 大大用的@suyong_yq 大大的固件库,与我直接用官方默认的openSDA(也就是
ARM的CMSIS-DAP标准,openSDA是freescale给它
取的新名字)debug有区别。
使用openSDA前,有一步很重要的工作要做,就是让系统将这个芯片识别为芯片,而不是以大容量存储设备。
可能大家都注意到了,把芯片插上电脑,debug LED(也就是那个
绿色的小LED)一直亮着。
这是因为芯片的openSDA接口没有被正确配置,也就是说端口不知道你要用openSDA还是别的什么协议来
通信。
附件里有一个后缀名比较奇怪的文件
CMSIS-DAP.S19
(好像是Motorola的什么格式文件,我猜是某种通信协议吧)。长按复位键连上芯片进入debug模式,将这个文件复制进去
,然后拔掉重新插上,这时候在我的电脑就看不见openSDA虚拟出来的那段空间了。而且debug LED处于湮灭状态,说明板子已经准备好和pc通信了。
这一步必须做,否则后面会出现一些错误,我后面讲到debug的时候会讲。
最后就是
安装keil了。因为我电脑里装了用于编译c51的keil4,所以我不敢升级到keil5怕搞坏了,后来才意识到这种考虑是多余的,因为安装MDK的时候会自动把编译器给升级了。不过4.72版确实好用,我再也不想用4.12了。
下载链接见群主大大的网盘:
htt删p://pa掉n.b中aidu.c文om/s/1eQCeToQ#path=%252FKeil。
破解自行百度或者去群里下,群共享的第一个文件就是。
破解有一个很明显的好处,每次调试的时候不会跳出提示框,告诉你是测试版,只能运行小于32k的代码。
安装完了keil后,就可以
建立第一个程序了。我们可以按照群主大大的这个帖子来操作:
https://bbs.elecfans.com/jishu_464502_1_1.html。
当然可以更简单一些,也不需要建立子文件夹,不需要改include路径了。也就是参@初代饭影 大大的这个帖子里的视频:
https://bbs.elecfans.com/jishu_465108_1_1.html,建立一个简单的工程并且编译(源码:
)。但是做完上面几步,这个简单的工程还是无法被编译,错误提示(不要在意工程名……):
要理解这个问题可以参见这篇文章:h删ttp://blog.s掉ina.c中om.c文n/s/blog_4d1854230101a0q0.html
我粘贴过来:
Undefined symbol SystemInit,翻译过来就是SystemInit 这个符号没有定义,随后的小括号告诉你了,是在 startup_
STM32f0xx.o 这个文件里面被提及的。在STM32库函数中,void SystemInit(void)主要用于初始化系统时钟。在system_stm32f10x.c这个文件中。
要解决这个错误,有三种方法:
1)在外部(其他任何.c文件里面)定义SystemInit这个函数(哪怕是空的也行),比如在main函数前加上这段代码就行了
2)在工程目录下,用记事本打开startup_MKL25Z4.s找到
- IMPORT SystemInit
- LDR R0, =SystemInit
- BLX R0
复制代码
把这三句话注释掉。(不推荐)
3)在库中的例找到system_stm32f10x.c文件,然后添加进工程里
按@初代饭影 大大的视频教程创建了第一个工程,编译成功后,这时候该往板上
下载程序了。
需要进行的设置是,点击target option
(或者按Alt+F7),选择debug,
选择右侧的use ULINK PRO Cortex Debugger
,并且在下拉菜单中选择CMSIS-DAP Debugger
单击settings,应该显示为
如果右边的设备框内没有设备,那就要检查连线是否正确,和上面提到的配置openSDA是否正确。
如果还不看不到设备,重启试试。
开个玩笑,把keil重启一下应该就好了。
选择两次OK,点击target option左边的load
,这样程序就被正确地下载到板子上了。
debug LED(绿灯)亮了一会儿,板上的三色LED会开始周期性地闪着红光了。
如果之前没有配置openSDA口或者debug设置错误,直接下载的话会出现错误:
如果这个简单的小程序没法满足你,可以去keil的安装目录KeilARMBoardsFreescaleFRDM-KL25ZBlinky文件夹找一个例子来试试。
双击Blinky.uvproj,点击Built,在target左边的下拉菜单里选择CMSIS-DAP-MTB Flash
。然后Load,完成,LED开始以三种颜色闪烁了。
恭喜你,你已拿到了first blood(大误)。