MDK中自定义基于CMSIS的驱动代码

前言

例程下载:

链接:https://pan.baidu.com/s/1DBqtGV0fVbVhKru_ZXNqZA 
提取码:gjie

什么是CMSIS-Driver?

CMSIS驱动程序规范是一个软件API,它描述中间件和用户应用程序的外围驱动程序接口。CMSIS-Driver属于底层硬件与上层中间件之间的代码层,它隔离了底层的不同硬件确保了对上层中间件统一的接口大大提高了软件的可移植性

为什么需要CMSIS-Driver?

CMSIS驱动程序API设计为通用的,独立于特定的RTOS,使其可在各种受支持的微控制器设备上重用。简而言之就是提高程序的利用率和可移植性。

怎么使用CMSIS-Driver?

1. 通过MDK中的Manage Run-Time Environment工具可以非常方便的以窗口向导的形式来添加各种代码组件其中就包括CMSIS-Driver

2. 直接从对应的芯片pack的安装目录(如:\ARM\PACK\Keil\STM32F4xx_DFP\2.10.0\CMSIS\Driver)中将对应源文件与头文件复制到自己的工程中

3. 使用自定义的基于CMSIS标准的CMSIS-Driver文件

如何编写自定义的CMSIS-Driver?

注:这里以USART驱动为例

创建工程

1. 打开MDK,点击Project >> Create New Project,选择芯片型号。然后使用“Manage Run-Time Environment”添加自定义的代码框架(其实就是实现ARM_DRIVER_XXX结构体中的函数指针,其中XXX指一些接口名称如:SPI、USART等)。

2. 查看CMSIS-Driver帮助文档了解每个接口函数的作用,然后再去根据自己芯片来实现具体代码。https://www.keil.com/pack/doc/CMSIS/Driver/html/index.html

实现ARM_DRIVER_USART

1. 实现ARM_USART_Initialize函数

编写基于STM32F429ZITx芯片的USART1的引脚与时钟等初始化代码,根据需要完成相应功能。我这里使用的DMA、中断以及阻塞式的三种方式的传输方式

2. 实现ARM_USART_Uninitialize函数

取消初始化,释放USART1资源

3. 实现ARM_USART_PowerControl函数

编写USAR1使用到的时钟使能与禁用

4. 实现ARM_USART_Control函数

编写USART1波特率等串口功能初始化代码

5. 实现ARM_USART_Send函数

根据使用传输方式(DMA、中断、阻塞三种)来编写相应的串口发送代码

6. 实现ARM_USART_Receive函数

根据使用传输方式(DMA、中断、阻塞三种)来编写相应的串口接收代码

建议:可以直接将STM32F4 pack下的示例代码复制到相应的接口函数中,这样可以大大加快开发速度。不需要自己一个一个的”造轮子“

说明:USART与UART有区别,USART指的是“串口同步/异步发送与接收” 而UART指的是”串口异步发送与接收“。STM32F4系列芯片串口资源非常丰富(好像是有8个串口),有一些串口功能只是UART而有些是USART这个要注意下。USART功能比UART强大且完全兼容UART。

代码功能测试

在main函数中依次调用Initialize、PowerControl、Control、Send来查看驱动是否可以工作。以下为arm官方给的驱动与中间件的调用时序。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值