前言
例程下载:
链接: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官方给的驱动与中间件的调用时序。
|