stm32cubemx点亮iicoled
时间: 2025-01-05 21:36:06 浏览: 8
### 使用 STM32CubeMX 和 IIC 协议驱动 OLED 显示屏
#### 配置 STM32CubeMX 工程
为了使用 STM32CubeMX 实现 IIC 协议来驱动 OLED 显示屏,首先需要创建一个新的工程并配置必要的外设。
在 STM32CubeMX 中启动新项目后,选择目标微控制器型号(如 STM32F407)。接着进入 "Pinout & Configuration" 页面:
- **启用 IIC 接口**:找到 IIC 外设选项,并将其状态更改为“Enabled”。这会自动分配 SCL 和 SDA 引脚到相应的 GPIO 端口上[^3]。
- **初始化时钟树**:确保系统时钟已经正确设置以便支持所选频率下的稳定运行。
完成上述操作后点击 “Configuration” 下拉菜单中的 “Middleware”,这里可以选择 HAL 库作为底层接口函数库。这样做的好处是可以简化编程工作量并且提高代码移植性。
#### 编写驱动程序代码
接下来,在生成的模板文件基础上添加具体的显示控制逻辑。对于清屏功能而言,可以通过调用 `OLED_Clear` 函数来实现整个屏幕内容清除的效果:
```c
void OLED_Clear(void) {
uint8_t i, n;
for (i = 0; i < 8; i++) {
OLED_WR_CMD(0xB0 + i); // 设置页地址(0~7)
OLED_WR_CMD(0x00); // 设置显示位置—列低地址
// OLED_WR_CMD(0x10); // 设置显示位置—列高地址
for (n = 0; n < 128; n++)
OLED_WR_DATA(0x0);
}
}
```
此段代码遍历所有的页面并将每一行的数据都填充为零值,从而达到擦除所有已绘制图形的目的[^1]。
另外还需要定义两个辅助宏用于发送命令和数据给 OLED 屏幕:
```c
#define OLED_WR_CMD(cmd) HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS << 1, &(cmd), 1, HAL_MAX_DELAY)
#define OLED_WR_DATA(data) {uint8_t dat[] = {0x40, data}; \
HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS << 1, dat, sizeof(dat), HAL_MAX_DELAY);}
```
这些宏利用了 HAL 提供的标准 API 来执行实际的数据传输过程。其中 `OLED_ADDRESS` 是指设备的具体物理地址;而 `hi2c1` 则代表之前通过 CubeMX 初始化好的 IIC 句柄对象。
#### 测试与验证
最后一步就是编译链接应用程序并下载至开发板测试效果。如果一切正常的话应该可以看到连接着该单片机系统的 OLED 屏幕被成功刷新为空白界面。
阅读全文