记一次移植MSP40F5529PocketKit墨水屏驱动到STM32F103C8T6的过程

暑假做电赛,学校给发了一块TI的MSP430F5529的LaunchPad和HautsingInstruments的MSP430F5529PocketKit,集训结束后,LaunchPad收回去了,但是这个PocketKit却不收,可以留着自己用了。
官网对POCKET KIT的简介
现在手头上只有STM32F103C8T6的开发板,没有MSP430,但是这个PocketKit的硬件和参考例程只为LaunchPad设计的,故移植之。
首先从官方文档里翻出两份原理图,LaunchPad的IOPin排列如下:
在这里插入图片描述
POCKET KIT中对墨水屏的原理图如下:
在这里插入图片描述
所以,相当于墨水屏与STM32的链接只要6条信号线和2条电源线,电源线只需连接3.3V和GND,5V可以不管,由于POCKET KIT和LaunchPad的引脚一一对应,直接按指示链接就完了。
这里给的连接关系如下:

墨水屏引脚(MSP430引脚)STM32引脚输入/输出
BUSY(P2.2)PA0input
RES(P1.4)PA1output
DC(P3.4)PA2output
CSI(P3.2)PA3output
SCLK(P2.7)PA4output
SDI(P3.3)PA5output

在这里插入图片描述
针对引脚STM32上编写IO初始化程序:

void Eink_GPIO_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //挂载PA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;				 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO时钟50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);						GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//BUSY信号GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //例程中对这一输入取了下拉,实际浮空输入也可。GPIO_Init(GPIOA, &GPIO_InitStructure);
}

将官方例程的Paper_Display.h中关于IO操作的部分替换为STM32的IO操作库函数,并记得注释掉和MSP430的Include,以及添加上和stm32有关的include。

#define nRST_H	GPIO_SetBits(GPIOA,GPIO_Pin_1)//P1OUT|=BIT4
#define nRST_L	GPIO_ResetBits(GPIOA,GPIO_Pin_1)//P1OUT&=~BIT4
#define nCS_H	GPIO_SetBits(GPIOA,GPIO_Pin_3)//P3OUT|=BIT2
#define nCS_L	GPIO_ResetBits(GPIOA,GPIO_Pin_3)//P3OUT&=~BIT2
#define SDA_H	GPIO_SetBits(GPIOA,GPIO_Pin_5)//P3OUT|=BIT3
#define SDA_L	GPIO_ResetBits(GPIOA,GPIO_Pin_5)//P3OUT&=~BIT3
#define SCLK_H   GPIO_SetBits(GPIOA,GPIO_Pin_4)//P2OUT|=BIT7
#define SCLK_L   GPIO_ResetBits(GPIOA,GPIO_Pin_4)//P2OUT&=~BIT7
#define nDC_H 	GPIO_SetBits(GPIOA,GPIO_Pin_2)//P3OUT|=BIT4
#define nDC_L 	GPIO_ResetBits(GPIOA,GPIO_Pin_2)//P3OUT&=~BIT4
#define nBUSY	GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//P2IN & BIT2

在Paper_Display.c中include入stm32的相关头文件,对于延迟相关的可以根据注释标识的延迟时间,将其替换为delay.h中的delay_ms和delay_us,开头的#define DELAY_TIME 50最好改为#define DELAY_TIME 1降低刷新缓冲区后的等待时间。
PaperIO_Int函数里的内容全部注释掉,改成GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
READBUSY()函数改成如下内容

void READBUSY()
{while(1){	 //=1 BUSYif(nBUSY==0)break;}delay_ms(5);//DELAY_M(2);
}

然后,按照例程写一个类似的测试函数。

#include "sys.h"
#include "delay.h"int main(void){int freshcount=0;char strs[40];delay_init();Eink_GPIO_Init();//初始化GPIOPaperIO_Int(;INIT_SSD1673();//初始化Init_buff();DIS_IMG(1);display((unsigned char *)"2018-11-10 ByAyahuasec/shsx5543",0,16,0,0,0,0);while(1){sprintf(strs,"Fresh Count:%d",freshcount++);display((unsigned char *)strs,0,0,0,0,0,0);DIS_IMG(1);}}

连接STLink,下载,运行。效果如下图,每计数一次刷新一次屏幕,显示计数值。
在这里插入图片描述
原创,转载请告知


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部