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;

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;

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 |
|---|---|---|
| 软件模拟SPI | 57.5K | 0.56M |
| HAL库SPI函数 | 113.4K | 16M |
| 寄存器操作SPI | 666.7K | 16M |
虽然在硬件SPI下,通讯波特率都达到了16M,每个字节发送过程只需要0.5us时间,但使用HAL库函数时,字节间的时间浪费特别严重。
为了使SPI通讯效率达到最高,最好选择操作寄存器方式。
版权声明:本文为realdd666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。