
CH592/CH582驱动墨水屏实例讲解
以CH592为例,讲解墨水屏驱动的硬件及软件的实现另外厂家提供的代码,是软件模拟SPI来驱动的,考虑到我们之所以选用CH592芯片,多半是需要保留BLE功能,所以我们改用硬件SPI驱动实现。墨水屏的驱动代码我们用的是墨水屏厂家提供的代码,厂家提供的是STM32的代码,我们需要适当的修改。我们在CH592开发板的BLE Peripheral例程的基础上修改。CH592开发板、墨水屏(中景园的1.54
·
以CH592为例,讲解墨水屏驱动的硬件及软件的实现。
硬件准备:
CH592开发板、墨水屏(中景园的1.54寸墨水屏)、杜邦线。
硬件连接:
CH592开发板 | 墨水屏 |
VCC | VCC |
GND | GND |
PA13 | SCL |
PA14 | SDA |
PA4 | RES |
PA5 | DC |
PA12 | CS |
PA15 | BUSY |
软件实现:
墨水屏的驱动代码我们用的是墨水屏厂家提供的代码,厂家提供的是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文库
推荐内容
点击阅读全文
更多推荐
社区排行榜
Go语言基础
活动日历
查看更多
直播时间 2022-05-31 13:51:24

CSDN云原生系列在线峰会:K8s大规模应用和深度实践峰会
直播时间 2023-09-14 18:47:34

腾讯云优质活动用户线上技术漫谈
直播时间 2023-09-13 13:47:50

CloudOps云上自动化运维,助力云上业务高效、稳定运行
直播时间 2023-09-06 09:21:46

2023 Google 开发者大会 主旨演讲
直播时间 2023-08-31 18:49:52

TDSQL-C Serverless助力企业降本增效
所有评论(0)