首页 > 其他 > 详细

STM32F103 使用硬件SPI单线TX发数据来驱动OLED

时间:2021-05-16 19:04:00      阅读:20      评论:0      收藏:0      [点我收藏+]

在驱动OLED时,通常使用CS/SI/SCK三线,时序满足SPI时序,但STM32的SPI有四线NSS/MOSI/SCK/MISO,这里MISO没有用到。因此可以使用SPI的单线发送模式进行驱动OLED。

关键代码如下:

 1    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;  //设置SPI单向
 2     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;            //设置SPI工作模式:设置为主SPI
 3     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;          //设置SPI的数据大小:SPI发送接收8位帧结构
 4     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;              //串行同步时钟的空闲状态为低电平
 5     SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;            //串行同步时钟的第1个跳变沿(上升或下降)数据被采样
 6     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理
 7     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;        //定义波特率预分频的值:波特率预分频值为8
 8     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
 9     SPI_Init(SPI2, &SPI_InitStructure);

但是,经试验发现单线模式下在发送数据时不能使用SPI_I2S_FLAG_TXE来判断发送完成,只能使用SPI_I2S_FLAG_BSY标志来判断设备是否空闲。

SPI2->DR = byte;
    while((SPI2->SR & SPI_I2S_FLAG_BSY) != RESET);  //等待SPI忙完,这里不能使用SPI_I2S_FLAG_TXE发送完成标志,只能使用SPI_I2S_FLAG_BSY标志 

这里是个坑,踩了一次希望后面不再有第二次。

STM32F103 使用硬件SPI单线TX发数据来驱动OLED

原文:https://www.cnblogs.com/weteck/p/14773720.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!