STM32系列单片机SPI速度研究(flash读取写入速度提高,液晶显示屏刷新率提高)

前言

为了提高STM32单片机与外设在SPI总线上的速度,比如提高FLASH存储读取速度,或者外部液晶显示屏刷新率,特别对比了三种SPI方式的总线效率。

设备参数

项目名称
单片机STM32L151(32MHZ)
SPI外设IPS彩屏240*135
示波器是德科技DSOX2002A

测试内容

1.软件模拟SPI

1). 程序代码

void LCD_Writ_Bus(u8 dat) 
{	
	u8 i;
	LCD_CS_Clr();
	for(i=0;i<8;i++)
	{			  
		LCD_SCLK_Clr();
		if(dat&0x80)
		{
		   LCD_MOSI_Set();
		}
		else
		{
		   LCD_MOSI_Clr();
		}
		LCD_SCLK_Set();
		dat<<=1;
	}	
  LCD_CS_Set();	
}

2). 示波器波形采集

发送效率:17.4us/byte;
软件模拟SPI波形
在这里插入图片描述

2.HAL库SPI函数

1). 程序代码

void LCD_Writ_Bus(u8 dat) 
{	
	LCD_CS_Clr();
    HAL_SPI_Transmit(&hspi1, &dat, 1, 1); 
    LCD_CS_Set();	
}

2). 示波器波形采集

发送效率:8.82us/byte;
软件模拟SPI
在这里插入图片描述

3.寄存器操作SPI

1). 程序代码

void LCD_Writ_Bus(u8 dat) 
{	
	LCD_CS_Clr();
    SPI1->DR = dat;
    while((SPI1->SR&1<<1)==0);
    LCD_CS_Set();	
}

2). 示波器波形采集

发送效率:1.5us/byte;
在这里插入图片描述
在这里插入图片描述

总结

速率表格:

方式传输效率(字节/秒)比特率bps
软件模拟SPI57.5K0.56M
HAL库SPI函数113.4K16M
寄存器操作SPI666.7K16M

虽然在硬件SPI下,通讯波特率都达到了16M,每个字节发送过程只需要0.5us时间,但使用HAL库函数时,字节间的时间浪费特别严重。
为了使SPI通讯效率达到最高,最好选择操作寄存器方式。


版权声明:本文为realdd666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。