第六章 OLED模块+STM32的使用

        这一章教大家使用OLED显示模块,OLED模块在众多的物联网相关的毕设中出现率是比较高的,一般我们用OLED模块来显示系统的一些检测数据或者当前一些状态。

        下图是我经常使用的OLED显示模块,其使用也是非常简单,模块上有4根引脚,分别是连接3.3V或5V的VCC引脚,接地的GND引脚,连接IIC时钟线的SCL引脚,连接IIC数据线的SDA引脚。关注公众号发送“OLED”,获取资料下载链接,按照链接里的接线图,用杜邦线把STM32F103C8T6与OLED模块连接起来,再通过Jlink或STlink将提供的代码烧录进STM32中即可看到现象。

         接下来讲解STM32的代码。

        7行 delay_init( ) 初始化延时函数,执行这条语句后,延时效果才会准确。

        9行 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2) 是设置中断优先级分组。此份代码没有用到中断,所以将该行代码删除了也不影响效果。

        11行 OLED_Init( ) 初始化OLED模块函数,初始化完成后,我们就可以调用15~28行的屏幕显示函数来实现OLED显示汉字、字符、字符串和数值了。        

        13行 OLED_Clear( ) 屏幕清除函数,就是将屏幕的显示全部清除,以免影响接下来15~28行显示函数的显示效果。

        15~25行 OLED_ShowCHinese( ) 是显示汉字函数,该函数有三个参数,前面两个是汉字显示的起始X坐标、Y坐标,我们可以通过改变这两个参数来改变汉字显示的位置,起始坐标就是一个汉字显示区域的左上角的那个点,如下图所示,“欢”字起始X坐标是0,起始Y坐标是0,“欢”字起始X坐标是16,起始Y坐标是0。

        在这里注意一下,参数X轴的取值范围是0~127,Y轴的取值范围是0~7,而一个汉字在Y轴方向占2个单位(即0和1),在X轴方向占16个单位(即0~15),具体如下图所示,在X轴占了0~15,在Y轴占用了0和1,在X轴占了16~31,在Y轴占用了0和1......以此类推。

        接下来说第三个参数,第三个参数是要显示的汉字字模在存储数组里的位置号,存储数组的代码在下图中的位置。图中,从上往下,最前面的两个数组是位置0,接下来两个数组是位置1,再接下来两个数组是位置2....以此类推,我们就知道了每个汉字字模存储的位置号了,想要显示什么字,直接在OLED_ShowCHinese( )函数的第三个参数写上它所在的位置号就可以了。例如上图,想要起始坐标(32,0)的位置打印一个“大”字,我们就可以直接调用OLED_ShowCHinese(32,0,2);为什么最后一个参数要写2,因为“大”的字模存储在位置2。

         那万一存储数组里边没有我们想要的汉字字模怎么办呢?我们可以用一个软件生成我们想要的字模,然后把它添加进上图的Hzk数组里边就可以了。首先打开下图的取模软件(资料链接里面有)

         打开软件后,按照下面操作。

         打开设置后,按照下图进行设置,设置完后点击确定。

         设置完后,在下图中的输入框内输入汉字,然后点击生成字模即可。

         将生成的字模加添加到Hzk数组里就好了。顺便在注释里面对应好位置号,如下图所示。

        执行完这些操作,如果想要在屏幕上显示“牛”字,我们只要确定好显示坐标后,直接调用OLED_ShowCHinese( )函数并将坐标和“牛”的位置号11填写进去就可以了,参考下图。

         OLED_ShowString( )函数是显示英文字符串的函数,该函数有四个参数,前面两个参数也是显示的起始X坐标、Y坐标,第三个参数是我们要显示的英文字符串(记得加上英文双引号),第四个参数不用改动,参考下图。

        OLED_ShowNum( )显示数值的函数,该函数有五个参数,前面两个参数也是显示的起始X坐标、Y坐标,第三个参数是我们要显示的数值,参考例程中,第三个参数是常数 666 ,我们可以用变量来代替,这样,我们要在屏幕上显示什么数值,只要改变变量的数值就可以了,第四个参数是要显示的数值的最大位数,例如,DHT11温湿度模块能检测到的最高温度在99以内,所以第四个参数只要大于等于2就可以了,接下来第五个参数我们不用改动,参考下图。

         这一章还是建议大家买个模块,将资料链接里提供的例程下载到STM32中,然后尝试自己修改,资料链接里还有模块的购买链接和OLED与STM32的接线图。(关注公众号发送“OLED”,获取资料下载链接

        下一章给教大家在屏幕上动态显示DHT11获取到的温湿度数据。


<think>好的,我现在需要帮助用户解决如何将7脚OLED连接STM32的问题。首先,我需要回忆用户提供的引用内容,看看有没有相关的接线信息。用户提到了两个引用,引用[1]和引用[2],里面提到了7脚OLED的引脚定义和接线方式。 首先,确定7脚OLED的各个引脚名称。根据引用[1],7脚OLED的引脚包括GND、VCC、D0(时钟总线)、D1(数据总线)、RES(复位)、DC(数据/命令选择)和CS(片选)。引用[2]也提到类似的引脚配置。接下来,需要将这些引脚连接STM32的对应GPIO口。 用户可能需要知道每个引脚的功能以及如何连接STM32。例如,D0和D1是SPI的时钟和数据线,应该连接STM32的SPI_SCK和SPI_MOSI引脚。RES、DC、CS是控制信号,可以连接到任意GPIO口,但需要在代码中配置。同时,电源引脚VCC和GND需要连接到3.3V和地。 接下来,考虑是否需要上拉电阻或者电平转换,不过OLED通常是3.3V设备,所以直接连接应该没问题。然后,需要确认STM32的SPI接口是否支持主模式,因为OLED作为从设备。如果用户使用的是硬件SPI,需要找到对应的引脚;如果使用软件模拟SPI,则可以选择任意IO口。 可能还需要提供电路图示例,但用户可能无法显示图片,所以用文字描述连接方式。例如,VCC接3.3V,GND接地,D0接PA5(SCK),D1接PA7(MOSI),RES接PB0,DC接PB1,CS接PB10。这些具体的引脚需要根据STM32型号和用户可用引脚调整。 另外,代码初始化部分需要配置SPI和GPIO,设置RES、DC、CS为输出模式,并在初始化序列中拉高或拉低相应引脚。引用中的示例代码可能没有详细展示,但用户可能需要参考提供的链接或资料中的代码解析。 用户可能遇到的问题包括接线错误、SPI配置不正确、初始化顺序错误等,需要提醒检查连接和代码中的引脚定义是否一致。同时,建议用户查阅OLED的数据手册和STM32的参考手册以确保兼容性。 最后,生成相关问题,可能涉及代码示例、调试方法、替代接线方式等,帮助用户进一步解决问题。</think>### 7脚OLEDSTM32连接方法 #### 1. 引脚功能与对应关系 7脚OLED引脚定义如下(需结合数据手册确认): - **GND**:电源地 - **VCC**:3.3V电源 - **D0**(CLK):SPI时钟总线 - **D1**(MOSI):SPI数据总线 - **RES**:复位信号(低电平有效) - **DC**:数据/命令选择(高电平为数据,低电平为命令) - **CS**:片选信号(低电平有效) #### 2. STM32硬件连接步骤 1. **电源连接** - VCC → STM32的3.3V输出引脚 - GND → STM32的GND引脚 2. **SPI总线连接** - **D0(CLK)** → STM32的SPI_SCK引脚(如PA5,具体取决于SPI硬件配置) - **D1(MOSI)** → STM32的SPI_MOSI引脚(如PA7)[^1] 3. **控制信号连接** - **RES** → 任意GPIO(如PB0,需在代码中配置为输出模式) - **DC** → 任意GPIO(如PB1,配置为输出模式) - **CS** → 任意GPIO(如PB10,配置为输出模式)[^2] #### 3. 电路图描述 ``` OLED引脚 → STM32引脚 VCC → 3.3V GND → GND D0(CLK) → PA5 (SPI1_SCK) D1(MOSI) → PA7 (SPI1_MOSI) RES → PB0 DC → PB1 CS → PB10 ``` #### 4. 代码配置要点(以STM32 HAL库为例) ```c // 初始化SPI(硬件SPI模式) SPI_HandleTypeDef hspi1; hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; // 全双工模式 hspi1.Init.DataSize = SPI_DATASIZE_8BIT; HAL_SPI_Init(&hspi1); // 配置GPIO控制引脚 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10; // PB0, PB1, PB10 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // OLED初始化序列 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // RES拉低 HAL_Delay(10); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // RES拉高 ``` #### 5. 注意事项 - 若使用软件模拟SPI,D0和D1可接任意GPIO,但需自行实现时序逻辑 - 确保STM32的SPI时钟频率不超过OLED支持的最大频率(通常为10MHz) - CS引脚在传输数据时需保持低电平,结束后恢复高电平
评论 106
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式实验社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值