本帖最后由 eltonchang2001 于 2022-11-9 11:35 编辑
#申请原创# #技术资源#
在测试HT32F52352 Starter Kit的SPI时,发现合泰的SPI的片选管脚SEL还是很有特色的,所以和大家分享一下。 我使用SPI驱动一款LCD,LCD接口定义如下:
我使用HT32F52352的SPI0进行驱动LCD, 管脚定义如下: PB0->RST; PB1->DC; PB2->CE; PB3->SCK; PB4->MOSI;
LCD的通信时序如下:
此时序与SPI的如下时序一致
在驱动LCD过程中,HT32F52352中的SPI的SEL管脚使用和我之前用的其他单片机有些不同,在使用其他芯片时,在主机模式下的片选管脚一般都是使用GPIO来控制的,在通信前需要程序控制片选管脚的有效和失效,这让程序实现与从机的通信需要关注片选的控制问题,即便也定义了片选管脚的硬件控制模式,但根本不符合多数场景的需求。而HT32F52352 SPI的SEL真正实现的硬件控制,无需软件控制(也保留了软件控制),真正方便了开发者的使用。 芯片用户手册上对主机模式下SEL管脚的说明如下:
因为我是驱动LCD所以SPI要设置为主机模式(MODE=1),从机选择输出使用(SELOEN=1),跟具片选要求需要SEL信号低有效(SELAP=0)。 在SEL控制上分为两种模式
| | | SELM=0(SEL 信号由软件控制 – 由 SSELC 位控制有效或无效) | | | SELM=1(SEL 信号由硬件控制 – 由 SPI 硬件自动产生) | | |
接下来看看在代码中是如何实现的 首先,看一下PB0->RST;PB1->DC;的配置
在代码中PB0->RST;PB1->DC的控制由宏实现
再来看一下SPI先关的配置
在配置中,通过宏SPI_HW_CS_HW来选择SEL的模式。 在使能硬件模式时,宏LCD_CE_0和宏LCD_CE_1为空, 在使能软件模式时,宏LCD_CE_0和宏LCD_CE_1由软件控制。
具体代码可以看附件源码,希望对大家有帮助!!! 总之,这款芯片的SEL的硬件控制,实现了真正意义的硬件控制,使用起来真的很方便,很久以前用ST的芯片,为了测试所谓的硬件片选,折腾了很久最终发现并不是我想要的使用方法,而且,很对国产兼容ST的都保留的ST的用法,在实际使用中,多数没什么实际意义,都要用软控制IO来实现相关功能,而合泰的硬件片选真正实现了这个功能,真的非常棒!!!! 另外,合泰的库文件中,并没有实现精准延时的库文件,我修改了一份使用系统滴答定时器现实的精准延时函数文件,一并放在附件中了。
|