不久前在网上看到灵动微电子和面包板社区联合推出的MM32 eMiniBoard MB-021开发板评测活动,之前个人在项目开发中先后用到ti公司的CC2541以及沁恒的CH579两款BLE SoC,前者是基于51内核,后者基于ARM Cortex-M0内核,个人对BLE协议应用开发有了一定的理解,还不够过瘾,看到灵动微的这颗BLE芯片,有眼前一亮的感觉,果断申请并得到了免费体验的机会。
最近收到开发板,主控为MM32W373PSB,一颗基于ARM Cortex-M3内核的集成低功耗蓝牙(BLE)外设的MCU。还是老规矩,拿到一颗新的MCU开发板,当然是先建立一个开发工程,敲几行代码,让芯片跑起来,效果便一目了然了。这里分享的一个简单的综合应用案例内容便是GPIO驱动LED按键的单击/双击/长按检测以及串口通讯。
首先在keil MDK开发环境下,套用了STM32的工程模板来创建一个MM32的工程。具体的操作步骤省略,这里只展示个人的工程管理方案,以供各位同僚批评指正,或者学习。创建完成的工程包含如图所示的几个group。bsp文件夹内容是在标准驱动库的基础上进一步对硬件进行抽象,app文件夹则为与硬件无关的应用程序,几乎不用修改就可以直接一直到其他的MCU中,system文件夹包含了系统时钟配置/内核定时器systick配置/调试串口配置/软件延时函数等arm系列MCU开发最常用的底层操作。
         通览MM32官方提供的标准外设库,编码风格与STM32标准库基本无差异,甚至内容都大同小异。按照惯例,要想让一款MCU跑起来,创建工程后的第一步便是配置系统时钟,在system_mm32w3xx.c文件里已经默认配置好了,个人也懒得找事干再去重新配置,在systeminit.c文件中将重置系统时钟函数预留,便于后期应用扩展。
         对于外设的配置,许多人都知道要打开外设时钟,需要注意的是外设时钟挂载在哪个系统总线上,不同厂家及不同ARM内核的MCU都是有差异的,需要仔细查阅芯片手册。个人最早拿到开发板时,也是忽视了这方面的问题,导致外设无法工作,都是教训,也是笑话,快被这种简单的问题折腾死了。
         延时函数,官方给的例程里的systick用法个人不喜欢,在正式的产品里简直浪费一个定时器,个人对于微秒级延时,直接用空指令,毫秒级延时,用systick中断产生一个时基,在应用层使用软件定时器组件,软件定时器强大的功能做个毫秒级的延时函数自然不是问题了。
         多功能按键检测组件直接调用了MULTI_button这种开源的代码,在多个微控制器平台上已经成功移植,移植起来也很容易,网上有相关教程,这里只展示应用效果。单击/双击/长按,将按键状态通过电脑串口助手软件显示到屏幕上。
         总结:初步探索了MM32系列MCU,上手很容易,与STM32开发风格基本一致,后期则直奔主题,体验一波W3系列的BLE功能。