暑假做电赛,学校给发了一块TI的MSP430F5529的LaunchPad和HautsingInstruments的MSP430F5529PocketKit,集训结束后,LaunchPad收回去了,但是这个PocketKit却不收,可以留着自己用了。
现在手头上只有STM32F103C8T6的开发板,没有MSP430,但是这个PocketKit的硬件和参考例程只为LaunchPad设计的,故移植之。
首先从官方文档里翻出两份原理图,LaunchPad的IOPin排列如下:
POCKET KIT中对墨水屏的原理图如下:
所以,相当于墨水屏与STM32的链接只要6条信号线和2条电源线,电源线只需连接3.3V和GND,5V可以不管,由于POCKET KIT和LaunchPad的引脚一一对应,直接按指示链接就完了。
这里给的连接关系如下:
墨水屏引脚(MSP430引脚) | STM32引脚 | 输入/输出 |
---|---|---|
BUSY(P2.2) | PA0 | input |
RES(P1.4) | PA1 | output |
DC(P3.4) | PA2 | output |
CSI(P3.2) | PA3 | output |
SCLK(P2.7) | PA4 | output |
SDI(P3.3) | PA5 | output |
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时钟50MHz
GPIO_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 BUSY
if(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();//初始化GPIO
PaperIO_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);
}
}