最近太热了,没头绪,今天终于忍痛打开空调冷静了一下,开始玩开发板。
找到了一块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).
非常奈斯,烧录后,按下复位按键,屏幕点亮。如开头的图片所示。
|