【APM32F103VB 开发板】功能初试
1 通电
收到APM32F103VB mini评估板,包装完好,通过USB口供电后,LED2和LED3交替闪烁,说明厂家出厂时烧入的测试程序在跑,板子应该是正常的。为了防止在后续的测试中PCB板背面不小心短路,习惯性地在安装孔中配了4个铜柱。
2 连入Keil集成化开发环境并运行示范例程
这一步费了点儿小周折。我以前做过一些ST的M3、M0以及流明公司的LM3S等MCU小项目,用的都是IAR集成化环境,但这次厂家极海公司提供的示范例程是基于Keil集成化环境的,只好先来熟悉一下Keil环境,好在这些集成化环境的设计思路大同小异。为了让Keil环境可以根据芯片类型进行条件编译,并能够把目标码下载、烧录到芯片的flash中,需要安装针对APM32F系列芯片的资源包。按照厂家技术人员的指导,安装了“\packege"目录下的资源包“APEXMIC.APM32F1xx_DFP.1.0.1.pack”,安装完成后,在Keil环境中,“Flash”菜单下的“Configure Flash Tools”项弹出的对话框中的“Device”标签卡下,就可以选择到评估板所用的芯片“APM32F103VB”了。
我准备运行一下“SysTick”示范例程,这是几乎所有嵌入式系统芯片厂家都会提供的示范例程,其运行结果就是板子上的LED闪烁,我觉得它就是嵌入式系统的“Hello, World!"。
打开”SysTick“的工程文件,然后运行”Project“菜单项下的”Build Target“进行编译,结果是:好几百个错误!经与厂家技术人员沟通,并反复查看程序,终于发现了问题所在:厂家提供的示范例程原是针对高密度芯片的(可能是“APM32F103VE”),在“Configure Flash Tools”弹出的对话框中的“C/C++”编译设置中预定义了变量“APM32F10X_HD”(图中的“1.”),这将会在编译器控制字符串中添加一项(图中的“2.”),而在“Device”中选择了“APM32F103VB”后,因为该芯片是中密度芯片,将会在编译器控制字符串(“Compiler Control String”)中添加针对中密度芯片的一项(图中的“3.”)。由于同时预定义了针对中密度芯片和高密度芯片的变量(“APM32F10X_MD”和“APM32F10X_HD”),就会造成编译时两种芯片的条件编译条件都满足,其结果就是好几百处重复定义。
目前我知道的解决这一问题的方法有几种,一种是不管这块评估板上用的芯片是APM32F103VB,在“Devece”强制选择芯片类型为“APM32F103VE”,因为这是高密度的芯片,因此结果是可以顺利通过编译。(群友“妥妥人生路”用的似乎就是这种方法,运行了串口通信例程。)但这种方法有潜在的风险:毕竟板子上实际用的芯片是APM32F103VB,如果正好用到的资源与xxVE不一致,一定会出错。第二种方法是在“Device”中选择“APM32F103VB”芯片后,将预定义变量改为”APM32F10X_MD“(图中“1.”位置)。第三种方法我觉得更好:干脆将预定义变量(图中“1.”位置)删除,选择芯片后,Keil会自动在编译器控制字符串中填入相应预定义项的(我不知道这种方法是否有什么隐患)。
通过和厂家技术人员沟通知道还有两处要改:去掉“sdrc.c”模块;将汇编语言的启动文件改为针对中密度芯片的 "startup_apm32f10x_md.s"。
做了上述改动后编译顺利通过。
但是,但是,编译通过的目标码无法下载、烧录到芯片的Flash中,Keil报错,因此Keil无法进入Debug模式。
用我以前用过的ST32F103系列的板子做对比试验,没问题,说明我用的仿真器J-Link OB是好的。又是一番折腾,发现是需要在下图中点击“Settings”后弹出的对话框中添加编程算法(Programming Algorithm)。
添加前:
添加后:
然后目标码顺利下载、烧录,Keil进入Debug模式,装入的程序可以运行了。
但是,但是,但是,LED不闪!
折腾了半天找不到原因,最后终于下决心读一读示范例程的源程序。
发现问题:
从厂家提供的评估板的原理图中看到:LEDx是接到GPIO的E口的,而示范例程中定义的是F口(图中“1.”),改为E口后(图中“2.”),LED终于闪了。
3 体会
费了些周折,也学了一些东西。
厂家的准备工作有点儿仓促啊。