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

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

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

在这里插入图片描述
墨水屏

驱动编写

  • 驱动是属于底层的开发,也是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)图一 主控芯片
  • 在这里插入图片描述图二 屏幕引脚
    电路图上可以清楚看到,连接的引脚。

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

通信接口

那么二者是如何通信的呢?
上屏幕的说明书:
在这里插入图片描述
在这里插入图片描述图 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);
}

端口配置过之后,我们还要屏幕驱动流程,写驱动程序
在这里插入图片描述
屏幕驱动开发流程图

  • 在这里插入代码片
  • / 电子纸驱动初始化 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();`
};

显示函数就不写了,太乱了
显示效果:
在这里插入图片描述
屏幕点亮显示黑色,驱动编写成功。
本人刚入职的小白,第一次有点乱。有兴趣可以交流。

应用层显示编写

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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值