本帖最后由 6552918 于 2022-9-16 09:16 编辑
#申请原创# #技术资源# @ArterySW @muyichuan2012
在使用蓝牙SDK例程中MCU部分添加SPI驱动显示屏时发现些需要注意的地方,线和大家分享一下。
首先我们看一下AT32WB415这款芯片SPI的情况,从框图上看,只有1路SPI,外设名称为SPI2
看了下引脚重映射,以为是全功能的,所有引脚的定义都给出了。
但在看管脚定义时发现并不是这样,由于封装限制,只引出了部分管脚,而且不支持I2S,所以这个SPI只能算是个阉割版的。所以在使用SPI时一定要注意一下这个问题
我这使用的LCD屏幕是Nokia5110的屏幕,SPI驱动最高到4M,驱动程序我原来在其他硬件上测试过,只要跟进芯片实际情况,修改配置即可。
接下来我来说一下我移植过程和发现的问题,移植是建立在我之前移植好的RT-Threadnano基础上的
首先使用RT-Thread上的自动初始化功能初始化一个线程和对涉及的GPIO和SPI进行配置
在对涉及的GPIO和SPI进行配置时,驱动程序支持软件模拟SPI和硬件SPI两种方式,选择方式通过nokia_5110.h内的宏定义选择
软件模拟方式涉及IO定义如下
硬件模式驱动涉及的IO配置如下
硬件模式时对SPI进行初始化如下。
这里有2个地方需要注意一下
1个是时钟分频系数,由于我使用的工程,主频是144M,SPI2是挂接在APB1总线上的,所以APB1频率为72M,而LCD的时钟最高是4M,想要让SPI频率最接近4M,只能采用32分频才行。
2由于这款芯片SPI的CS脚没有引出,只能使用其他引脚模拟,所以CS的配置要设为软件模式。
在此引出一个管脚映射问题,在用户手册内SPI2 的 IO 全局复用说明那,有2个配置值,但实际第二个模式是没有意义的,因为第二个配置值映射的管脚都没有被引出
在线程内进行LCD初始化和内容显示
配置完成后,我先使用SPI软件模拟的方式测试了下,显示正常
但在改为硬件SPI模式后,竟然没显示,我排查了很久,都没发现问题,确认不是硬件问题后我开始排查软件问题,因为驱动文件在很多板上都测试过,肯定是没问题,于是我对比了一下BSP和这个蓝牙SDK的文件,我发现蓝牙SDK所用的库文件版本是2.0.0的,而BSP的库文件是2.0.2的,于是,我把SDK里的库文件用2.0.2的都替换掉,重新编译下载,然后就正常显示了。
这说明原来2.0.0的库文件SPI是有问题的,所用大家在使用时一定要注意这个问题!!!我在这个问题上排查了好长时间!!!
要用最新的库!!!要用最新的库!!!要用最新的库!!!
附件为驱动源码
源码.zip
(13.03 KB)
|