当前位置:首页 > 单片机 > 单片机
[导读]书接上文《1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO》我们发现用16MHz晶振的nRF51822驱动1.77寸的spi速度达不到要求本节主要采用72MHz的stm32尝试刷屏效果工程结构如下:注:整个工程最重要的部分在

书接上文《1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO》

我们发现用16MHz晶振的nRF51822驱动1.77寸的spi速度达不到要求

本节主要采用72MHz的stm32尝试刷屏效果

工程结构如下:

注:整个工程最重要的部分在USR中,其它是必须!

首先是LCD.c:

1、类似与用nRF51822做的彩屏驱动,这里主要的不同点在于引脚的初始化~

2、同时,为了使刷屏速度更快点,在39~46行将原来的循环拆成了8行命令~

3、没写的地方和基于nRF51的一样,上一篇说的很详细

1 #include "LCD.h"

2

3

4 void LCD_GPIO_Init()

5 {

6 GPIO_InitTypeDef GPIO_InitStructure;

7

8 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA " RCC_APB2Periph_AFIO, ENABLE);

9

10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;

11 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

12 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz

13 GPIO_Init(GPIOA, &GPIO_InitStructure);

14 }

15

16 ////////////////////////////////////////////////////////////////////////////////////

17 //下面是SPI函数及实现LCD通信基础的写数据和写命令函数

18 //有了这两个函数就能实现复杂的LCD初始化和GUI了

19 ////////////////////////////////////////////////////////////////////////////////////

20 /*

21 SPI Send Data

22 */

23 void SendDataSPI(unsigned char DatByte)

24 {

25 // unsigned char i;

26 // for(i = 0; i < 8; i++)

27 // {

28 // if((dat&0x80)!=0)SDA_SET;

29 // else SDA_CLEAR;

30

31 // dat <<= 1;

32

33 // SCL_CLEAR;

34 // SCL_SET;

35 // }

36 int bit;

37

38

39 bit = DatByte >> 7; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

40 bit = DatByte >> 6; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

41 bit = DatByte >> 5; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

42 bit = DatByte >> 4; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

43 bit = DatByte >> 3; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

44 bit = DatByte >> 2; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

45 bit = DatByte >> 1; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

46 bit = DatByte >> 0; LCD_SCK = 0; LCD_SDA = bit; LCD_SCK = 1;

47

48 }

49

50 /*

51 LCD WRITE COMMAND AND DATA

52 */

53 void WriteComm(unsigned int i)

54 { 59 }

60 void WriteData(unsigned int i)

61 { 66 }

67

68 /*

69 写显示数据向屏幕(屏幕显示数据需要2字节)

70 */

71 void WriteDispData(unsigned char DataH, unsigned char DataL)

72 { 75 }

76 ////////////////////////////////////////////////////////////////////////////////////

77

78 /*

79 LCD初始化函数

80 */

81 void LCD_Init(void)

82 {173 }

174

175 /*

176 LCD块写(大量数据修改,相当于擦除)

177 */

178 void BlockWrite(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend)

179 {194 }

195

196

197 /*

198 LCD显示颜色(颜色已在.h文件中定义)

199 */

200 void DispColor(unsigned int color)

201 {216 }

217

218

219 /*

220 写一个点(带颜色)

221 */

222 void WriteOneDot(unsigned int color)

223 {231 }

232

233 ////////////////////////////////////////////////////////////////////////////////////

234

235

236 /*

237 绘制一个像素点

238 */

239 void PutPixel(unsigned int x, unsigned int y, unsigned int color)

240 {247 }

248

249 /*

250 绘制一片区域(名字为线,其实可以刷一个面)

251 */

252 void DrawLine(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend, unsigned int color)

253 {265 }

266

267 void Delay_ms(u16 time)

268 {

269 u16 i=0;

270 while(time--)

271 {

272 i=12000;

273 while(i--);

274 }

275 }



同样的为了适配stm32,.H文件中宏定义也做了相应调整:


1、蓝色部分引脚高低电平宏定义是根据stm引脚设置特性做的修改~


2、黄色部分是为了使stm32的引脚能够像51单片机一样直接给赋值,如:LCD_CS=0或LCD_CS=1


3、其他部分没变,这就说明了之前我们用宏定义的好处了~



1 #include "stm32f10x.h"

2

3

4

5 /*

6 引脚高低电平宏定义

7 */

8 #define CS_SET GPIO_SetBits(GPIOA, GPIO_Pin_0)//GPIO_Mode_Out_PP

9 #define CS_CLEAR GPIO_ResetBits(GPIOA, GPIO_Pin_0)//普通推挽输出

10 #define RS_SET GPIO_SetBits(GPIOA, GPIO_Pin_1)

11 #define RS_CLEAR GPIO_ResetBits(GPIOA, GPIO_Pin_1)

12 #define RET_SET GPIO_SetBits(GPIOA, GPIO_Pin_2)

13 #define RET_CLEAR GPIO_ResetBits(GPIOA, GPIO_Pin_2)

14 #define SCL_SET GPIO_SetBits(GPIOA, GPIO_Pin_3)//GPIO_Mode_AF_PP

15 #define SCL_CLEAR GPIO_ResetBits(GPIOA, GPIO_Pin_3)//复用推挽输出

16 #define SDA_SET GPIO_SetBits(GPIOA, GPIO_Pin_4)

17 #define SDA_CLEAR GPIO_ResetBits(GPIOA, GPIO_Pin_4)

18

19 #define BitBand(Addr, Bit) *((volatile int*)(((int)(Addr) & 0x60000000) + 0x02000000 + (int)(Addr) * 0x20 + (Bit) * 4))

20 #define LCD_CS BitBand(&GPIOA->ODR, 0)

21 #define LCD_RS BitBand(&GPIOA->ODR, 1)

22 #define LCD_SDA BitBand(&GPIOA->ODR, 4)

23 #define LCD_SCK BitBand(&GPIOA->ODR, 3)

24

25 /*

26 宏定义等待函数

27 */

28 #define DELAY_MS(n) Delay_ms(n)

29

30 //-------------------------------------------------------------

31 #define ROW 160 //显示的行、列数

32 #define COL 128

33

34

35 #define BLUE 0xF800 //定义颜色常量

36 #define GREEN 0x07E0

37 #define RED 0x001F

38 #define WHITE 0xFFFF

39 #define BLACK 0x0000

40 #define GRAY 0xEF5D //0x2410

41 #define GRAY75 0x39E7

42 #define GRAY50 0x7BEF

43 #define GRAY25 0xADB5

44

45 void Delay(u16 time);

46 void Delay_ms(u16 time);

47 void DrawLine(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend, unsigned int color);

48 void PutPixel(unsigned int x, unsigned int y, unsigned int color);

49 void WriteOneDot(unsigned int color);

50 void DispColor(unsigned int color);

51 void BlockWrite(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend);

52 void LCD_Init(void);

53 void WriteDispData(unsigned char DataH, unsigned char DataL);

54 void LCD_GPIO_Init(void);



这样在main函数中只要简单调用即可:



1 #include "stm32f10x.h"

2 #include "LCD.h"

3

4

5 void RCC_Configuration(void);

6

7

8 int main(void)

9 {

10 RCC_Configuration(); //系统时钟配置

11 LCD_GPIO_Init();

12 // Delay_ms(5000);

13 LCD_Init();

14 while (1>0)

15 {

16 DispColor(RED);

17 Delay_ms(1000);

18 DispColor(BLUE);

19 Delay_ms(1000);

20 }

21 }

22

23 void RCC_Configuration(void)//系统时钟配置为72MHZ

24 {

25 SystemInit();

26 }



小结:


从上面视频来看即使改成了STM32,驱动SPI屏幕还是不能实现肉眼分辨不出的刷屏效果


接下来试着采用并口数据传输试试~


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对工业以太网的认识,本文将对工业以太网的原理、工业以太网的关键技术以及工业以太网要解决的问题予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网网络优势、工业以太网和IOLINK的区别予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网的优势、工业以太网缺点、工业以太网的维护予以介绍。

关键字:

Apr. 23, 2024 ---- 随着节能成为AI推理服务器(AI Inference Server)优先考量,北美客户扩大存储产品订单,带动QLC Enterprise SSD需求开始攀升。然而,目前仅Solidi...

关键字: SSD AI 服务器

为增进大家对二极管的认识,本文将对续流二极管、续流二极管的工作原理以及二极管在工业产品中的应用予以介绍。

关键字: 二极管 指数 续流二极管

通过本文,您将了解到二极管反接是否有电压以及二极管在电子电路中的应用。

关键字: 二极管 指数 稳压电路

为增进大家对二极管的了解,本文将对ESD二极管和TVS二极管之间的区别予以介绍。

关键字: ESD TVS 二极管 指数

为增进大家对嵌入式主板的认识,本文将对嵌入式主板以及嵌入式主板常见问题及其解决方法予以介绍。

关键字: 嵌入式 指数 主板

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

为增进大家对嵌入式的认识,本文将对嵌入式、嵌入式工作相关的内容予以介绍。

关键字: 嵌入式 指数 嵌入式技术
关闭
关闭