这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 灵动微MM32G0001A6T驱动IIC-OLED

共2条 1/1 1 跳转至

灵动微MM32G0001A6T驱动IIC-OLED

专家
2024-01-13 17:32:57     打赏

        前面我介绍了MM32G0001A6T的ADC功能,为了后续测试ADC功能、显示测试结果,先准备下显示方面的处理。对于SOP8封装的MM32G0001A6T单片机,2和4是电源引脚,1和5是烧录用引脚,不敢碰,所以可供使用的引脚有8、7、6、3。为了驱动OLED显示,准备使用6和3引脚,使用软件模拟方式驱动IIC的OLED。

        驱动OLED需要的资源有点大,MM32G0001A6T有16KFlash,2KRAM,问题应该不大。程序主要处理代码如下:


#define _MAIN_C_
#include "platform.h"
#include "main.h"
void GPIO_Configure(uint16_t PINn)  {  
    GPIO_InitTypeDef GPIO_InitStruct;  
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);  
    GPIO_StructInit(&GPIO_InitStruct);  
    GPIO_InitStruct.GPIO_Pin   = PINn;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;  
    GPIO_Init(GPIOA, &GPIO_InitStruct);  
    
    GPIO_WriteBit(GPIOA, PINn, Bit_SET);  
}
void GPIO_IO_Toggle(GPIO_TypeDef *GPIOn, uint16_t PINn) {  
    if (Bit_RESET == GPIO_ReadOutputDataBit(GPIOn, PINn)) {  
        GPIO_SetBits(GPIOn, PINn);  
    } else {  
        GPIO_ResetBits(GPIOn, PINn);  
    }  
}
void GPIO_LED_Toggle_Sample(uint16_t PINn) {  
    GPIO_Configure(PINn);  
    while (1)  {  
        GPIO_IO_Toggle(GPIOA, PINn);  
        PLATFORM_DelayMS(500);  
    }  
}
int main(void) {
    // 初始化四通滴答器
    PLATFORM_Init();
    
    // 初始化OLED用接口
    OLED_Init();
    // 清除屏幕
    OLED_Clear(0);
    
    // 测试:显示信息
    GUI_ShowString(0, 0, (uint8_t*)"Start test ...", 8, 1);
    GUI_ShowString(0, 8, (uint8_t*)"Start test ...", 16, 1);
    
    
    while (1) {
        //GPIO_LED_Toggle_Sample(GPIO_Pin_3);
        PLATFORM_DelayMS(500);
    }
}

        程序中使用了USART2的TX作为串口输出用,主要是为了打印调试信息。这里没有使用USART1,是因为考虑到ADC测试,以及USART1占用了下载口,为了避免出现无法再次下载,必须避开SWCLK和SWDIO两个引脚。

显示效果:

1.png

串口输出信息:

2.png代码打包(不包括库及驱动文件,你可以自行去灵动微官网下载):

oled.zip




关键词: 菜鸟学单片机     MM32G0001A6T     OLED    

院士
2024-07-12 15:14:55     打赏
2楼

学习了,谢谢分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]