这次在上次的基础上,把模拟SPI改成用STM8的硬件SPI。
在上回的工程代码上稍作修改即可。
先创建一个空工程。
得到一个这样的工程
把上次工程的代码文件都拷至改工程下,右击工程名,添加文件
,然后记得吧工程的一些必要配置都配置完,就可以准备改代码了。
写程序第一步:查看引脚位置,在数据手册中即可找到。
可以看到,SPI用到的引脚是PC5~7和PE5
STM8S的SPI引脚功能复用是不需要配置的,所以这里也省去了一个步骤。
第二步:查看STM8的SPI特性介绍
查看是否可以满足我们的使用要求,我这里只需要单片机给显示屏发送数据即可,速率没有硬性要求,越快越好。
第三步:查看资源配置介绍(略)
第四步:查看寄存器配置
帧格式 : 改显示屏用的是高位先发送,所以Bit7=0;
SPI使能: 这步在所有配置结束后再完成;
波特率控制:这里越快越好,所以Bit3~5=000;
主设备选择:是主机模式 所以Bit2=1;
时钟极性: 这里选择高电平状态。
时钟相位: 主模式不予考虑
最后得到: SPI->CR1=0x06;
再看CR2
因为这里对TFT只有发送数据,所以这里将Bit6~7置1,单线双向模式,只发送,即可
CRC校验不使用,故其余位都置0即可;
SPI->CR2=0xc0;
再看SR
因为只用到了发送,所以只需关心Bit1就行,为1时发送区为空,可以写入
数据寄存器DR
由SR与DR寄存器,很容易就可以写出写数据函数
static void Wdata(u8 data) //写入数据
{
SCE_0;
DC_1;
SPI->DR=data;
while(!(SPI->SR&0x2));
}
static void Wcom(u8 data) //写入指令
{
SCE_0;
DC_0;
SPI->DR=data;
while(!(SPI->SR&0x2));
}
SPI配置函数为
static void SPI_init(void)
{
SPI->CR1=0x06;
SPI->CR2=0xc0;
SPI->CR1|=0x40;
}
仅三句话,十分简易
最后通过刷屏测试,很明显可以看出硬件SPI比模拟的快很多,而且硬件还有一个好处是,字节发送过程不会被打断,数据传输的准确性更高。
谢谢阅读~
代码:
1.44Inc彩屏硬件SPI.zip
(613.08 KB)
|