打印
[APM32E0]

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

[复制链接]
105|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2025-8-4 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近太热了,没头绪,今天终于忍痛打开空调冷静了一下,开始玩开发板。
找到了一块SSD1306 驱动的0.96寸OLED,该OLED的引脚顺序为 GND VCC SCL SDA共计4根引脚,I2C通信协议。
接下来先采用最简单的GPIO来驱动。
查看开发板,寻找合适的引脚方便插入OLED显示模块,如下图所示

为了方便插入模块,选选择了其中的GND,PA1,PA3,PF5引脚分别对应GND、VCC、SCL、SDA。
使用PA1推挽输出高电平代替VCC。
有了思路,配置如下
    GPIO_Config_T gpioConfig;

    RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
    /* SCL GPIO configuration */
    gpioConfig.pin = GPIO_PIN_3;
    gpioConfig.mode = GPIO_MODE_OUT;
    gpioConfig.outtype = GPIO_OUT_TYPE_OD;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.pupd = GPIO_PUPD_NO;
    GPIO_Config(GPIOA, &gpioConfig);
       
            RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOF);
    /* SDA GPIO configuration */
    gpioConfig.pin = GPIO_PIN_5;
    GPIO_Config(GPIOF, &gpioConfig);
       
    /* OLED VCC GPIO configuration */       
    gpioConfig.pin = GPIO_PIN_1;
    gpioConfig.outtype = GPIO_OUT_TYPE_PP;
    GPIO_Config(GPIOA, &gpioConfig);
                GPIO_SetBit(GPIOA, GPIO_PIN_1);
接下来就是移植程序了

将oled.c文件添加进工程,将OLED库函数目录文件夹添加到头文件包含路径

修改oled.h头文件中的引用头文件和宏定义映射函数
#include "stdlib.h"        
#include "apm32e030_gpio.h"
#include "apm32e030_rcm.h"
//-----------------OLED端口定义----------------

#define OLED_SCL_Clr()   GPIO_ClearBit(GPIOA, GPIO_PIN_3)
#define OLED_SCL_Set()     GPIO_SetBit(GPIOA, GPIO_PIN_3)

#define OLED_SDA_Clr()   GPIO_ClearBit(GPIOF, GPIO_PIN_5)
#define OLED_SDA_Set()     GPIO_SetBit(GPIOF, GPIO_PIN_5)

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

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

    RCM_EnableAHBPeriphClock(LED2_GPIO_CLK | LED3_GPIO_CLK);
    /* LED2 GPIO configuration */
    gpioConfig.pin = LED2_PIN;
    gpioConfig.mode = GPIO_MODE_OUT;
    gpioConfig.outtype = GPIO_OUT_TYPE_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.pupd = GPIO_PUPD_NO;
    GPIO_Config(LED2_GPIO_PORT, &gpioConfig);

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

    /* Turn LED2 on */
    GPIO_ClearBit(LED2_GPIO_PORT, LED2_PIN);
    /* Turn LED3 off */
    GPIO_SetBit(LED3_GPIO_PORT, LED3_PIN);
       
       
                OLED_Init();
                OLED_ColorTurn(0);//0正常显示,1 反色显示
                OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
                OLED_ShowPicture(0,0,128,64,BMP1,1);
                OLED_Refresh();
    for (;;)
    {
                        /* LED Toggle*/
                        APM_TINY_LEDToggle(LED2);
                        Delay();
                        APM_TINY_LEDToggle(LED3);
                        Delay();
    }
}
编译烧录,".\Objects\001.axf" - 0 Error(s), 0 Warning(s).
非常奈斯,烧录后,按下复位按键,屏幕点亮。如开头的图片所示。


使用特权

评论回复
沙发
gaoyang9992006|  楼主 | 2025-8-4 11:13 | 只看该作者
最后奉上该项目的工程,供其他朋友参考
001.rar (83.76 KB)

使用特权

评论回复
板凳
真的问题不大| | 2025-8-4 16:37 | 只看该作者
gaoyang9992006 发表于 2025-8-4 11:13
最后奉上该项目的工程,供其他朋友参考

感谢大佬分享

使用特权

评论回复
地板
CloudKiss| | 2025-8-4 19:04 | 只看该作者
VCC引脚还能这么玩啊!
楼主也太强了吧!

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2025-8-5 11:35 | 只看该作者
CloudKiss 发表于 2025-8-4 19:04
VCC引脚还能这么玩啊!
楼主也太强了吧!

其实GND也可以用IO模拟出来。

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2025-8-5 11:36 | 只看该作者
CloudKiss 发表于 2025-8-4 19:04
VCC引脚还能这么玩啊!
楼主也太强了吧!

IO模拟出来的GND和VCC仅供低功率设备使用。否则会烧毁引脚。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2042

主题

16338

帖子

222

粉丝