以CH592为例,讲解墨水屏驱动的硬件及软件的实现。

硬件准备:

CH592开发板、墨水屏(中景园的1.54寸墨水屏)、杜邦线。

硬件连接:

CH592开发板墨水屏
VCCVCC
GNDGND 
PA13SCL
PA14SDA
PA4RES
PA5DC
PA12 CS
PA15BUSY

软件实现: 

墨水屏的驱动代码我们用的是墨水屏厂家提供的代码,厂家提供的是STM32的代码,我们需要适当的修改。

我们在CH592开发板的BLE Peripheral例程的基础上修改。

IO口的初始化:

#ifndef OLED_USE_SPI
#define OLED_USE_SPI
#endif

#define EPD_SCL_GPIO_PIN        GPIO_Pin_13

#define EPD_SDA_GPIO_PIN        GPIO_Pin_14

#define EPD_RES_GPIO_PIN        GPIO_Pin_4

#define EPD_DC_GPIO_PIN         GPIO_Pin_5

#define EPD_CS_GPIO_PIN         GPIO_Pin_12

#define EPD_BUSY_GPIO_PIN       GPIO_Pin_15

#define EPD_SCL_Clr() GPIOA_ResetBits(EPD_SCL_GPIO_PIN)
#define EPD_SCL_Set() GPIOA_SetBits(EPD_SCL_GPIO_PIN)

#define EPD_SDA_Clr() GPIOA_ResetBits(EPD_SDA_GPIO_PIN)
#define EPD_SDA_Set() GPIOA_SetBits(EPD_SDA_GPIO_PIN)

#define EPD_RES_Clr() GPIOA_ResetBits(EPD_RES_GPIO_PIN)
#define EPD_RES_Set() GPIOA_SetBits(EPD_RES_GPIO_PIN)

#define EPD_DC_Clr() GPIOA_ResetBits(EPD_DC_GPIO_PIN)
#define EPD_DC_Set() GPIOA_SetBits(EPD_DC_GPIO_PIN)

#define EPD_CS_Clr() GPIOA_ResetBits(EPD_CS_GPIO_PIN)
#define EPD_CS_Set() GPIOA_SetBits(EPD_CS_GPIO_PIN)

#define  EPD_ReadBusy  GPIOA_ReadPortPin(EPD_BUSY_GPIO_PIN)

void EPD_GPIOInit(void)
{
    GPIOA_ModeCfg(EPD_SCL_GPIO_PIN |EPD_SDA_GPIO_PIN, GPIO_ModeOut_PP_5mA );
//    SPI0_MasterDefInit();
#ifdef OLED_USE_SPI
    SPI0_MasterDefInit();
#endif
    GPIOA_ModeCfg(EPD_RES_GPIO_PIN|EPD_DC_GPIO_PIN|EPD_CS_GPIO_PIN,GPIO_ModeOut_PP_5mA);

    GPIOA_ModeCfg(EPD_BUSY_GPIO_PIN,GPIO_ModeIN_PU);
}

增加墨水屏显示任务:#define HAL_EPD_EVENT        0x100

void HAL_Init()
{
    halTaskID = TMOS_ProcessEventRegister(HAL_ProcessEvent);
    HAL_TimeInit();
    EPD_GPIOInit();
    EPD_Memory_Init();
    GPIOInitforAHT10_20();
//    Test_EPD();
#if(defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
    HAL_SleepInit();
#endif
#if(defined HAL_LED) && (HAL_LED == TRUE)
    HAL_LedInit();
#endif
#if(defined HAL_KEY) && (HAL_KEY == TRUE)
    HAL_KeyInit();
#endif
#if(defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
    tmos_start_task(halTaskID, HAL_REG_INIT_EVENT, 800); // 添加校准任务,500ms启动,单次校准耗时小于10ms
#endif
    tmos_start_task( halTaskID, HAL_EPD_EVENT, 1600 );// 添加墨水屏显示任务
    tmos_start_task( halTaskID, AHT_CMD_EVENT, 1600 );    // 添加温湿度测量任务
//    tmos_start_task( halTaskID, HAL_TEST_EVENT, 1600 );    // 添加一个测试任务
}
   if(events & HAL_EPD_EVENT)
    {
        EPD_DisplayWenShiDu(wendu,shidu);
//        EPD_DisplayWatch();
        EPD_DisplayUpdate();
        tmos_start_task(halTaskID, HAL_EPD_EVENT, MS1_TO_SYSTEM_TIME(3000));
        return events ^ HAL_EPD_EVENT;
    }

另外厂家提供的代码,是软件模拟SPI来驱动的,考虑到我们之所以选用CH592芯片,多半是需要保留BLE功能,所以我们改用硬件SPI驱动实现。

完整的代码请参考:CH592Peripheral驱动墨水屏EPD、aht20代码CH592SPI驱动墨水屏IIC驱动aht10资源-CSDN文库

推荐内容
点击阅读全文
Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐