[APM32E0] 【APM32E030R Micro-EVB开发板评测】+ OLED驱动

[复制链接]
 楼主| gaoyang9992006 发表于 2025-8-4 11:11 | 显示全部楼层 |阅读模式
最近太热了,没头绪,今天终于忍痛打开空调冷静了一下,开始玩开发板。
找到了一块SSD1306 驱动的0.96寸OLED,该OLED的引脚顺序为 GND VCC SCL SDA共计4根引脚,I2C通信协议。
接下来先采用最简单的GPIO来驱动。
查看开发板,寻找合适的引脚方便插入OLED显示模块,如下图所示
534646890236225e60.png
为了方便插入模块,选选择了其中的GND,PA1,PA3,PF5引脚分别对应GND、VCC、SCL、SDA。
使用PA1推挽输出高电平代替VCC。
有了思路,配置如下
  1.     GPIO_Config_T gpioConfig;

  2.     RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
  3.     /* SCL GPIO configuration */
  4.     gpioConfig.pin = GPIO_PIN_3;
  5.     gpioConfig.mode = GPIO_MODE_OUT;
  6.     gpioConfig.outtype = GPIO_OUT_TYPE_OD;
  7.     gpioConfig.speed = GPIO_SPEED_50MHz;
  8.     gpioConfig.pupd = GPIO_PUPD_NO;
  9.     GPIO_Config(GPIOA, &gpioConfig);
  10.        
  11.             RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOF);
  12.     /* SDA GPIO configuration */
  13.     gpioConfig.pin = GPIO_PIN_5;
  14.     GPIO_Config(GPIOF, &gpioConfig);
  15.        
  16.     /* OLED VCC GPIO configuration */       
  17.     gpioConfig.pin = GPIO_PIN_1;
  18.     gpioConfig.outtype = GPIO_OUT_TYPE_PP;
  19.     GPIO_Config(GPIOA, &gpioConfig);
  20.                 GPIO_SetBit(GPIOA, GPIO_PIN_1);
接下来就是移植程序了
188096890242179960.png
将oled.c文件添加进工程,将OLED库函数目录文件夹添加到头文件包含路径
8343368902454afac9.png
修改oled.h头文件中的引用头文件和宏定义映射函数
  1. #include "stdlib.h"       
  2. #include "apm32e030_gpio.h"
  3. #include "apm32e030_rcm.h"
  4. //-----------------OLED端口定义----------------

  5. #define OLED_SCL_Clr()   GPIO_ClearBit(GPIOA, GPIO_PIN_3)
  6. #define OLED_SCL_Set()     GPIO_SetBit(GPIOA, GPIO_PIN_3)

  7. #define OLED_SDA_Clr()   GPIO_ClearBit(GPIOF, GPIO_PIN_5)
  8. #define OLED_SDA_Set()     GPIO_SetBit(GPIOF, GPIO_PIN_5)

  9. #define OLED_CMD  0        //写命令
  10. #define OLED_DATA 1        //写数据

  11. #define u8  unsigned char
  12. #define u16 unsigned int       
  13. #define u32 unsigned long int  
在main.c中引用oled.h头文件
在之前写的Blink测试函数基础上增加oled测试函数
  1. int main(void)
  2. {
  3.     GPIO_Config_T gpioConfig;

  4.     RCM_EnableAHBPeriphClock(LED2_GPIO_CLK | LED3_GPIO_CLK);
  5.     /* LED2 GPIO configuration */
  6.     gpioConfig.pin = LED2_PIN;
  7.     gpioConfig.mode = GPIO_MODE_OUT;
  8.     gpioConfig.outtype = GPIO_OUT_TYPE_PP;
  9.     gpioConfig.speed = GPIO_SPEED_50MHz;
  10.     gpioConfig.pupd = GPIO_PUPD_NO;
  11.     GPIO_Config(LED2_GPIO_PORT, &gpioConfig);

  12.     /* LED3 GPIO configuration */
  13.     gpioConfig.pin = LED3_PIN;
  14.     GPIO_Config(LED3_GPIO_PORT, &gpioConfig);

  15.     /* Turn LED2 on */
  16.     GPIO_ClearBit(LED2_GPIO_PORT, LED2_PIN);
  17.     /* Turn LED3 off */
  18.     GPIO_SetBit(LED3_GPIO_PORT, LED3_PIN);
  19.        
  20.        
  21.                 OLED_Init();
  22.                 OLED_ColorTurn(0);//0正常显示,1 反色显示
  23.                 OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
  24.                 OLED_ShowPicture(0,0,128,64,BMP1,1);
  25.                 OLED_Refresh();
  26.     for (;;)
  27.     {
  28.                         /* LED Toggle*/
  29.                         APM_TINY_LEDToggle(LED2);
  30.                         Delay();
  31.                         APM_TINY_LEDToggle(LED3);
  32.                         Delay();
  33.     }
  34. }
编译烧录,".\Objects\001.axf" - 0 Error(s), 0 Warning(s).
非常奈斯,烧录后,按下复位按键,屏幕点亮。如开头的图片所示。


 楼主| gaoyang9992006 发表于 2025-8-4 11:13 | 显示全部楼层
最后奉上该项目的工程,供其他朋友参考
001.rar (83.76 KB, 下载次数: 3)
真的问题不大 发表于 2025-8-4 16:37 | 显示全部楼层
gaoyang9992006 发表于 2025-8-4 11:13
最后奉上该项目的工程,供其他朋友参考

感谢大佬分享
CloudKiss 发表于 2025-8-4 19:04 | 显示全部楼层
VCC引脚还能这么玩啊!
楼主也太强了吧!
 楼主| gaoyang9992006 发表于 2025-8-5 11:35 | 显示全部楼层
CloudKiss 发表于 2025-8-4 19:04
VCC引脚还能这么玩啊!
楼主也太强了吧!

其实GND也可以用IO模拟出来。
 楼主| gaoyang9992006 发表于 2025-8-5 11:36 | 显示全部楼层
CloudKiss 发表于 2025-8-4 19:04
VCC引脚还能这么玩啊!
楼主也太强了吧!

IO模拟出来的GND和VCC仅供低功率设备使用。否则会烧毁引脚。
逆鳞风暴 发表于 2025-8-6 18:33 | 显示全部楼层
看起来你已经成功地将OLED驱动集成到了APM32E030R开发板上,并且通过GPIO配置实现了I2C通信。你的步骤描述得很清晰,对于想要尝试类似项目的人来说是一个很好的参考。
DawnFervor 发表于 2025-8-6 19:40 | 显示全部楼层
使用模拟I2C,先跑起来,再优化。
 楼主| gaoyang9992006 发表于 2025-8-7 15:07 | 显示全部楼层
DawnFervor 发表于 2025-8-6 19:40
使用模拟I2C,先跑起来,再优化。

是的,一步一步来。
 楼主| gaoyang9992006 发表于 2025-8-7 15:08 | 显示全部楼层
逆鳞风暴 发表于 2025-8-6 18:33
看起来你已经成功地将OLED驱动集成到了APM32E030R开发板上,并且通过GPIO配置实现了I2C通信。你的步骤描述 ...

是的,希望对新手有帮助。
SpiritSong 发表于 2025-8-7 15:36 | 显示全部楼层
OLED的功耗这么小呢啊!
20mA就可以满足了
之前也用过OLED 12864,还真没有注意过这个功耗的事情
CloudKiss 发表于 2025-8-8 11:23 | 显示全部楼层
不跟楼主学习了!
使用GPIO直接来供电,直接接地,这有点颠覆我的认知了
 楼主| gaoyang9992006 发表于 2025-8-8 13:47 | 显示全部楼层
CloudKiss 发表于 2025-8-8 11:23
不跟楼主学习了!
使用GPIO直接来供电,直接接地,这有点颠覆我的认知了
...

一开始是想用硬件I2c 的,发现那些引脚不方便直接插显示屏。就先发了这个贴。今天找到了杜邦线,又发了一个用硬件I2C实现的帖子,就用正经的VCC供电了。
CloudKiss 发表于 2025-8-8 14:24 | 显示全部楼层
好的,我去看看去。
阳光爆裂 发表于 2025-8-11 17:07 | 显示全部楼层
看了半天,楼主为啥把OLED和板子离得这么近。和着是使用了GPIO做为电源啊
厉害
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2045

主题

16350

帖子

222

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