1461|1

1517

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【小华HC32F448测评】+GPIO口及其使用 [复制链接]

 

在小华HC32F448开发板上,配有TFT显示屏的接口,但这种接口并非SPI接口,而是MCU接口。该接口是一种并行传输数据的接口。

据介绍它支持ATK-4.3'TFT显示屏,恰好手头有一块这种开发板的显示屏,于是就插上试了一下,但却没有一点反应。

原来开发板所支持的显示屏是以NT 35510为控制芯片,两者随接口相同但控制芯片却不一致,之所以能在原开发板上显示是因为该开发板采用了一种自动识别技术,可按控制芯片类型来自主更换驱动。

无奈之下,还是先借助GPIO口来驱动一款I2C接口的显示屏。

1.外观LED模块测试

要以GPIO口来驱动显示屏,就要先对使用的GPIO口加以测试,所用的测试工具就是一个LED模块,测试的引脚为PE0和PE1,这是开发板特意留给I2C接口的。

对所用引脚的配置函数为:

static void LED_Init(void)
{
    stc_gpio_init_tstcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(LED_G_PORT, LED_G_PIN, &stcGpioInit);
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_00, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_01, &stcGpioInit);
}

 

供测试的主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
    LL_PERIPH_WP(LL_PERIPH_GPIO);
    for (;;) {
        LED_G_TOGGLE();
		GPIO_TogglePins(GPIO_PORT_E, GPIO_PIN_00);
		GPIO_TogglePins(GPIO_PORT_E, GPIO_PIN_01);
        DDL_DelayMS(DLY_MS);
    }
}

 

经程序的编译和下载,其测试结果如图1和图2所示,说明这2个GPIO口可控。

图1  点亮LED模块

 

图2  熄灭LED模块

 

2.OLED屏显示驱动

有了前面的基础,即可以进行OLED屏的驱动。

OLED屏与开发板的连接关系为:

SCL---PE0

SDA---PE1

输出高低电平的语句定义为:

#define SCL_highGPIO_SetPins(GPIO_PORT_E, GPIO_PIN_00)

#define SCL_lowGPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_00)

#define SDA_highGPIO_SetPins(GPIO_PORT_E, GPIO_PIN_01)

#define SDA_lowGPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_01)

配置引脚工作模式的函数为:

static void LED_Init(void)
{
     stc_gpio_init_tstcGpioInit;
     (void)GPIO_StructInit(&stcGpioInit);
     stcGpioInit.u16PinState = PIN_STAT_RST;
     stcGpioInit.u16PinDir = PIN_DIR_OUT;
     (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_00, &stcGpioInit);
	 (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_01, &stcGpioInit);
}

用于I2C发送起始、停止与等待的函数为:

void IIC_Start()
{
    SCL_high;
    SDA_high;
    SDA_low;
    SCL_low;
}

void IIC_Stop()
{
    SCL_low;
    SDA_low;
    SCL_high;
    SDA_high;
}

void IIC_Wait_Ack()
{
    SCL_high;
    SCL_low;
}

以GPIO口模拟I2C发送字节数据的函数为:

void Write_IIC_Byte(unsigned char IIC_Byte)
{
    unsigned char i;
    unsigned char m,da;
    da=IIC_Byte;
    SCL_low;
    for(i=0;i<8;i++)
    {
        m=da;
        m=m&0x80;
        if(m==0x80)
        {
             SDA_high;
        }
        else  SDA_low;
        da=da<<1;
        SCL_high;
        SCL_low;
     }
}

实现清屏处理的函数是:

void OLED_Clear(void)
{
    uint8_t i,n;
    for(i=0;i<8;i++)
    {
        OLED_WR_Byte (0xb0+i,OLED_CMD);
        OLED_WR_Byte (0x00,OLED_CMD);
        OLED_WR_Byte (0x10,OLED_CMD);
        for(n=0;n<128;n++) OLED_WR_Byte(0,OLED_DATA);
    }
}

进行字符串显示的函数为:

void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
    unsigned char j=0;
    while (chr[j]!='\0')
    {
          OLED_ShowChar(x,y,chr[j],Char_Size);
          x+=8;
          if(x>120){x=0;y+=2;}
          j++;
    }
}

实现驱动测试的主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
    LL_PERIPH_WP(LL_PERIPH_GPIO);
	OLED_Init();
	OLED_Clear();
	OLED_ShowString(20,0,"HC32F448",16);
	OLED_ShowString(20,2,"OLED Test",16);
	OLED_ShowString(20,5,"jinglixixi",16);
    for (;;) {
        LED_G_TOGGLE();
        DDL_DelayMS(DLY_MS);
    }
}

经程序的编译和下载,其测试结果如图3所示,说明对OLED屏的驱动有效且可行。

图3  OLED屏显示效果

最新回复

用自动识别技术按控制芯片类型来自主更换驱动,这个板子还是挺好玩的   详情 回复 发表于 2023-8-5 08:27
点赞 关注
 
 

回复
举报

1704

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

用自动识别技术按控制芯片类型来自主更换驱动,这个板子还是挺好玩的

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表