一、AT32WB415-CCU7-7及其开发板AT-START-WB415简介
盼望已久的雅特力ARM-Cortex-M4 的AT32WB415-CCU7-7的开发板收到了,立即开始投入到学习中。先配置MDK开发环境,熟悉AT-Link的调试的技巧,学习ICP烧录程序等用法。首先必须要明白的是单芯片的AT32WB415-CCU7-7的强大之处:
1. 为物联网而生,为 IOT /AIOT边缘智能物联网而生
图 1 AT32WB415-CCU7-7 的组成架构分为两个核心
从图中可以知道,WB415的两个核心,一个是基于ARM9的上海博通的BK3432蓝牙SOC核心(BLE),另一个时AT23F415的核心(MCU),进行适当的封装。两个核心内部通过串口进行通信。MCU 的 USART3 和 BLE的串口对接。BLE软件栈开放,可以自定义低功耗蓝牙的服务。MCU和BLE之间通过AT命令集来进行互操作,实现操作指令和数据传输。
开发时可以自定义低功耗蓝牙服务,并按照例程和说明实现BLE的扩展。
但是也可以利用透传模式,通过向MCU的USART3串口写入需要传输的数据,交由BLE实现数据透明传输。这种方式减少了复杂的BLE的软件的编制工作,只需要关注于MCU部分的软件编写就能实现,提高了开发的效率,降低了软件的复杂度。
值得注意的是,如果用MDK编译BLE例程,要安装ARM9的legacy支持包。
AT32WB415-CCU7-7的这种MCU和 BLE 的松耦合的硬件架构,使得熟悉MCU程序开发的情况下,只需要处理好串口的AT命令控制,就可以实现物联网所需要的低功耗蓝牙功能。把原本额外需要增加的蓝牙模块进行了集成,减少了元器件的耗费和PCB面积,具备很高的灵活行,也降低了控制部分逻辑和蓝牙通信部分逻辑的耦合。
2. 具备强大的运算能力,具备AIOT的实力
AT32WB415-CCU7-7的MCU部分,实际上是一个AT32F415核心。基于ARM 的Cortex-M4处理器IP。最大的特色是其支持DSP功能,具备硬件浮点运算能力。可以使用CMSIS的浮点运算数学库,DSP函数库,NN库,进行边缘人工智能的计算处理,低功耗,高算力的特点。
3. 软件的生态
固件支持包提供了样例支持,在examples 中提供了各个外设接口的例程,是学习基本的I2C、USART、GPIO和定时器等外设功能的良好的起点。目前也有一部分中间件代码,例如i2c_application的中间件,封装了i2c的常用操作。相当于stm软件生态库的HAL库。所以很多传感器的STM32的库,是可以很方便的移植到AT32WB415芯片的。
最丰富的传感器驱动库,实际上是Arduino传感器驱动库。github上有一个支持AT32F40x 和 AT32F42x的Arduino库中间件,很遗憾,对于AT32F41x的支持还不能兼容,期待后续可以用上这个强大的中间件的AT32F41x适配版本。其原因是底层的固件库的架构不一致。
二、LSM303DLHC-加速度和磁场模块介绍
LSM303DLHC加速度和磁场模块,可以实时的测量出当前模块的加速度和所在位置的磁感应强度。通过I2C接口接受控制和数据传输。加速度的测量原理是以MEMS微机电技术测得的重力加速度,(估计是通过测量弹力转换为加速度值)。磁场测量部分基于霍尔效应,当然其内部做了滤波和校正等工作,是核心技术。这种微机电传感器工作稳定,操作和应用简单。在Arduino平台的库的基础上,可以很简单的应用其读取加速度和磁场。如果使用AT32WB415进行控制,需要重新移植驱动库。在github.com上搜索可以得到lsm303dlhc的库包,主要是基于stm32生态。最后选择基于HAL库的驱动,方便使用AT32的固件包的i2c中间件进行移植。
图 2 测试用AT-START-WB415 开发板和lsm303dlhc(gy-511)模块连接。
模块的3.3V接开发板VDD, GND接开发板GND引脚。开发板I2C1 的SCL为 PB6 引脚, SDA 为 PB7引脚。由于模块上已经有了上拉电阻(实际是一个电平变换兼具上拉电阻功能),这里不需要额外配置上拉电阻。
图 3 模块的电平变换部分相当于上拉电阻
三、LSM303DLHC库函数移植过程
由于所下载的基于STM32的HAL库的驱动库文件,需要针对I2C的部分进行修改,主要是要设置好超时时间,以及i2c的一些状态标志位,判断i2c的工作的流程等代码,需要相应的做出修改。
1. 将库文件放入项目的目录文件夹,并以lsm305lib命名(应为lsm303lib)
图 4 将库文件放入项目的文件夹 lsm305lib
2. 在mdk里面新建 group lsm305lib,并添加文件“lsm303dlhc.c” .
图 5 mdk中新建group 项目 lsm305lib
3. 设置头文件的包含目录。
图 6 设置库文件的包含文件的目录。在 项目的option的C/C++标签的libraries栏目设置
4. I2C部分的移植需要注意的点。
在.h文件中,i2c的接口抽象为一个结构体变量,i2c_handle_type *i2c ,而库文件得到的参数是其结构体的指针,在应用时只需要先把结构体配置好,把这个结构体指针传给库文件就可以了。具体的代码细节请参考附件代码包。
固件包的中间件 middlewares 目录中的i2c_application.c/.h 可以和HAL风格的驱动很方便的对应,需要加以利用。必要时可以以相同作用的功能函数来代替。例如HAL中等待I2C的 READY_STATE, 固件库中没有,那么就可以用i2c_wait_end()的函数来替换,起到相似的效果。
另外因为使用的是i2c的中断模式,需要在at32wb415_int.c中添加中断处理函数。
图 7 i2c中断处理函数
因为默认的文件是不包含各个外设的具体处理函数的。
四、实验结果
接收到传感器的原始数据,并上传到电脑串口,进行输出。
图 8 在串口上接收到的获取的加速度数据
五、后续的工作
Lsm303dhlc库比较简单,离实用还有很大距离,参考Arduino库,继续编写矢量功能和磁场测量功能。并研究通过BLE传输到手机上面进行处理。
六、源码下载