[APM32E0] APM32E030R Micro-EVB开发板评测+ IIC_OLED

[复制链接]
meiyaolei 发表于 2025-8-24 21:29 | 显示全部楼层 |阅读模式


一、硬件与原理
1. OLED显示屏信息
类型​​:0.96寸或1.3寸OLED

​​接口​​:I2C(2线制)

​​驱动IC​​:SSD1306
工作电压:3.3V-5V
分辨率:128*32
驱动芯片:SSD1306
通信接口:IC
5934468ab11b099f53.png

二、原理图:
9775468ab110f9021f.png 5594968ab111f2d003.png
从原理图上可以与板子上结合看,找到P1端口的PA3,PF5,并把线连接好。特别要注意电源和地不要连接反了。



三、连接示意图

3346368ab126960093.png
OLED引脚
功能
APM32E030R引脚
宏定义

SCL
时钟线
PA3
OLED_SCL

SDA
数据线
PF5
OLED_SDA

VCC
电源
3.3V
-

GND
GND
-


四、代码
  1. <font color="#0d0d0d" face="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji"><span style="font-size: 14px; white-space: pre;">// OLED引脚定义
  2. // 定义OLED的SCL(时钟)引脚操作宏,使用GPIOA的PIN3
  3. #define OLED_SCL_Clr() GPIO_ClearBit(GPIOA, GPIO_PIN_3)  // 将SCL引脚拉低
  4. #define OLED_SCL_Set() GPIO_SetBit(GPIOA, GPIO_PIN_3)    // 将SCL引脚拉高

  5. // 定义OLED的SDA(数据)引脚操作宏,使用GPIOF的PIN5
  6. #define OLED_SDA_Clr() GPIO_ClearBit(GPIOF, GPIO_PIN_5)  // 将SDA引脚拉低
  7. #define OLED_SDA_Set() GPIO_SetBit(GPIOF, GPIO_PIN_5)    // 将SDA引脚拉高

  8. // 主函数
  9. int main(void)
  10. {
  11.     GPIO_Config_T gpioConfig;  // 定义GPIO配置结构体
  12.    
  13.     // 使能AHB总线时钟,为LED2和LED3所在的GPIO端口提供时钟
  14.     RCM_EnableAHBPeriphClock(LED2_GPIO_CLK | LED3_GPIO_CLK);
  15.    
  16.     /* 配置LED2的GPIO参数 */
  17.     gpioConfig.pin = LED2_PIN;          // 设置引脚号
  18.     gpioConfig.mode = GPIO_MODE_OUT;    // 设置为输出模式
  19.     gpioConfig.outtype = GPIO_OUT_TYPE_PP; // 推挽输出
  20.     gpioConfig.speed = GPIO_SPEED_50MHz; // 输出速度50MHz
  21.     gpioConfig.pupd = GPIO_PUPD_NO;     // 无上下拉
  22.     GPIO_Config(LED2_GPIO_PORT, &gpioConfig); // 应用配置到具体GPIO端口
  23.    
  24.     // 初始化OLED显示屏
  25.     OLED_Init();
  26.    
  27.     // 设置OLED显示模式
  28.     OLED_ColorTurn(0);  // 0: 正常显示,1: 反色显示
  29.     OLED_DisplayTurn(0); // 0: 正常显示,1: 屏幕翻转显示
  30.    
  31.     // 在OLED上显示字符串
  32.     // 参数说明:(x坐标, y坐标, 字符串指针, 字体大小, 显示模式)
  33.     OLED_ShowString(0, 0, "Hello 21IC", 16, 1);  // 在(0,0)位置显示"Hello 21IC",16号字体
  34.     OLED_ShowString(0, 20, "APM32F030 OLED", 16, 1); // 在(0,20)位置显示"APM32F030 OLED"
  35.    
  36.     while(1)
  37.     {
  38.         // 主循环
  39.     }
  40. }

  41. // OLED显示字符串函数
  42. // 参数说明:
  43. // x: 起始X坐标
  44. // y: 起始Y坐标
  45. // chr: 要显示的字符串指针
  46. // size1: 字体大小(8或16)
  47. // mode: 显示模式(通常控制是否反色)
  48. void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 size1, u8 mode)
  49. {
  50.     // 遍历字符串中的每个字符,直到遇到非可显示字符(ASCII码不在' '到'~'之间)
  51.     while((*chr >= ' ') && (*chr <= '~'))
  52.     {
  53.         // 显示当前字符
  54.         OLED_ShowChar(x, y, *chr, size1, mode);
  55.         
  56.         // 根据字体大小更新X坐标(光标位置)
  57.         if(size1 == 8)
  58.             x += 6;  // 8号字体,每个字符占6像素宽度
  59.         else
  60.             x += size1 / 2; // 16号字体,每个字符占8像素宽度(16/2)
  61.         
  62.         chr++; // 移动到下一个字符
  63.     }
  64. }</span></font>
解释
引脚定义:
OLED使用I2C或SPI接口(从代码看是类似I2C的软件模拟,因为使用了SCL和SDA)
SCL(时钟)连接在PA3,SDA(数据)连接在PF5
OLED初始化:
OLED_Init() 函数(未显示)应该包含了OLED的初始化序列,如设置显示模式、清屏等
显示功能:
OLED_ShowChar() 是实际显示单个字符的函数(未显示)
字符串显示通过循环调用字符显示实现,并自动处理光标移动
字体大小:
代码支持8像素和16像素高的字体
对于8号字体,字符宽度固定为6像素
对于16号字体,字符宽度为字体高度的一半(8像素)
显示模式:
mode参数可能控制是否反色显示(由OLED_ShowChar()实现)


五、显示效果
9934068ab10774cc5a.png
寂静小夜曲 发表于 2025-8-25 14:29 | 显示全部楼层
怎么感觉这个I2C的实验,你们都是使用这两个GPIO引脚啊
cooldog123pp 发表于 2025-8-25 18:05 | 显示全部楼层
极海的什么活动,错过了,没有参与啊,这开发板看上去不错!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:工程师
简介:超越自我,为设计激发灵感和想象。

258

主题

829

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部