1. LiteOS裸机驱动移植系列
俗话说的好,光说不练假把式,上一个系列 LiteOS内核实战教程 中讲述了内核中任务如何管理、如何使用信号量同步多个任务的运行,如何用互斥锁保护共享资源,如何申请分配动态内存空间,但是在嵌入式系统中,如果不能将内核有效的应用在实际场景中控制外围设备,那么一切都是纸上谈兵。在这个系列中,本教程将会带领大家,手把手添加一些常用的外设驱动到LiteOS系统中,掌握外设驱动的移植方法。
2. 何为裸机驱动
驱动层代码,简单通俗的来说就是向上给用户提供一层可以控制设备的API,向下负责和设备打交道,直接操作硬件。
比如LED的驱动代码可以给用户提供一个初始化的 API 和打开/关闭的 API ,按键的驱动代码可以提供初始化的 API 和读取按键状态的 API,LCD的驱动代码可以提供初始化的 API 和屏幕上显示相关内容的API,传感器的驱动代码可以提供传感器初始化的API 和读取数据的 API,等等。
如果对基于HAL库的裸机驱动不熟悉,请先阅读嵌入式基础教程!
这里以使用 STM32CuebMX 生成的 LED 闪烁的裸机工程为例,其中 Src 目录下的gpio.c
文件就相当于 LED 的驱动层文件,其中提供了 LED 的初始化代码:
有了该文件,也就是驱动层代码,我们可以直接调用MX_GPIO_Init
来初始化LED。
那么,驱动层代码从哪里来呢?
如果是比较简单的外设,比如LED,按键这种,只使用了GPIO,可以直接使用STM32CubeMX生成的gpio.c
文件和gpio.h
文件;
如果是比较复杂的外设,比如LCD的底层是使用SPI驱动的,那么除了 STM32CubeMX 生成的spi.h
和spi.c
文件,还需要自己在此基础上手写LCD屏幕的驱动文件,具体的教程可以参考我的裸机教程系列:STM32CubeMX教程。
3. 如何移植驱动到LiteOS
复制裸机驱动文件
LiteOS 工程 target 目录结构如下: