欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

# 基于NRF52832的墨水屏移植与GUI设计(1)

程序员文章站 2022-03-15 13:46:42
基于NRF52832的墨水屏移植与GUI设计主控芯片:NRF52832外设: HINK 2.13 BWR(黑白红) 三色墨水屏墨水屏驱动编写驱动是属于底层的开发,也是GUI界面开发的基础,你的应用层软件程序是在底层的基础上才能编写的。驱动相当于房屋的地基,打好了地基才能这上面盖楼。那么驱动是干嘛的呢?它相当于一个通道,把你的外部设备和你的单片机通过通信接口连接起来,建立起关系。双方能够收发数据命令,进行通信。硬件电路下面直接上电路图![在这1里插入图片描述](https://...

基于NRF52832的墨水屏移植与GUI设计(1)

主控芯片:NRF52832
外设: HINK 2.13 BWR(黑白红) 三色墨水屏

# 基于NRF52832的墨水屏移植与GUI设计(1)
墨水屏

驱动编写

  • 驱动是属于底层的开发,也是GUI界面开发的基础,你的应用层软件程序是在底层的基础上才能编写的。驱动相当于房屋的地基,打好了地基才能这上面盖楼。
    那么驱动是干嘛的呢?它相当于一个通道,把你的外部设备和你的单片机通过通信接口连接起来,建立起关系。双方能够收发数据命令,进行通信。

硬件电路

下面直接上电路图
![在这1里插入图片描述](https://img-blog.csdnimg.cn/20200811195128933.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4ODIyNQ==,size_16,color_FFFFFF,t_70)图一 主控芯片
  • # 基于NRF52832的墨水屏移植与GUI设计(1)图二 屏幕引脚
    电路图上可以清楚看到,连接的引脚。

CS# 芯片选择输入引脚
D/C# 数据/命令控制引脚
SCL 串行时钟针(SPI)
SDA 串行数据pin (SPI)

TSCL-------p0-23
TSDA-------P0-22
BS1--------P0-20
BUSY-------P0-19
RES#-------P0-18
D/C#-------P0-17
CS#--------P0-16
SCL--------P0-15

功能口 引脚
MISO 17
MOSI 18
CLK 20
CSN 19

通信接口

那么二者是如何通信的呢?
上屏幕的说明书:
# 基于NRF52832的墨水屏移植与GUI设计(1)
# 基于NRF52832的墨水屏移植与GUI设计(1)图 3,4 SPI接口数据的读写
在屏幕的数据手册中,你可以清楚地看到各个接口的作用,功能。以及在进行数据传递过程中,需要的条件。

spi接口配置

在这里插入代码片
//#define BOARD_SPI0_MISO_IO          29
#define BOARD_SPI0_MOSI_IO          13
#define BOARD_SPI0_CLK_IO           15          
#define BOARD_SPI0_CSN_IO           16

这里按照电路图,把这些接口配置为SPI的接口
分别是:主机输出从机输入,时钟,片选。miso没启用。
还有其他的很多接口,我们用GPIO口复用为功能口

在这里插入代码片
//RST引脚初始化

void pingmuRstPinInit(void)
{
	NRF_LOG_INFO("pingmuRstPinInit");    //配置 PWM 输出管脚
	nrf_gpio_cfg_output(pingmu_RST_IO);    //配置GPIO输出管脚
	pingmu_RST_HIGH;
}


//RST引脚设置
void pingmuRstPinSet(bool pinState)
{
	NRF_LOG_INFO("pingmuRstPinSet");   //配置 PWM 输出管脚
    if(pinState == pingmu_RST_OFF)
    {
		   nrf_gpio_pin_write (pingmu_RST_IO, 1);  //配置为写引脚,并写1
    }
    else if(pinState == pingmu_RST_ON)
    {
		nrf_gpio_pin_write(pingmu_RST_IO, 0);       //配置为写引脚,并写0
    }

}


void BS1_Init(void)
{
	nrf_gpio_cfg_output(BOARD_BS1_IO);
	nrf_gpio_pin_write(BOARD_BS1_IO, 0);     //配置BS1为低电平,则设置为4线SPI
}

void BUSY_Init(void)
{
nrf_gpio_cfg_input(pingmu_BUSY_IO,NRF_GPIO_PIN_NOPULL);
	
}


/*
 @brief DC的初始化函数
 @param 无
 @return 无
*/
void DC_Init(void)
{
	nrf_gpio_cfg_output(BOARD_DC_IO);

}


void DC_L(void)
{
	nrf_gpio_pin_write(BOARD_DC_IO, 0);
}


void DC_H(void)
{
	nrf_gpio_pin_write(BOARD_DC_IO, 1);
}



void RESET()  //复位
{
	pingmu_RST_LOW;
	DELAY_mS(1);								
 	pingmu_RST_HIGH;
  	DELAY_mS(1);
}

端口配置过之后,我们还要屏幕驱动流程,写驱动程序
# 基于NRF52832的墨水屏移植与GUI设计(1)
屏幕驱动开发流程图

  • 在这里插入代码片
  • / 电子纸驱动初始化 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void INIT_SSD1619A()
{

          	SPI4W_WRITECOM(0x01);		
            SPI4W_WRITEDATA(0xF9);
            SPI4W_WRITEDATA(0x00);
            SPI4W_WRITEDATA(0x00);

	 SPI4W_WRITECOM(0x11);		// data enter mode
	SPI4W_WRITEDATA(0x01);
	
SPI4W_WRITECOM(0x44);		// set RAM x address start/end, in page 36
	SPI4W_WRITEDATA(0x00);		// RAM x address start at 00h;
	SPI4W_WRITEDATA(0x0F);		 
	
SPI4W_WRITECOM(0x45);		 
	SPI4W_WRITEDATA(0xF9);		 
	SPI4W_WRITEDATA(0x00);		
	SPI4W_WRITEDATA(0x00);		// RAM y address end at 00h;
	SPI4W_WRITEDATA(0x00);	
            
	SPI4W_WRITECOM(0x3C);		// board
	SPI4W_WRITEDATA(0x05);		//GS1-->GS1
            
            SPI4W_WRITECOM(0x21);		//  Display update control
            SPI4W_WRITEDATA(0x00);	
            SPI4W_WRITEDATA(0x80);	        // for 1675 type panel    New panel 不需要增加
           
    
          SPI_CS_HIGH;

}

SPI4W_WRITECOM(); //写命令
SPI4W_WRITEDATA(); //写数据
因为这个外设屏幕只用做显示效果,所以我们只要写命令和数据就行,这也是为什么我们不启用,miso端口。

完整的初始化程序:`
void pingmu_Init()
{

	pingmuRstPinInit();//RST初始化
	BS1_Init();        //BS1初始化
	DC_Init();         //DC初始化
	SPI_Init();        //SPI端口的初始化
  BUSY_Init();       //BUSY初始化

 RESET();	
SPI4W_WRITECOM(0x12);		
 READBUSY();	
INIT_SSD1619A();

dis_img(PIC_BLACK);//显示函数
Display();
enterdeepsleep();`
};

显示函数就不写了,太乱了
显示效果:
# 基于NRF52832的墨水屏移植与GUI设计(1)
屏幕点亮显示黑色,驱动编写成功。
本人刚入职的小白,第一次有点乱。有兴趣可以交流。

应用层显示编写

下次续集再写,屏幕的说明书自取。

本文地址:https://blog.csdn.net/weixin_43588225/article/details/107942897