OlEd UG-2864HSWEG01与STM32连接

时间: 2023-09-30 17:11:44 浏览: 62
OLED UG-2864HSWEG01是一种128x64的OLED显示屏,可以通过SPI接口与STM32微控制器连接。 以下是连接步骤: 1. 将OLED显示屏的VCC引脚连接到STM32的3.3V电源引脚,将GND引脚连接到STM32的GND引脚。 2. 将OLED显示屏的SCK引脚连接到STM32的SPI时钟引脚(通常是PA5)。 3. 将OLED显示屏的SDA引脚连接到STM32的SPI MOSI引脚(通常是PA7)。 4. 将OLED显示屏的CS引脚连接到STM32的任意GPIO引脚(例如PC0)。 5. 在STM32中启用SPI接口和GPIO引脚。 6. 使用SPI协议发送数据到OLED显示屏,以控制其显示。 以下是示例代码: ```c #include "stm32f10x.h" void OLED_init(void); void OLED_write_cmd(unsigned char cmd); void OLED_write_data(unsigned char data); int main(void) { // 启用SPI和GPIO接口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); // 配置SPI MOSI引脚为推挽输出 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置SPI时钟引脚为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置CS引脚为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); // 配置SPI接口 SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &SPI_InitStructure); // 启用SPI接口 SPI_Cmd(SPI1, ENABLE); // 初始化OLED显示屏 OLED_init(); // 发送数据到OLED显示屏 OLED_write_cmd(0xAF); // 开启OLED显示屏 OLED_write_data(0xFF); // 在第1行第1列显示一个白色点 while (1) { } } void OLED_init(void) { GPIO_SetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置高 GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 将SPI时钟引脚置低 GPIO_SetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置高 GPIO_SetBits(GPIOA, GPIO_Pin_5); // 将SPI时钟引脚置高 GPIO_ResetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置低 OLED_write_cmd(0xAE); // 关闭OLED显示屏 OLED_write_cmd(0xD5); // 设置时钟分频因子 OLED_write_cmd(0x80); // 时钟分频因子为1 OLED_write_cmd(0xA8); // 设置驱动路数 OLED_write_cmd(0x3F); // 驱动路数为1/64 OLED_write_cmd(0xD3); // 设置显示偏移 OLED_write_cmd(0x00); // 显示偏移为0 OLED_write_cmd(0x40); // 设置显示开始行 OLED_write_cmd(0x8D); // 设置电荷泵 OLED_write_cmd(0x14); // 电荷泵开 OLED_write_cmd(0x20); // 设置内存地址模式 OLED_write_cmd(0x00); // 内存地址模式为水平地址模式 OLED_write_cmd(0xA1); // 设置列地址映射 OLED_write_cmd(0xC8); // 设置行地址映射 OLED_write_cmd(0xDA); // 设置COM硬件引脚配置 OLED_write_cmd(0x12); // COM硬件引脚配置为分割模式 OLED_write_cmd(0x81); // 设置对比度控制 OLED_write_cmd(0xCF); // 对比度为207 OLED_write_cmd(0xD9); // 设置预充电周期 OLED_write_cmd(0xF1); // 预充电周期为15个时钟周期 OLED_write_cmd(0xDB); // 设置VCOMH OLED_write_cmd(0x40); // VCOMH为0.77倍VCC OLED_write_cmd(0xA4); // 全部点亮 OLED_write_cmd(0xA6); // 设置显示方式为正常显示 OLED_write_cmd(0xAF); // 开启OLED显示屏 GPIO_SetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置高 } void OLED_write_cmd(unsigned char cmd) { GPIO_ResetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置低 SPI_I2S_SendData(SPI1, 0x00); // 发送命令标志位 SPI_I2S_SendData(SPI1, cmd); // 发送命令 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); // 等待传输完成 GPIO_SetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置高 } void OLED_write_data(unsigned char data) { GPIO_ResetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置低 SPI_I2S_SendData(SPI1, 0x40); // 发送数据标志位 SPI_I2S_SendData(SPI1, data); // 发送数据 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); // 等待传输完成 GPIO_SetBits(GPIOC, GPIO_Pin_0); // 将CS引脚置高 } ``` 以上代码使用了STM32的SPI接口和GPIO引脚,以控制OLED显示屏的初始化和显示。

相关推荐

最新推荐

recommend-type

STM32的使用之SPI通信DMA模式

MCU:STM32F303VC,在SPI通信中,可以同时开启发送和接收DMA请求,自动数据的发送和接收,完成数据的交换。
recommend-type

基于STM32的温度控制系统设计.pdf

设计以 STM32F103 作为系统控制核心,使用了 STM32F103 的部分外设模块,使用 DS18B20 测量温度,以电阻加热丝作为升温设备,使用 OLED 进行显示,利用 PID 位置试控制算法,输出 PWM 进行电热丝的加热,稳定在温度...
recommend-type

基于STM32的输液监控系统设计与实现

为实现静脉输液的智能化与网络化,研制了一套以STM32为核心的输液监控系统。该系统具有液滴检测、液滴速度显示与控制、余液显示、无线通信和声光报警等功能。系统采用红外对管检测莫菲氏滴管内的液滴滴落情况,用...
recommend-type

毕业设计基于STC12C5A、SIM800C、GPS的汽车防盗报警系统源码.zip

STC12C5A通过GPS模块获取当前定位信息,如果车辆发生异常震动或车主打来电话(主动请求定位),将通过GSM发送一条定位短信到车主手机,车主点击链接默认打开网页版定位,如果有安装高德地图APP将在APP中打开并展示汽车当前位置 GPS模块可以使用多家的GPS模块,需要注意的是,当前程序对应的是GPS北斗双模芯片,故只解析 GNRMC数据,如果你使用GPS芯片则应改为GPRMC数据即可。 系统在初始化的时候会持续短鸣,每初始化成功一部分后将长鸣一声,如果持续短鸣很久(超过20分钟),建议通过串口助手查看系统输出的调试信息,系统串口默认输出从初始化开始的所有运行状态信息。 不过更建议你使用SIM868模块,集成GPS.GSM.GPRS,使用更加方便
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依