1.IIC配置
进入到对应的工程目录BSP路径下,执行menuconfig进入到配置界面,按照下面方式选中I2C总线设备模块。
保存配置,并执行scons --target=mdk5进行编译生成MDK5工程
生成完毕之后,重新打开工程可以看到SPI的驱动代码已经更新。
2.添加参考的LCD示例代码
将示例中LCD的代码拷贝到工程目录下并添加至MDK工程中
添加完驱动并编译会出现下面错误
.\build\keil\Obj\rt-thread.axf: Error: L6218E: Undefined symbol rt_hw_spi_device_attach (referred from drv_lcd.o).
错误显示没有找到rt_hw_spi_device_attach这个函数,然后全局搜索该函数在在drv_spi.h中是有定义,如下路径
E:\WorkSpace\rt-thread\bsp\stm32\libraries\HAL_Drivers\drv_spi.h(24) : rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef* cs_gpiox, uint16_t cs_gpio_pin);
E:\WorkSpace\rt-thread\bsp\stm32\libraries\HAL_Drivers\drv_spi.c(513) : rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef *cs_gpiox, uint16_t cs_gpio_pin);
则说明rt_hw_spi_device_attach有定义,但是没有被参与编译。查看代码drv_spi.c中可以找到对应的宏开关,然后全局搜索,发现没有打开SPI3的宏开关
#if defined(BSP_USING_SPI1) || defined(BSP_USING_SPI2) || defined(BSP_USING_SPI3) || defined(BSP_USING_SPI4) || defined(BSP_USING_SPI5) || defined(BSP_USING_SPI6)
#include "drv_spi.h"
#include "drv_config.h"
#include <string.h>
//#define DRV_DEBUG
#define LOG_TAG "drv.spi"
#include <drv_log.h>
在工程目录下的rtconfig.h中加入该宏定义,打开对应的SPI代码。
#define BSP_USING_SPI3
然后重新编译,编译通过。
3.使用list_device检测设备
使用串口终端遍历SPI外设,则会遍历到总线SPI3,设备是SPI30设备节点
4.RT-Thread的SPI相关API
此部分内容可以参考RT-THREAD文档中心:《AN0003-RT-Thread-I2C 设备应用笔记》