河南科技大学
综合
践
报 实 告
综合实践任务书
(指导教师填写)
课程名称 自动化综合实践 学生姓名 专业班级
设计题目 基于STM32的信息显示设计
一、综合实践目的
1. 培养学生文献检索的能力,如何利用Internet检索需要的文献资料。 2. 培养学生综合分析问题、发现问题和解决问题的能力。 3. 培养学生综合运用知识的能力和工程设计的能力。 4. 提高毕业班学生理论联系实际的能力。 5. 提高学生设计报告撰写水平。 二、设计内容、技术条件和要求 1设计内容
以STM32为主机,设计一个信息显示系统,需要显示功能如下: (1)显示人员姓名,三个字用三种不同的颜色显示; (2)使用大字体显示; (3)显示该人员的照片;
(4)通过按键进行人员信息切换。 2 设计要求
设计STM32的最小系统; 启动系统的按键电路设计。
绘制实现本设计内容的硬件电路(原理图),系统的组成框图。 编写本综合实践内容的软件设计(包含程序流程图和对程序注释)。 硬件实验部分可选用实验箱测试或仿真软件实现。 三 时间进度安排
按教学计划规定,综合实践课程的总学时为2周,其进度安排和时间大致分配如下:
1. 十七周周一至周三 查阅资料、进行软、硬件初步设计; 2. 十七周周四至周五 具体实现软硬件的设计功能;
3. 十八周周一至周三 完善系统设计,调试、测试,形成完整的系统。 4. 十八周周四至周五 总结设计过程,编写综合实践报告书,并答辩。 四 主要参考文献
[1] 梁新元. 嵌入式系统开发. 电子工业出版社,2009 [2] 陈振林. 嵌入式硬件设计. 中国电力出版社,2007
[3] STM32嵌入式微控制器快速上手. 电子工业出版社,2012
[4] 陈启军. 嵌入式系统及其应用:基于Cortex-M3内核和STM32F103系列微控
制器的系统设计与开发. 同济大学出版社,2014 五、设计分组及选题安排
自动化122班全体学生,自动化123班部分生。
指导教师签字:
2015年12月20日
自动化综合实践报告
目录
1 设计项目简介 1.1 系统功能描述
1.2 目前该项目的类似产品的情况简介 1.3 项目本身的特色
2 总体设计
2.1 总体方案设计框图
3 硬件设计
3.1 主控芯片选型
3.1.1 STM32F103X系列处理器简介3.1.2 功能介绍
3.1.3 STM32电路图 3.1.4 JTAG/SWD 3.2 LCD显示屏
3.2.1 LCD显示屏电路
3.2.2 数据与显存对应关系图 3.3 按键电路图
4 软件设计
4.1 LCD显示系统程序框图 4.2 按键程序框图
5 程序清单
5.1 STM32启动程序 5.2 LCD程序 5.3 按键相关程序
6 收获及体会
参考文献
1
1 设计项目简介
1.1 系统功能描述
以STM32为主机,设计一个信息显示系统,系统可以显示人员姓名,三个字用三种不同的颜色,并且可以使用大字体显示;此外,还应该具有显示该人员的照片,并通过按键进行人员信息切换的功能。
1.2 目前该项目的类似产品的情况简介
本次所参加的设计项目,其目的是培养学生文献检索的能力,如何利用Internet检索需要的文献资料;培养学生综合分析问题、发现问题和综合运用知识解决问题的能力,以期能提高毕业班学生理论联系实际的能力,提高学生设计报告撰写水平。
本次项目实习不具备任何创新点,关于该技术,在商业上已经运用的十分成熟,移动电话就是其中一个非常普遍的例子。
1.3 项目本身的特色
本次设计项目实习的特色点在于可以将本学期学习的嵌入式课程,通过亲自动手实践,加深了对学习的知识的了解,培养了理论联系实践的能力。此外,通过本次亲自动手编写程序,加深了对嵌入式的认识,简要学习了STM32的相关知识。另外,本次程序编写主要使用模块化编程,对于老师所讲的模块化编程概念,让我觉得受益良多。通过本次实习,也让我明白了LCD显示屏的发光原理,并且明白了分辨率的概念。
2 总体设计
2.1 总体方案设计框图
电源 LCD屏 按键 STM32
3 硬件设计
3.1 主控芯片选型
对于微处理器,作为大学生,我们常见并且比较熟悉的当然是51单片机,但是51单片机功能单一,难以胜任较复杂系统的主控芯片。当需要处理比较复杂的系统的时候,当前较为流行,应用最普遍的应该是ARM架构的相关嵌入式处理器。
ARM是Advanced RISC Machines的缩写,ARM,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。该公司的特点是只设计芯片,而不生产。它提供ARM技术知识产权(IP)核,将技术
2
授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。在ARM的相关系列产品中,除了一些Unix图形工作站外,大多数ARM核心的处理器都使用在嵌入领域。
到目前为止,基于ARM技术的微处理器应用约占据了32位嵌入式微处理器75%以上的市场份额。 全球80%的GSM/3G手机、99%的CDMA手机以及绝大多数PDA产品均采用ARM体系的嵌入式处理器。 “掌上计算”相关的所有领域皆为其所主宰。主要应用领域为:消费类电子,无线、图像应用开放平台、存储、自动化、智能卡、SIM卡等。
ARM处理器的三大特点:耗电少功能强、16位/32位双指令集、众多合作伙伴。ARM公司开发了很多系列的ARM处理器核,目前最新的系列是ARM11。 另外还有ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M系列内核,其性能优良,按内核架构的不同,意法半导体公司推出了满足不同领域、不同要求的32系列处理器。目前市面流通的型号有:基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB。增强型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZE,本项目选用STM32F103X系列处理器
3.1.1 STM32F103X系列处理器简介
STM32F103X系列处理器共有STM32F103XC、STM32F103XD、STM32F103XE三个类型,是32位基于ARM Cortex-M3架构的带512K字节闪存的增强型微控制器,内含11个定时器、 3个ADC 、 13个通信接口,最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz。
3.1.2 功能介绍
■ 内核: ARM 32位的Cortex™-M3 CPU
− 最高72MHz工作频率,在存储器的0等待周期访问1.25DMips/MHz(Dhrystone
2.1) − 单周期乘法和硬件除法 ■ 存储器 − 从256K至512K字节的闪存程序存储器 − 高达64K字节的SRAM − 带4个片选的静态存储器控制器。支持CF卡、SRAM、 PSRAM、 NOR,NAND存储器
− 并行LCD接口,兼容8080/6800模式 ■ 时钟、复位和电源管理 − 2.0~3.6伏供电和I/O引脚 − 上电/断电复位(POR/PDR)、可编程电压监测器(PVD) − 4~16MHz晶体振荡器 − 内嵌经出厂调校的8MHz的RC振荡器
3
− 内嵌带校准的40kHz的RC振荡器 − 带校准功能的32kHz RTC振荡器 ■ 低功耗 − 睡眠、停机和待机模式 − VBAT为RTC和后备寄存器供电
■ 3个12位模数转换器, 1μs转换时间(多达21个输入通道) − 转换范围: 0至3.6V − 三倍采样和保持功能 − 温度传感器
■ 2 通道 12 位 D/A 转换器 ■ DMA: 12 通道 DMA 控制器 − 支持的外设:定时器、 ADC、 DAC、 SDIO、I2S、 SPI、 I2C和USART ■ 调试模式 − 串行单线调试(SWD)和JTAG接口 − Cortex-M3内嵌跟踪模块(ETM) ■ 多达112个快速I/O端口 − 51/80/112个多功能双向的I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号
■ 多达11个定时器 − 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的 通道和增量编码器输入 − 2个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器 − 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器: 24位自减型计数器 − 2个16位基本定时器用于驱动DAC ■ 多达13个通信接口 − 多达2个I2C接口(支持SMBus/PMBus) − 多达5个USART接口(支持ISO7816, LIN,IrDA接口和调制解调控制) − 多达3个SPI接口(18M位/秒), 2个可复用为I2S接口 − CAN接口(2.0B 主动) − USB 2.0全速接口 − SDIO接口
3.1.3 STM32电路图
4
主控芯片部分电路图
3.1.4 JTAG/SWD
STM32 开发板板载的标准 20 针 JTAG/SWD 接口电路如图所示:
JTAG/SWD 接口
3.2 LCD显示屏
3.2.1 LCD显示屏电路
5
3.2.2 数据与显存对应关系图
ILI9341液晶控制器自带显存,其显存总大小为 172820( 240*320*18/8),即 18 位模式( 26万色)下的显存量。模块的 16 位数据线与显寸的对应关系为 565 方式,如下图所示:
16位数据与显存对应关系图
最低 5 位代表蓝色,中间 6 位为绿色,最高 5 位为红色。数值越大,表示该颜色越深。
3.3 按键电路图
6
4 软件设计
4.1 LCD显示系统程序框图
开始 I/O初始化 设置FSMC模式 初始化LCD 设置字体颜色和背景色 设置坐标 写入显示内容 显示 结束 7
4.2 按键程序框图
开始
按键初始化 按键检测
N 是否有按
键按下?
Y
N 是否为按键1?
Y
图片1 图片2 返回数值 8
5 程序清单
5.1 LCD程序 5.1.1 主函数
#include \"includes.h\"
void Delay(u32 i);
/**************************************************** 函数名: 形参: 返回值: 函数功能:
****************************************************/ int main(void) {
SysTickConfig();//滴答时钟初始化, 获取比较准确的时间 // UART1_Init();//串口1初始化 LCD_Init();//LCD屏进行初始化
Draw_Text_8_16_Str(20,50,WHITE,RED,hz_index);//在屏幕上打印汉字 Draw_Text_8_16_Str(60,70,RED,WHITE,\"Welcome STM32\");//在屏幕上打印字符
// Paint_Bmp(0,0,240,320,car); Paint_Bmp(0,0,240,320,wen); while(1); }
/**************************************************** 函数名: 形参: 返回值: 函数功能:
****************************************************/ void Delay(u32 i) {
for(;i>0;i--); }
5.1.2 LCD配置程序 #include \"includes.h\" //管理LCD重要参数 //默认为竖屏 _lcd_dev lcddev;
//写寄存器函数 //regval:寄存器值
9
void LCD_WR_REG(u16 regval) {
LCD->LCD_REG=regval;//写入要写的寄存器序号 }
//写LCD数据 //data:要写入的值
void LCD_WR_DATA(u16 data) { LCD->LCD_RAM=data; }
//读LCD数据 //返回值:读到的值
u16 LCD_RD_DATA(void) { return LCD->LCD_RAM; } //写寄存器
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue) {
LCD->LCD_REG = LCD_Reg; //写入要写的寄存器序号 LCD->LCD_RAM = LCD_RegValue;//写入数据 } //读寄存器
//LCD_Reg:寄存器地址 //返回值:读到的数据
u16 LCD_ReadReg(u8 LCD_Reg) { LCD_WR_REG(LCD_Reg); //写入要读的寄存器序号 Delay_us(5);
return LCD_RD_DATA(); //返回读到的值 }
//开始写GRAM
void LCD_WriteRAM_Prepare(void) {
LCD->LCD_REG=lcddev.wramcmd; }
//LCD写GRAM //RGB_Code:颜色值
void LCD_WriteRAM(u16 RGB_Code) {
LCD->LCD_RAM = RGB_Code;//写十六位GRAM }
10
相关参数设置:
void LCD_Init(void) {LCD_GPIO_Config(); LCD_FSMC_Config();
LCD_init_RGB(); //驱动芯片初始化 /* 开背光 */
LCD_DisplayOn();
LCD_Display_Dir(0); //默认为竖屏 LCD_Clear(BLUE); }
设置坐标: //Xpos:横坐标 //Ypos:纵坐标
void LCD_SetCursor(u16 Xpos, u16 Ypos) {
if(lcddev.id==0X9341) { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8); LCD_WR_DATA(Xpos&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF); } }
屏幕色点设置: /画点 //x,y:坐标
//POINT_COLOR:此点的颜色
void LCD_DrawPoint(u16 x,u16 y,u16 c) {
LCD_SetCursor(x,y); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM LCD->LCD_RAM=c; }
void LCD_DisplayOn(void)//开显示 {
/* 开背光 */
GPIO_SetBits(GPIOB, GPIO_Pin_0); }
void LCD_DisplayOff(void)//关显示
11
{
/*关背光 */
GPIO_ResetBits(GPIOB, GPIO_Pin_0); }
5.2 按键相关程序 #include \"includes.h\"
static void Delay(u32 time) {
while(time--); }
void Key_Config(void) {
GPIO_InitTypeDef GPIO_InitStruct; //打开时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2; GPIO_Init(GPIOE,&GPIO_InitStruct); }
u8 Get_Key(void) {
if(KEY1() == 0 || KEY2() == 0) { //消抖 Delay(50000); if(KEY1() == 0 || KEY2() == 0) { if(KEY1() == 0) { //松手检测 while(KEY1() == 0); return 1; } if(KEY2() == 0) { //松手检测 while(KEY2() == 0); return 2; }
12
|
} }
return 0; }
6 收获及体会
通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充。通过亲自动手操作,更加直观的让自己简单了解了嵌入式开发的基础知识。虽然课程设计只有仅仅四天的时间,可是经过老师的细致耐心讲解,让我对STM32有了一个初步的认识,并且给我留下了在进行产品开发过程中,使用模块化编程的好处,增加了自己对微电子方向的兴趣。总之,这次课程设计使我收获很多、学会很多、比以往更有耐心很多。感谢学校及老师给我们这次课程设计的机会,最真挚的感谢我们的辅导老师,在设计过程中,老师精心的辅导和不厌其烦地的态度才使得我们以顺利的完成这次设计,他那无私的奉献的精神照耀着我们对学习的热爱,同时也增加我们对知识的追求和欲望度。
参考文献:
【1】梁新元. 嵌入式系统开发. 电子工业出版社,2009 【2】陈振林. 嵌入式硬件设计. 中国电力出版社,2007
【3】STM32嵌入式微控制器快速上手. 电子工业出版社,2012 【4】陈启军. 嵌入式系统及其应用:基于Cortex-M3内核和STM32F103系列微控制器的系统设计与开发. 同济大学出版社,2014
【5】STM8 32选型手册
【6】STM32技术参考手册中文
13
因篇幅问题不能全部显示,请点此查看更多更全内容