使用CMSIS_Driver编写程序
发表日期 : 2019/03/24  170 收藏
Angel_YY
向TA提问
2700
总阅读量
12
作品
在单片机领域,基于Arm Cortex M内核的产品已经占据很大的一部分份额,比较知名的ST的STM32系列,NXP的LPC系列都是其中非常棒的产品。各个厂家为了用户能更好的使用这些单片机产品,都推出了各自的软件工具和SDK,以便帮助用户简单快速的开发软件。Arm公司为了防止Arm软件开发的碎片化,提出并实施了CMSIS,这个是Arm公司与多家不同的芯片和软件供应商一起紧密合作定义的,提供了内核与外设、实时操作系统和中间设备之间的通用接口。
0001.png
CMSIS的整体架构如上图所示,在处理器硬件的上层是CMSIS-CORE,再上面是各种CMSIS功能包,包括了实时操作系统接口,神经网络和机器学习,数字信号处理,驱动中间件,物理外设驱动等等。在上面就可以实现用户自己的程序编码了。
那么今天我们一起来了解一下其中的CMSIS-Driver,这部分主要用于中间件和应用程序代码的通用外设接口,将微控制器外围设备与中间件或通用应用程序代码做了一个统一的接口,这是很有挑战性的,因为每个设备都不同。目前,许多微控制器系列都提供了即用型CMSIS-Driver接口,避免了繁琐且耗时的驱动程序移植。
接下来,我们就以NXP的LPC1768开发板为例,了解一下如何使用CMSIS Driver进行开发。
0002.png
首先子啊Keil中创建一个新的项目,在Project菜单中点击New uVision Project。
0003.png
为项目命名并保存项目到相应的文件夹中。
0004.png
接下里选择目标器件,需要根据开发板上的MCU型号选择,这里选择LPC1768。
0005.png
在接下来的运行时环境管理器中选择CMSIS下的CORE,Device下的所有选项,CMSIS Driver下的USART中的USART。点击OK生成工程。
0006.png
生成工程后在Device下找到RTE_Device.h并双击打开文件,在文本文件下方点击Configuration Wizard,可以对运行时环境进行图形化配置。在这里选中UART0,勾选接收和发送引脚为实际引脚序号,此时运行时环境配置完成。
0007.png
接下来创建主文件,在Source Group上右击,菜单中选择Add New Item to Group 'Source Group1'。
0008.png
在添加项目到组界面中选择C File,在Name栏中输入要创建的.c文件的名称,点击Add,完成文件创建。
0009.png
在新创建的MyUART.c中添加代码,首先引入LPC17xx.h头文件,这个是处理器资源定义头文件,比如引入;接下来引入Driver_USART.h,这个就是CMSIS Driver的统一驱动层头文件了。在代码部分,定义了串口0的事件回调函数,接收或者发送等事件产生时会调用这个函数,在函数中可以进行相应处理。接下来使用ARM_DRIVER_USART这个结构体定义了一个变量USART0,这个就有点C++封装的和类的意思了,相当于C++类声明了一个对象的实例。
定义接收和发送缓冲区,定义一个时间计数的全局变量。在系统的滴答时钟的中断中似的全局计时变量自增。延时函数首先把全局计时变量清零,根据传入的毫秒数等待滴答时钟自增到指定数值,实现准确的毫秒延时。
0010.png
在主函数部分,更新系统时钟,配置滴答时钟为1毫秒产生一次中断。调用之前声明的Driver_USART0变量(相当于对象)中的初始化和电源控制函数,设置串口实例的参数,接下来通过变量的Control函数设置串口通讯参数,这里需选择8位无校验,一位停止位,无流控,波特率为115200,允许接收和发送。设置接收缓冲区为rxBuffer。在while中循环发送字符串"Hello LPC1768",时间间隔为1000毫秒。

在串口回到函数中,检测接收事件,如果接收到数据,直接发送回去,实现一个串口的回环。

0011.png

接下里编译完成后下载到开发板,使用USB转串口线连接卡发板串口和PC上位机,打开串口助手,选择串口,波特率设置为115200,打开串口后就能接收到下位机发送过来的数据了。此时在串口助手发送数据,就可以在接收窗口接收到下位机返回来的相同数据了。

0012.png
总结:CMSIS Driver是Keil公司提供的针对各个MCU的偏上设备的驱动库,结构比较简洁,应用也很方便,个人感觉甚至比MCU原厂的SKD还要易用,而且这个驱动是针对不同MCU通用的。ARM公司也在逐渐完善这个驱动库,现在已经有很多型号的MCU被支持了。其中就包括了NXP的一些LPC系列,ST的STM32几乎全系列都被支持。CMSIS Driver真的是一个非常棒的SDK实现,在ARM架构里面,不同厂家的处理器的SDK用法完全相同,可以非常简单的实现各个外设的驱动,在Keil官方有各个片上外设的驱动帮助,可以参考帮助中的例程实现各个模块的应用。帮助文档地址:http://www.keil.com/pack/doc/CMSIS/Driver/html/index.html


原创作品,未经权利人授权禁止转载。详情见转载须知

单片机 CMSIS Driver
【你的赞赏是对原创作者最大的认可】
打赏
2人已打赏
Angel_YY
向TA提问
2700
总阅读量
12
作品
相关文章推荐
换一批
相关回答
换一批
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回