打印
[综合信息]

【华大测评】+ 驱动板载显示器

[复制链接]
1102|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这款开发板上有个OLED显示器,对调试板卡来说非常好用,这里首先把这个显示器驱动起来,显示器为I2C接口,论坛里有人已经成功驱动过了,相信应该不是很难。I2C驱动、OLED驱动,再加字库就OK了。show显示效果,祝大家国庆、中秋双节快乐!

只要之前接触过OLED,相信驱动起来都不是很难,这里不啰嗦了,直接上代码:首先搭建I2C接口配置,可参考例程
    stc_i2c_init_t stcI2cInit;
    stc_clk_freq_t stcClkFreq;

        /* Initialize I2C port*/
    PORT_SetFunc(I2C2_SCL_PORT, I2C2_SCL_PIN, Func_I2c2_Scl, Disable);
    PORT_SetFunc(I2C2_SDA_PORT, I2C2_SDA_PIN, Func_I2c2_Sda, Disable);

    /* Enable I2C Peripheral*/
    PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_I2C2, Enable);
        
    I2C_DeInit(I2C_CH);

    /* Get system clock frequency */
    CLK_GetClockFreq(&stcClkFreq);

    MEM_ZERO_STRUCT(stcI2cInit);
    stcI2cInit.enI2cMode = I2cMaster;
    stcI2cInit.u32Pclk3 = stcClkFreq.pclk3Freq;
    stcI2cInit.u32Baudrate = 400000ul;
    stcI2cInit.u32SclTime = 0ul;
    I2C_Init(I2C_CH, &stcI2cInit);

    I2C_Cmd(I2C_CH, Enable);
写数据
   uint32_t u32TimeOut = TIMEOUT;

    while(u32Size--)
    {
        /* Wait tx buffer empty */
        u32TimeOut = TIMEOUT;
        while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TEMPTYF))
        {
            if(0ul == (u32TimeOut--))
            {
                break;
            }
        }

        /* Send one byte data */
        I2C_SendData(I2C_CH, Data);

        /* Wait transfer end*/
        u32TimeOut = TIMEOUT;
        while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TENDF))
        {
            if(0ul == (u32TimeOut--))
            {
                break;
            }
        }

        /* Check ACK */
        u32TimeOut = TIMEOUT;
        while(Set == I2C_GetStatus(I2C_CH, I2C_SR_NACKDETECTF))
        {
            if(0ul == (u32TimeOut--))
            {
                break;
            }
        }
    }
    uint32_t u32TimeOut = TIMEOUT;

    /* Wait tx buffer empty */
    while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TEMPTYF))
    {
        if(0ul == (u32TimeOut--))
        {
                        break;
        }
    }

    /* Send I2C address */
    I2C_SendData(I2C_CH, u8Adr);

    if(!(u8Adr & 0x01u))     
    {
        /* If in master transfer process, Need wait transfer end*/
        uint32_t u32TimeOut = TIMEOUT;
        while(Reset == I2C_GetStatus(I2C_CH, I2C_SR_TENDF))
        {
            if(0ul == (u32TimeOut--))
            {
                break;
            }
        }
    }

    /* Check ACK */
    u32TimeOut = TIMEOUT;
    while(Set == I2C_GetStatus(I2C_CH, I2C_SR_NACKDETECTF))
    {
        if(0ul == (u32TimeOut--))
        {
            break;
        }
    }
    uint32_t u32TimeOut = TIMEOUT;
    en_flag_status_t enFlagBusy = Reset;
    en_flag_status_t enFlagStartf = Reset;

    /* generate start or restart signal */
    if(!u8Start)
    {
        /* Wait I2C bus idle */
        while(Set == I2C_GetStatus(I2C_CH, I2C_SR_BUSY))
        {
            if(0ul == (u32TimeOut--))
            {
                                break;
            }
        }

        I2C_GenerateStart(I2C_CH, Enable);
    }
    else
    {
        /* Clear start status flag */
        I2C_ClearStatus(I2C_CH, I2C_CLR_STARTFCLR);
        /* Send restart condition */
        I2C_GenerateReStart(I2C_CH , Enable);
    }

    /* Judge if start success*/
    u32TimeOut = TIMEOUT;
    while(1)
    {
        enFlagBusy = I2C_GetStatus(I2C_CH, I2C_SR_BUSY);
        enFlagStartf = I2C_GetStatus(I2C_CH, I2C_SR_STARTF);
        if(enFlagBusy && enFlagStartf)
        {
            break;
        }
        if(0ul == (u32TimeOut--))
        {
                        break;
        }
    }
代码还不少,直接上传文件,最后调用OLED_Process show 效果!



Src.zip

7.16 KB

OLED相关文件

使用特权

评论回复
沙发
zeshoufx| | 2020-10-2 13:14 | 只看该作者
谢谢分享【驱动板载显示器 】

使用特权

评论回复
板凳
weifeng90| | 2020-10-5 21:17 | 只看该作者
感谢分享

使用特权

评论回复
地板
自己的灌饼| | 2020-10-10 09:18 | 只看该作者
OLED驱动,再加字库就OK了。show显示效果,祝大家国庆、中秋双节快乐!

使用特权

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

本版积分规则

个人签名:永远忠于年轻时的梦想!

38

主题

533

帖子

1

粉丝