内容扩展
调试方式串口调试:通过串口调试,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
显示屏调试:直接将显示屏连接到单片机,将调试信息打印到显示屏上
keil调试模式:借助Keil软件的调试模式,可使用单步运行,设置断点,查看寄存器及变量
OLED简介
有机发光二极管
OLED显示屏:性能优异的新型显示屏,具有功耗低,响应速度快,宽视角,轻薄柔韧等特点
常用通信协议:I2C/SPI
分辨率:128*64
硬件连接
STM32 与 OLED 屏幕的 I2C 接口连接方式如下:
VCC -> STM32 3.3VGND -> STM32 GNDSCL -> STM32 I2C1_SCL(或 I2C2_SCL)SDA -> STM32 I2C1_SDA(或 I2C2_SDA)
代码实现
- I2C 初始化
首先,配置 I2C 外设,确保 STM32 可以正确地与 OLED 屏幕通信。
#include "stm32f10x.h"void I2C_Configuration(void) { I2C_InitTypeDef I2C_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能 I2C1 和 GPIOB 时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 配置 I2C1 的 SCL 和 SDA 引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // SCL, SDA GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 开放集电极模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // I2C1 配置 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C1, &I2C_InitStructure); // 使能 I2C1 I2C_Cmd(I2C1, ENABLE);}
- OLED 初始化
接下来,我们需要初始化 OLED 显示屏,使其能够正确显示。
#include "ssd1306.h" // 假设我们已经有了 SSD1306 驱动库void OLED_Init(void) { ssd1306_Init(); // 初始化 SSD1306 OLED 屏幕 ssd1306_Clear(); // 清空显示屏 ssd1306_UpdateScreen(); // 刷新显示屏}
- 显示文本
使用 SSD1306 驱动库提供的函数,可以在 OLED 屏幕上显示文本。
void OLED_DisplayText(void) { ssd1306_SetCursor(0, 0); // 设置光标位置 ssd1306_WriteString("STM32 OLED", Font_7x10, White); // 写入字符串 ssd1306_SetCursor(0, 20); ssd1306_WriteString("Hello World!", Font_7x10, White); ssd1306_UpdateScreen(); // 更新屏幕内容}
主函数
整合以上代码,在main() 函数中进行初始化并显示内容。
int main(void) { // 初始化系统时钟、I2C、OLED SystemInit(); I2C_Configuration(); OLED_Init();
// 显示文本 OLED_DisplayText();
while(1) { // 程序主循环 }}