SPI(硬件)---OLED&SSD1306的使用
先说结论:proteus貌似不是很支持硬件I2C和硬件SPI。。两次试验都没成功
但基本的原理还是记录一下
工具
软件:Keil、CUBEMX、Proteus
硬件:单片机---STM32F103C6T6A、OLED+SSD1306---UG-2864HSWEG01
原理图
查询SSD1306芯片知4线SPI的D7~D3接低电平,D2悬空,D1为数据输入,D0为系统时钟;E,R/W接低电平,CS接片选引脚,D/C接命令/数据选择引脚,RES接复位,如图
SPI通讯协议
SPI有四根线,分别为MISO,MOSI,SCK,NSS,当需要对芯片进行命令/数据选择时(如本文中使用的SSD1306),需要多使用一根输出用GPIO引脚进行DC选择
SPI通讯过程如下,NSS拉底电平为开始信号,数据的有效性与时钟对应关系由CPOL和CPHA的选择分为4种情况,CPOL表示空闲时电平的高低,CPHA表示触发边沿是在第一个边沿还是第二个边沿
本次实验由于多了一个DC引脚,所以实际上的通讯顺序应该是:DC引脚电平变化→NSS拉低电平→传输数据→NSS拉高电平→DC引脚电平变化(这一步可有可没有)
主要代码
初始化完成后,SPI通讯的主要语句就是
HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
后续
本次使用proteus仿真失败,等后续使用实物板子进行实验
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通