书接上文《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的一样,上一篇说的很详细

 #include "LCD.h"

  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 }

////////////////////////////////////////////////////////////////////////////////////
//下面是SPI函数及实现LCD通信基础的写数据和写命令函数
//有了这两个函数就能实现复杂的LCD初始化和GUI了
////////////////////////////////////////////////////////////////////////////////////
/*
SPI Send Data
*/
void SendDataSPI(unsigned char DatByte)
{
// unsigned char i;
// for(i = 0; i < 8; i++)
// {
// if((dat&0x80)!=0)SDA_SET;
// else SDA_CLEAR; // dat <<= 1; // SCL_CLEAR;
// SCL_SET;
// }
int bit; bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ;
bit = DatByte >> ; LCD_SCK = ; LCD_SDA = bit; LCD_SCK = ; } /*
LCD WRITE COMMAND AND DATA
*/
void WriteComm(unsigned int i)
{ }
void WriteData(unsigned int i)
{ } /*
写显示数据向屏幕(屏幕显示数据需要2字节)
*/
void WriteDispData(unsigned char DataH, unsigned char DataL)
{ }
//////////////////////////////////////////////////////////////////////////////////// /*
LCD初始化函数
*/
void LCD_Init(void)
{ } /*
LCD块写(大量数据修改,相当于擦除)
*/
void BlockWrite(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend)
{ } /*
LCD显示颜色(颜色已在.h文件中定义)
*/
void DispColor(unsigned int color)
{ } /*
写一个点(带颜色)
*/
void WriteOneDot(unsigned int color)
{ } //////////////////////////////////////////////////////////////////////////////////// /*
绘制一个像素点
*/
void PutPixel(unsigned int x, unsigned int y, unsigned int color)
{ } /*
绘制一片区域(名字为线,其实可以刷一个面)
*/
void DrawLine(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend, unsigned int color)
{ } void Delay_ms(u16 time)
{
u16 i=;
while(time--)
{
i=;
while(i--);
}
}

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

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

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

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

 #include "stm32f10x.h"

 /*
引脚高低电平宏定义
*/
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)
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)
/*
宏定义等待函数
*/
#define DELAY_MS(n) Delay_ms(n) //-------------------------------------------------------------
#define ROW 160 //显示的行、列数
#define COL 128 #define BLUE 0xF800 //定义颜色常量
#define GREEN 0x07E0
#define RED 0x001F
#define WHITE 0xFFFF
#define BLACK 0x0000
#define GRAY 0xEF5D //0x2410
#define GRAY75 0x39E7
#define GRAY50 0x7BEF
#define GRAY25 0xADB5 void Delay(u16 time);
void Delay_ms(u16 time);
void DrawLine(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend, unsigned int color);
void PutPixel(unsigned int x, unsigned int y, unsigned int color);
void WriteOneDot(unsigned int color);
void DispColor(unsigned int color);
void BlockWrite(unsigned int Xstart, unsigned int Xend, unsigned int Ystart, unsigned int Yend);
void LCD_Init(void);
void WriteDispData(unsigned char DataH, unsigned char DataL);
void LCD_GPIO_Init(void);

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

 #include "stm32f10x.h"
#include "LCD.h" void RCC_Configuration(void); int main(void)
{
RCC_Configuration(); //系统时钟配置
11 LCD_GPIO_Init();
12 // Delay_ms(5000);
13 LCD_Init();
while (>)
{
16 DispColor(RED);
Delay_ms();
DispColor(BLUE);
Delay_ms();
}
} void RCC_Configuration(void)//系统时钟配置为72MHZ
{
SystemInit();
}

小结:

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

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

本节工程链接:http://pan.baidu.com/s/1gdfkwoz

@beautifulzzzz

  2015-11-26 持续更新中~

[stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO的更多相关文章

  1. [stm32] 一个简单的stm32vet6驱动2.4寸240X320的8位并口tft屏DEMO

    书接上文: 最近在研究用低速.低RAM的单片机来驱动小LCD或TFT彩屏实现动画效果 首先我用一个16MHz晶振的m0内核的8位单片机nRF51822尝试驱动一个1.77寸的4线SPI屏(128X16 ...

  2. [nRF51822] 1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO

    最近用nRF51822写了个天马4线SPI的1.77寸LCD彩屏驱动,效果如下: 屏幕的规格资料为:http://pan.baidu.com/s/1gdfkr5L 屏幕的驱动资料为:http://pa ...

  3. 如何编写一个简单的Linux驱动(二)——设备操作集file_operations

    前期知识 如何编写一个简单的Linux驱动(一)--驱动的基本框架 前言 在上一篇文章中,我们学习了驱动的基本框架.这一章,我们会在上一章代码的基础上,继续对驱动的框架进行完善.要下载上一篇文章的全部 ...

  4. 如何编写一个简单的Linux驱动(二)——完善设备驱动

    前期知识 1.如何编写一个简单的Linux驱动(一)——驱动的基本框架 2.如何编写一个简单的Linux驱动(二)——设备操作集file_operations 前言 在上一篇文章中,我们编写设备驱动遇 ...

  5. 如何编写一个简单的Linux驱动(一)

    前言 最近在学习Linux驱动,记录下自己学习的历程. 驱动的基本框架 Linux驱动的基本框架包含两部分,“模块入口.出口的注册”和“模块入口.出口函数的实现”,如下方代码. static int ...

  6. Linux下GPIO驱动(一) ----一个简单的LED驱动

    /******************************* * *杂项设备驱动:miscdevice *majior=10; * * *****************************/ ...

  7. linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-84693.html linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxx ...

  8. 【Linux开发】linux设备驱动归纳总结(五):4.写个简单的LED驱动

    linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. Shiro —— 从一个简单的例子开始

    一.Shiro是用来做权限的. 二.权限 1.基本概念: (1)安全实体:要保护的数据. (2)权限:是否有能力去操作(查看.修改.删除 )保护的数据. 2.权限的两个特性 (1)权限的继承性:A 包 ...

随机推荐

  1. 基于现有数据库的Code First模式迁移更新数据库

    本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下 ...

  2. 1236 - Pairs Forming LCM -- LightOj1236 (LCM)

    http://lightoj.com/volume_showproblem.php?problem=1236 题目大意: 给你一个数n,让你求1到n之间的数(a,b && a<= ...

  3. Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结

    最近公司要开发android 所以研究了一下Xamarin  to android 中个GPS 废话不多说,说重点. 想获取手机上的gps信息必不可少的就是要使用 LocationManager Lo ...

  4. jquery选择器总结 转自(永远的麦子)

    jQuery选择器总结 阅读目录 1, 基本选择器? 2, 层次选择器? 3, 过滤选择器? 4, 表单选择器? jQuery选择器共有四大类,分别为基本选择器,层次选择器,过滤选择器和表单选择器.下 ...

  5. Qt Qwt之坐标轴移动

    最近接触到个pro需要做到这方面,于是找了相关材料,也跟好些人讨论,目前就最简单的使用方法,通过按钮触发去控制 X,Y轴的移动,比例自己定义 这个是X轴放大的 QwtInterval tempInte ...

  6. 优质IT资源分享社区www.itziyuan.top

    你好,我是“优质IT资源分享社区(www.itziyuan.top)”的建设者,同时也是一名普通的IT的热爱者. 首先,我介绍一下网站所收录的教程分类:   基础编程语言: C,C++,C#,Java ...

  7. hdu 1181(DFS)变 形 课

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  8. 蓄水池算法(Reservoir Sampling)

    蓄水池算法是一种随机算法,可以形象的描述为从一个n维的list中选取k个元素,其中n是一个很大的数或者n是一个未知的数,而且一般n很大使得不会将list存在主存中. 解法: i = 0 while m ...

  9. BeanUtils: 威力和代价(转载)

    转自:http://blog.sina.com.cn/s/blog_ab3fbf1b0101jbxz.html Apache Jakarta Commons项目非常有用.我曾在许多不同的项目上或直接或 ...

  10. SSH项目(struts+spring+hibernate)搭建_代码简化

    在上篇讲到SSH框架的搭建后,为了有利于随时能熟练的把一个SSH的项目快速的搭建起来,我又进一步对其了解学习,对代码进行了简化,大家相互讨论学习. 为什么要简化:  如果要做一个大项目,假设项目的ac ...