stm32课程设计

stm32课程设计
stm32课程设计

/*

三个坐标系统的转换:

触摸屏:

column 240

x

_ _ _ _ _ _

^ |

| |

| |

| |

| |

| | 320

| |

| |

| |

| |

| |

| |

(0,0) - - - - - -> y

液晶显示字体及清屏等函数:

column 240

x (0,0) ----------->

| |

| |

| |

| |

| |

| | 320

| |

| |

| |

| |

| |

| |

V- - - - - -

y

液晶显示图像:

column 240

X

-----------A

| |

| |

| |

| |

| |

| | 320

| |

| |

| |

| |

| |

| |

Y <- - - - - -(0,0)

转换关系:

Y字 = 320 - X触摸

X字 = Y触摸

X图像 = X触摸

Y图像 = 240-Y触摸

Y图像 = 240 - X字

X图像 = 320 - Y字

*/

图像和字在屏幕的放置有一个方向相反。

“LCD触摸屏控制七彩呼吸灯”部分程序:

#include "stm32f10x.h"

#include "bsp_usart1.h"

#include "bsp_ili9341_lcd.h"

#include "bsp_sdfs_app.h"

#include "bsp_bmp.h"

#include "bsp_SysTick.h"

#include "bsp_touch.h"

#include "bsp_spi_flash.h"

#include "bsp_led.h"

#include "even_process.h"

#include "bsp_breathing.h //被调用的H文件的包含.呼吸灯头文件int main(void)

{

uint8_t k;

/* 初始化LCD */

LCD_Init();

LCD_Clear(0, 0, 240, 320, BACKGROUND); //清屏

/* 初始化sd卡文件系统,因为汉字的字库放在了sd卡里面 */

Sd_fs_init();

/* 系统定时器 1us 定时初始化 */

SysTick_Init();

/* 初始化LED */

LED_GPIO_Config();

/* 初始化外部FLASH */

SPI_FLASH_Init(); //PA4/5/6/7

/* 触摸屏IO和中断初始化 */

Touch_Init(); //LCD触摸屏的配置用到模拟FLASH

PE0/2/3/4, PD13

#if 1

SPI_FLASH_BufferRead(&cal_flag, 0, 1);

if(cal_flag == 0x55 )

{

SPI_FLASH_BufferRead((void*)cal_p, 1, sizeof(cal_p));

SPI_FLASH_CS_HIGH();

for( k=0; k<6; k++ )

printf("\r\n rx = %LF \r\n",cal_p[k]);

}

else

{

/* 等待触摸屏校正完毕 */

while(Touch_Calibrate() !=0);

}

#elif 0

/* 等待触摸屏校正完毕 */

while(Touch_Calibrate() !=0);

#endif

/* 显示LED控制界面图片 */

Lcd_show_bmp(100, 30,"/led/ui_window.bmp");//图像和字形坐标配置有一个方向相反

Lcd_show_bmp(38, 184,"/led/ui_rb_button.bmp");

Lcd_show_bmp(38, 95,"/led/ui_gb_button.bmp"); //显示关状态按钮

Lcd_show_bmp(38, 11,"/led/ui_yb_button.bmp");

TIM3_Breathing_Init();

while(1)

{

even_process();//灯的配置及变色

}

}

voideven_process(void)

{

//char lcd_char[20];

switch(even)

{

case E_BUTTON1: //LED3

if(red_button == S_OFF) //原来为关状态

{

Lcd_show_bmp(38, 184,"/led/ui_r_button.bmp");

//显示开状态按钮

red_button = S_ON;

//更新状态标志

}

else //原来为开状态

{

Lcd_show_bmp(38, 184,"/led/ui_rb_button.bmp");

//显示关状态按钮

red_button = S_OFF;

//更新状态标志

}

LED1_TOGGLE; //LED状态反转

even = E_NULL;

break;

case E_BUTTON2: //LED1

if(green_button == S_OFF) //原来为关状态

{

Lcd_show_bmp(38, 95,"/led/ui_g_button.bmp");

//显示开状态按钮

green_button = S_ON;

//更新状态标志

}

else //原来为开状态

{

Lcd_show_bmp(38, 95,"/led/ui_gb_button.bmp");

//显示关状态按钮

green_button = S_OFF;

//更新状态标志

}

LED2_TOGGLE;

even = E_NULL;

break;

case E_BUTTON3: //LED2

if(blue_button == S_OFF) //原来为关状态

{

Lcd_show_bmp(38, 11,"/led/ui_y_button.bmp");

//显示开状态按钮

blue_button = S_ON;

//更新状态标志

}

else //原来为开状态

{

Lcd_show_bmp(38, 11,"/led/ui_yb_button.bmp");

//显示关状态按钮

blue_button = S_OFF;

//更新状态标志

}

LED3_TOGGLE;

even = E_NULL;

break;

case E_GETCHAR: //串口接收到数据if(recv_char == 0) //刚上电时

{

Lcd_GramScan( 2 );

LCD_DispEnCh(140,20,"七彩呼吸灯",RED);

}

even = E_NULL;

break;

default:

break;

}

}

/**

* @brief touch_process中断服务函数,根据触摸位置更新触摸标志

* @param 无

* @retval 无

*/

voidtouch_process(void)

{

if(touch_flag == 1)

/*如果按下了*/

{

if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE) ///* 获取点的坐标 */

{

printf("\r\n x=%d,y=%d",display.x,display.y);

if(display.x>=34 &&display.x<=76) //

控制条的范围

{

if(display.y>=15 &&display.y<=46) // LED1

{

even = E_BUTTON1; //根据even随按压处电压

的改变给even重新赋值,使得while(1)中的函数持续运行。

printf("\r\n LED1");

}

else if(display.y>=100 &&display.y<=135) //

LED2

{

even = E_BUTTON2;

printf("\r\n LED2");

}

else if(display.y>=182 &&display.y<=216) //

LED3

{

even = E_BUTTON3;

printf("\r\n LED3");

}

}

}

}

}

触屏按压外部中断函数:

void EXTI4_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line4) != RESET)

{

touch_flag=1;//静态变量

touch_process();//触摸控制

EXTI_ClearITPendingBit(EXTI_Line4);//清除标志位

}

}

实验中用到外部中断EXTI4_IRQHandler实现触摸屏更新标志位,使得,WHILE

里的函数持续运行,做到一有按键按下就触发外部中断,随时进入SWITCH语句case执行。呼吸灯由定时器控制模仿实现,配合3个触屏按键的导通关断使能

七彩灯的某一个部分显示不同颜色。比如123,23,13,12,1,2,3七种。

TIM3_Breathing_Init();//定时器通道3——对应七彩灯的PB0。改变分频可以调整亮的频率

如:TIM_TimeBaseStructure.TIM_Prescaler = 5000; 0不分频,72MHZ灯闪烁很快,不会有呼吸的效果。经过调整,觉得5000比较合适,此值可以适当调整。设计中也可以调整此处得到警车,医务车的循环闪烁的效果(Prescaler = 40000)。

//设置预分频,此处最大值为2^16-1=65535

/* 呼吸灯的40个亮度等级*/

uint8_t indexWave[] = {1,1,2,2,3,4,6,8,10,14,19,25,33,44,59,80, 107,143,191,255,255,191,143,107,80,59,44,33,25,19,14,10,8,6,4,3,2

,2,1,1};

想法:利用七彩灯在3个按键的不同序列按压下会有固定的不同颜色(即不同序列的导通会使七彩灯有颜色的变化),以及利用呼吸灯在特定颜色(PB0产生绿色)下可以有由暗到亮,由亮到暗的性质,做出七彩呼吸灯。在家中壁灯,夜色咖啡厅,玩具等有一定的发展前景。

STM32嵌入式系统实验报告模板

实验一使用固件函数库创建库函数模板 一、实验目的 1. 熟悉STM32的开发环境MDK Keil和仿真软件Proteus 2. 熟悉STM32的固件库函数文件夹 3. 掌握STM32固件库的使用方法 二、实验内容 1.开发自己的固件库函数模板 三、预备知识 掌握基于STM32固件库进行编程的方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:嵌入式开发平台,USB转串口数据线; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:Keil μVision5 IDE; 五、实验过程 1.创建本地文件夹和软件中的文件夹 2. 对软件中的文件夹进行配置

3.软件设计及代码(写一个简单的main函数)

六、遇到的问题及解决方法

实验二使用STM32固件库点亮LED灯 一、实验目的 1. 掌握STM32固件库的使用方法 2. 掌握基于库函数模板的开发方法 3. 掌握基于固件库进行GPIO端口编程的方法 二、实验内容 1. 使用Proteus软件设计点亮LED灯电路 2. 基于固件库进行编程 3. 基于固件库编程控制GPIO端口的输出,进而控制LED灯的显示状态 三、预备知识 掌握基于STM32固件库进行编程的方法;掌握Proteus软件的使用方法;掌握GPIO端口的组成、工作方式、编程方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:嵌入式开发平台,USB转串口数据线; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:Keil μVision5 IDE; 五、实验过程 1.LED灯电路设计 2. GPIO初始化过程

STM32 实验2报告

实验2 MINI STM32按键控制LED灯实验 一、实验目的 1、掌握嵌入式程序设计流程。 2、熟悉STM32固件库的基本使用。 二、实验内容 1、编程使用I/O口作为输入,控制板载的两个LED 灯。 2、使用固件库编程。 三、实验设备 硬件:PC机一台 MINI STM32开发板一套 软件:RVMDK V3.8 一套 Windows XP 一套 四、实验步骤 1、设计工程,使用固件库来编程设置。 1.1、在这里我们建立一个文件夹为: STM32-Projects. 点击Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹STM32-Projecst 之下,在这个目录下面建立子文件夹shiyan1, 然后定位到shiyan1目录下面,我们的工程文件就都保存到shiyan1 文件夹下面。工程命名为shiyan1, 点击保存. 1.2、这里我们定位到STMicroelectronics 下面的STM32F103RB( 针对我们的mini 板子是这个型号。

1.3、弹出对话框“Copy STM32 Startup Code to project ….”,询问是否添加启动代码到我们的工程中,这里我们选择“否”,因为我们使用的ST固件库文件已经包含了启动文件。 1.4、接下来,我们在Template 工程目录下面,新建3 个文件夹CORE, USER, STM32F10x_FWLib 。USER 用来放我们主函数文件main.c, 以及其他包括 system_stm32f10x.c 等等,CORE 用来存放启动文件等,STM32F10x_FWLib 文件夹顾名思义用来存放ST官方提供的库函数源码文件. 1.5、.打开官方固件库包,定位到我们之前准备好的固件库包的目录。 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目录下面的src,inc 文件夹copy 到我们刚才建立的STM32F10x_FWLib 文件夹下面。 1.6、我们将文件加入我们的工程中去。右键点击Target1,选择Manage Components

基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告

基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设 计报告 NORTH CHINA UNIVERSITY OF SCIENCE AND TECHNOLOGY 嵌入式系统课程设计报告 学生姓名: 学号: 学院: 专业班级: 指导教师: 同组成员: 2016年 12 月 26 日 嵌入式系统课程设计报告 一、课程设计目的 本课程设计是在《嵌入式系统原理与应用》课程的基础上,通过软件编程及仿真调试的实践,进一步掌握嵌入式系统的原理和应用方法,是毕业设计前的一 次重要实践,为今后从事嵌入式系统相关工作岗位打下良好的基础。 二、设计题目及要求 2.1 设计题目: 基于STM32和uC/OS-II的多任务设计 2.2 功能实现:

使用uC/OS-II的任务管理函数和STM32库函数控制相应的寄存器,完成一个多任务设计。整个设计共有4个任务,驱动一个LED指示灯闪烁、由3个LED指示灯组成的流水灯、驱动蜂鸣器和利用swd方式进行printf输出。 2.3 设计要求: 理解和熟练使用KEIL软件、STM32寄存器、STM32库函数和uC/OS-II任务管理函数,用KEIL软件完成编程和调试,下载到开发板中实现4个设定的任务,并完成课程设计报告。 四个任务分别为: (1)驱动1个LED指示灯闪烁、 (2)由3个LED指示灯组成流水灯 (3)驱动蜂鸣器发出响声。 (4)利用swd方式进行printf输出。 三、设计原理说明 3.1 硬件说明 本次课程设计主要使用的是STM32 神舟 IV 号开发板为基础进行课程设计的,本节将详细介绍神舟IV号开发板的各部分硬件原理与实现。 (1)开发板资源图 - 1 - 嵌入式系统课程设计报告

stm32课程设计报告

利用TIM定时器的中断和定时功能实现跑马灯 一、原理及目的 1、学习stm32库开发 2、理解和熟悉I/O的使用; 3、进一步掌握定时器、中断处理程序的编程方法 4、利用库函数开发实现跑马灯 二、电路原理图 三、流程图 四、软件算法(代码) 1、Main.c #include "stm32f10x.h" #include "bsp_led.h" #include "bsp_TiMbase.h" volatile u32 time = 0; int i=0;

int main(void) { LED_GPIO_Config(); TIM2_Configuration(); TIM2_NVIC_Configuration(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); while(1) { if ( time == 1000 ) { time = 0; i++; if(i>=3) i=0; switch(i) { case 0: LED1(OFF);LED2(OFF);LED3(ON);break; case 1: LED1(ON);LED2(OFF);LED3(OFF);break; case 2: LED1(OFF);LED2(ON);LED3(OFF);break; } } }} 2、led.c #include "bsp_led.h" void LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GP IO_Pin = GPIO_Pin_4|GPIO_Pin_3; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3); } 3、led.h #ifndef __LED_H #define __LED_H #include "stm32f10x.h" #define ON 0

基于STM32的嵌入式系统应用设计》课程实验报告

《基于STM32的嵌入式系统应用设计》课程实验报告 班级:电信工程15-01班 学号:5415230301 姓名: 指导老师: 成绩

实验一流水灯和按键实验 一、目的与任务 目的:掌握STM32开发环境,掌握从无到有的构建工程,学会GPIO基本操作。 任务:编写代码下载到目标板,观察效果。如未达到理想效果,检查和修改代码,再次编译下载直到成功。记录实验过程,完成实验报告。 二、内容、要求与安排方式 1、实验内容与要求: 1)熟悉MDK KEIL开发环境,构建基于HAL库的工程。 2)编写代码实现流水灯工程,按键后能改变流水灯速度。 3)通过ISP下载代码到实验板,查看运行结果。 4)使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。 2、实验安排方式:采用1人1组,上机编程在STM32实验板上实验。 三、实验设备 1、所用设备:PC计算机(宿主机)、STM32实验板、JLINK。 2.消耗性器材:无。 四、实验过程 五、程序清单 #include "system.h" #include "SysTick.h" #include "led.h" #include "key.h" int main()

{ u8 key; SysTick_Init(72); LED_Init(); KEY_Init(); while(1) { static u8 j=1000; key=KEY_Scan(0); //é¨?è°′?ü switch(key) { case KEY_UP: j=j-100;break; //°′??K_UP°′?ü μ?ááD2??ê?μ? case KEY_DOWN: j=j+100;break; //°′??K_DOWN°′?ü?¨?eD2??ê?μ? } switch(j) { case(0):j=2000;break; case(2000):j=100;break; } led1=0; led2=1;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //1áá delay_ms(j); led1=1; led2=0;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //2áá delay_ms(j); led1=1; led2=1;led3=0; led4=1; led5=1; led6=1;led7=1;led8=1; //3áá delay_ms(j);

单片机STM32实验报告

实验报告 课程名称:单片微机原理与车载系统 学生姓名蒋昭立 班级电科1601 学号16401700119 指导教师易吉良 成绩 2018年12月17日

实验1 GPIO实验 1.1 实验目的 1)熟悉MDK开发环境; 2)掌握STM32单片机的GPIO使用方法。 1.2 实验设备 1)一台装有Keil和串口调试软件的计算机; 2)一套STM32F103开发板; 3)STlink硬件仿真器。 1.3基本实验内容 1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下: 从图片可以看出,例程运行成功,没有错误。 2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。 理解连续按概念及其实现代码。参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。 寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。

STM32 MDK实验报告

姓名:楚昕班级:轨道1502班学号:201523050224 1.实验目的 知道如何建立一个程序。 2.图

3.实验步骤 (1)建立一个文件夹为Template (2)点击MDK的菜单:Project–>New Uvision Project,然后将目录定位到刚才建立的文 件夹Template之下,在这个目录下面建立子文件夹USER (3)出现一个选择CPU的界面,就是选择我们的芯片型号 (4)在Template工程目录下面,新建3个文件夹CORE,OBJ以及STM32F10x_FWLib (5)将固件库包里面相关的启动文件复制到我们的工程目录CORE之下 (6)定位到目录: STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面将里面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的USER 目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的4个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER 目录下面。 (7)右键点击Target1,选择Manage Project Items,将需要的固件库相关文件复制到了我们 的工程目录下面 (8)往Group里面添加我们需要的文件 (9)编译工程,点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”, 然后选择目录为我们上面新建的OBJ目录 4.总结 (1)Template.uvprojx是工程文件,非常关键,不能轻易删除。Listings和Objects文件夹是 MDK自动生成的文件夹,用于存放编译过程产生的中间文件。新建一个OBJ文件夹,用来存放编译中间文件。 (2)STM32F10x_FWLib。CORE用来存放核心文件和启动文件,OBJ是用来存放编译过程文 件以及hex文件,STM32F10x_FWLib文件夹用来存放ST官方提供的库函数源码文件。 (3)src存放的是固件库的.c文件,inc存放的是对应的.h文件 (4)添加startup_stm32f10x_hd.s启动文件的时候,你需要选择文件类型为All files才能看 得到这个文件 (5)keil只会在一级目录查找,如果目录下面还有子目录,path一定要定位到最后一级子目 录 (6)

STM32实验报告分析

实验一:一个灯的闪烁 一、实验要求 1.熟悉使用STM32F103ZET6开发板 2.利用C语言程序实现一个灯闪烁 二、电路原理图 图1-1 LED灯硬件连接图 三、软件分析 1.本实验用到以下3个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init(); 2.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA 3.声明GPIO结构: PF6~PF10口配置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; 4.应用GPIO口:点亮LED1有五种方法 ①ODR寄存器法:GPIOA->ODR=0xffbf; ②位设置/清除寄存器法:GPIOA->BRR|=0X001; ③方法③只适用于GPIOx_BSRR寄存器 ④GPIO_WriteBit()函数法:GPIO_Write(0xffbf); ⑤置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8); 5.主函数程序: int main(void) { RCC_Configuration(); /* 配置系统时钟 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xfeff; /* PF8=0 --> 点亮D3 */ Delay(600000); GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */ Delay(600000); } } 四、实验现象 下载程序后开发板上的LED1灯闪烁

STM32实验报告

STM32实验报告

实验一搭建实验环境 一.实验简介 搭建嵌入式系统开发环境,建立第一个工程,流水灯实验 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程。通过ISP下载代码到实验板,查看运行结果。下载代码到目标板,查看运行结果。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程 6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.记录实验过程,撰写实验报告

六.实验结果及测试七.实验总结

实验二按键实验(查询方式) 一.实验简介 在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。 二.实验目的 熟练使用库函数操作GPIO,掌握利用查询方式控制按键的程序编写方法。 三.实验内容 实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1在实验一代码的基础上,编写按键控制部分代码 2编写完成主程序 4编译代码,下载到实验板 5.单步调试 6记录实验过程,撰写实验报告 六.实验结果及测试 七.实验总结

STM32实验报告

嵌入式系统课程设计实验报告题目基于STM32的LCD数字钟显示 姓名刘意 学号 2012221105200045 ___ 专业年级 12电科 指导教师卢仕 2015年 6 月 30日

1.实验名称: 基于STM32的LCD数字钟显示 2.实验目的与要求: (1)掌握嵌入式程序设计流程。熟悉并掌握软件的开发,如GPIO的端口配置,FSMC的编程,RA8875初始化等等。 (2)学习LCD与STM32的LCD的控制器的接口原理,掌握内置LCD 控制器驱动编写方法。 (3)编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来。 3.实验设备及原理: 硬件:PC机一台 STM32开发板一套 软件:keil4 原理:LCD显示器是通过给不同的液晶单元供电,控制其光线的 通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对 每个液晶单元通断电的控制,每个液晶单元都对应着一个电极, 对其通电,便可使用光线通过。本次实验使用RA8875驱动LCD, 采用FSMC模式向RA8875发送指令,读取状态和数据。通过程 序代码实现对TFTLCD的控制器RA8875驱动要求,从而达到TFT LCD 数字钟的显示。 4.实验步骤及内容: 1.新建工程文件夹szz,并建立4个子文件夹,并复制粘贴库文件和驱动文件。

2.打开keil4,新建工程。工程名为szz.芯片选取STM3210F103VC。 3.完成基础设置

4. 添加LCD.H和LCD.C两个文件,并加入工程中,编写LCD.H文件. LCD.H: #ifndef __GLCD_H #define __GLCD_H #include "stm32f10x.h" /* LCD color */颜色定义

STM32处理器基本接口实验报告

STM32处理器基本接口应用 实验一. MDK集成开发环境练习 一.实验要求 了解MDK集成开发环境的使用方法。 二.实验内容 1.建立一个新的工程; 2.建立一个C源文件,并添加到工程中; 3.设置编译连接控制选项; 4.编译连接工程。 三.实验步骤 四、实验程序 实验二. 通用I/O端口 一.实验要求 熟悉STM32F10x处理器的I/O口的基本输出功能。 二.实验内容 开发板上有4个发光二极管LED1、LED2、LED3和LED4,使它们有规律地点亮,具体顺序如下:LED1亮——> LED2亮——> LED3亮——> LED4亮,如此反复。 三.实验步骤 1.硬件连接:在评估板上,LED1、LED2、LED3、LED4分别于PC6、PC7、PC8、 PC9相连,如下图所示。 2.编写软件。 四.实验程序 实验三. 嵌套向量中断控制器 一.实验要求 熟悉STM32F10x处理器的嵌套向量中断控制器(NVIC)的使用。 二.实验内容 设计一个中断优先级抢占实例。设置3个中断:EXTI0、EXTI9和SysTick,在EXTI9的中断服务子程序中实现EXTI0和SysTick的优先级别的转换,使之分别出现在EXTI0中断时可以被SysTick抢占和不可以被SysTick抢占这两种状态。 三.实验步骤 1.硬件连接:在评估板上,按键KEY与PB9相连作为EXTI9,按键Wakeup与PA0 相连作为EXTI0;LED1、LED2、LED3、LED4分别与PC6、PC7、PC8、PC9相 连,用于显示不同的优先级抢占状态,如下图所示。 2.编写软件。 四.实验程序 实验四. 外部中断/事件控制器 一.实验要求 熟悉STM32F10x处理器的外部中断控制器的使用。

嵌入式课程设计报告stm32

嵌入式技术与应用 课程设计报告 题目STM32I2C固件库分析与应用学院 专业班级 姓名学号 指导教师 年月日 教师评语: 总分:教师签名:

目录 1 I2C接口 1.1介绍 1.2主要特点 1.3概述 1.4功能描述 1.4.1I2C从模式 1.4.2I2C主模式 1.4.3错误条件 1.4.4SDA/SCL线控制 1.4.5SMBus 1.4.6DMA请求 1.4.7包错误校验(PEC) 1.5 中断请求 1.6 内部集成电路(I2C) 1.6.1 I2C寄存器结构 1.6.2 I2C库函数 1.6. 2.1 函数I2C_DeInit . 1.6. 2.2 函数I2C_ Init 1.6. 2.3 函数I2C_ StructInit 1.6. 2.4 函数I2C_ Cmd 1.6. 2.5 函数I2C_ DMACmd 1.6. 2.6 函数I2C_ DMALastTransferCmd 1.6. 2.7 函数I2C_ GenerateSTART 1.6. 2.8 函数I2C_ GenerateSTOP 1.6. 2.9 函数I2C_ AcknowledgeConfig 1.6. 2.10 函数I2C_ OwnAddress2Config 1.6. 2.11 函数I2C_ DualAddressCmd 1.6. 2.12 函数I2C_ GeneralCallCmd 1.6. 2.13 函数I2C_ ITConfig 1.6. 2.14 函数I2C_ SendData 1.6. 2.15 函数I2C_ ReceiveData 1.6. 2.16 函数I2C_ Send7bitAddress 1.6. 2.17 函数I2C_ ReadRegister 1.6. 2.18 函数I2C_ SoftwareResetCmd 1.6. 2.19 函数I2C_ SMBusAlertConfig 1.6. 2.20 函数I2C_ TransmitPEC 1.6. 2.21 函数I2C_ PECPositionConfig 1.6. 2.22 函数I2C_ CalculatePEC 1.6. 2.23 函数I2C_ GetPEC 1.6. 2.24 函数I2C_ ARPCmd 1.6. 2.25 函数I2C_ StretchClockCmd 1.6. 2.26 函数I2C_ FastModeDutyCycleConfig 1.6. 2.27 函数I2C_ GetLastEvent 1.6. 2.29 函数I2C_ GetFlagStatus 1.6. 2.30 函数I2C_ ClearFlag 1.6. 2.31 函数I2C_ GetITStatus 1.6. 2.32 函数I2C_ ClearITPendingBi

STM32-ARM-综合实验报告(南京航空航天大学)

南京航空航天大学 研究生实验报告 项目名称:ARM嵌入式系统设计与应用技术 设计专题:综合实验二类:数据采集和显示系统 班级: 小组成员 (1)姓名:学号:学科:电话:Email:导师: (2)姓名:学号:学科:电话:Email:导师: (3)姓名:学号:学科:电话:Email:导师:

20XX年XX月XX日 一、本实验主要内容及要求 本次综合实验的主要内容是,利用ARM内部的A/D转换器进行数据采集和显示系统设计。实验要求如下: 1、采用STM32开发板上的12位A/D转换器(参考电压3.3V)采集电位器测 试点的电压值。电位器与A/D的输入通道14相连接。 2、当按下Key键之后任意旋转电位器,利用A/D转化器采样20组电压值(每 1ms采样一次,使用定时器TIM2计时),并在液晶屏幕上显示当前电压值,当再次按下Key键之后将20组电压值存入到FLASH中。 3、复位后按下Temper键将保存的20组电压值在液晶屏幕中央绘制出波形(要 求各点连接,每个点为5个像素,要有坐标系)。 1)横坐标为“1~20”,每个横坐标之间的间隔为8个像素点; 2)纵坐标为电压值“0V,1V,2V,3V,4V”,相邻坐标之间的为10个 像素点。 4、在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。可利用STM32 开发板的资源扩展其他自定义功能(如增加温度采集通道、当前采样频率显示和设置、采样率调节等)。 二、硬件框图 本次实验的硬件部分主要是计算机和STM32两个部分,对于计算机部分不

做过多的介绍,下面着重介绍STM32中的与本实验相关模块。 1.1 ADC模块 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。 STM32教学平台的电位器是信号是连接到STM32的PC4口的,PC4正好是A/D转换的通道14,STM32实验教学平台上也标注了ADC12_14(14通道),电位器硬件框图如图1所示,ADC硬件框图如图1所示。

基于stm32的嵌入式系统原理与设计实验报告 学位论文

XXXX学院 XX级嵌入式系统设计实验报告 班级: 指导老师: 学期: 小组成员: 姓名学号 组长 成员 成员

实验一我的第一个工程实验 一.实验简介 我的第一个工程,流水灯实验 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程。通过ISP下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。 四.实验设备 硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程 6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.使用JLINK下载到实验板 11.单步调试 12.记录实验过程,撰写实验报告

六.实验结果及测试七.实验总结

实验二带按键控制的流水灯实验 一.实验简介 在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。二.实验目的 熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。 三.实验内容 实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。 使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。四.实验设备 硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1在实验1代码的基础上,编写中断初始化代码 2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序 4编译代码,使用JLINK下载到实验板 5.单步调试 6记录实验过程,撰写实验报告

基于STM32自动洗衣机的课程设计报告

《嵌入式系统原理》课程设计报告 题目 学院(部) 专业 班级 学生姓名 学号 指导教师(签字)

目录 题目 (3) 摘要 (3) 关键字 (3) 设计要求 (3) 第一章系统概述 (3) 1总框图设计 (4) 2 实物图 (4) 第二章单元电路设计与分析 (5) 1显示部分 (5) 2 PWM输出部分 (7) 3按键控制部分 (8) 第三章主体代码 (12) 第四章结束语 (18)

全自动洗衣机控制程序设计 摘要:STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。本次使用的是STM32F103“增强型”系列。增强型系列时钟频率达到72MHz,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。工作原理:是通过改变输出方波的占空比使负载上的平均电流功率从0-100%变化,从而改变直流减速电机速度。利用脉宽调制(PWM)方式,实现调速,它的优点是电源的能量功率,能得到充分利用,电路的效率高。 关键字:占空比PWM输出控制STM32 电机人机交互 设计概述及基本要求 用单片机编程实现洗衣机的控制过程,要求: 1 具有进水洗涤脱水等功能。 2 程序可选择其中一个功能执行。 3 通过电机转动时间比例实现洗涤强度控制功能。 4 通过洗涤时间和冲洗次数实现标准和经济选择功能。 第一章系统概述 1.1 总框图设计 根据设计要求,我们把设计主要分为四个模块:显示模块,直流减速电机转动模块,操控模块,安全响应模块。 其原理图如下:

实物图: 系统简介: 显示部分 STM32F103 直流减速电机 操控部分 安全响应部分 P W M 输出 信号 按键信号 高优先信号 按键控制 遥控器控制 LED 灯辅助 LCD 屏幕显示

STM32实验报告

实验一搭建实验环境 一.实验简介 搭建嵌入式系统开发环境,建立第一个工程,流水灯实验 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程。通过ISP下载代码到实验板,查看运行结果。下载代码到目标板,查看运行结果。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程 6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.记录实验过程,撰写实验报告 六.实验结果及测试 七.实验总结

实验二按键实验(查询方式) 一.实验简介 在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。 二.实验目的 熟练使用库函数操作GPIO,掌握利用查询方式控制按键的程序编写方法。 三.实验内容 实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1在实验一代码的基础上,编写按键控制部分代码 2编写完成主程序 4编译代码,下载到实验板 5.单步调试 6记录实验过程,撰写实验报告 六.实验结果及测试 七.实验总结

实验三按键实验(中断方式) 一.实验简介 在实验一的基础上,使用按键控制流水灯。 二.实验目的 熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。 三.实验内容 实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。 下载代码到目标板,查看运行结果。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1在实验一代码的基础上,编写中断初始化代码 2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序 4编译代码,下载到实验板 5.单步调试 6记录实验过程,撰写实验报告 六.实验结果及测试

STM32课程设计贪吃蛇

STM32大作业报告 学生姓名: 学号: 所在院系:光电信息与计算机工程学院专业班级: 授课教师: 完成时间:2016年

前言 随着科学技术的不断进步,嵌入式近些年来逐渐兴起,其领域比较新,发展非常迅速,由于它属于新兴领域,接触的人并不是很多,但是嵌入式在各种电子设备上的应用越来越越广泛,并且各种电子设备也在朝着嵌入式微系统,智能化的方向前进。STM32系列是基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。作为21世纪的人才,为了与社会实际需要相衔接,提高我们的学习兴趣,利用STM32系列单片机进行了一次嵌入式系统设计。 摘要 在本次作业中采用STM32系列中的STM32F103RCT6微控制器芯片,采用ALIENTEK战舰STM32开发板,使用MiniSTM32开发板上的LCD 接口,来点亮TFTLCD,实现触摸屏功能。

一、课程设计任务要求 本次的课程设计目的是实现一个经典的贪吃蛇游戏,整个游戏实现功能分别为: 1、初始化程序。 2、随机红点、左转、右转、判断边框。 二、系统硬件设计 硬件设计原理图 根据此硬件设计图再结合软件设计就能做出此游戏。 三、系统软件实现 此次的课程设计在于开发个贪吃蛇游戏,其流程图如下图所示。

程序流程图 为方便介绍,此软件实现只给出主要程序部分: 1、本例程提供了硬件平台的初始化 GPIO是常规输入/输出端口,STM32F103RCT6有PA、PB、PC、PD、PE 共5个16位的GPIO。STM32的GPIO都可编程,具有很多复用功能。GPIO 可以配置为很多总模式,这些模式有:输入浮空、输入上拉、输入下拉、模拟输入、开漏输入、推挽输出、推挽复用、开漏复用。通过对GPIO寄存器编程,可以设置每个端口的工作模式。 24C02 EEPROM是开发板板载的2Kbit(256 个字节)EEPROM ,型号为:24C02,用于掉电数据保存。因为STM32 内部没有EEPROM,所开发板外扩了24C02,用于存储重要数据,用来做IIC 实验,该芯片直接挂在STM32 的IO 口上。 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA 和时钟SCL

嵌入式系统课程设计报告书

. 学 生 课 程 实 践 能 力 考 查 题目:温度按键设定、显示、报警系统设计 课程名称:嵌入式系统开发 专业班级: 学生学号: 学生姓名: 考查地点: 考查时长: 4小时 所属院部: 指导教师: 2017 — 2018学年 第 2 学期 金陵科技学院教务 成绩

2017-2018学年第2学期《嵌入式系统开发》实践能力考核班级姓名学号 课程名称嵌入式系统开发课程编号0806504151 授课时间2018年2月26日-- 2018年5月4日周学时 4 学分 2 简要评语 (从完成情况、是 否具备独立开发 能力、是否独立完 成、编程熟练程度 等角度评价。) 任课教师签名: 日期: 温度按键设定、显示、报警系统设计 要求: 1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。 2、通过按键可以设置环境温度的上限和下限, WK_UP键按下调节上限,再按下调节下限,再按下调节上限…… KEY1按下加1; KEY0按下减1, 根据上限和下限判断当前温度有没有超出范围。 3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警方式) 4、串口波特率一律用9600bps。 液晶显示的信息: STM32 test name: xxxxxxxxx Maximum is 32C,Minimum is 26 C The temperature is 29 C,now! (xxxxx是自己的名字拼音)

目录: 第一章.系统要求 1.1设计要求 1.2设计方案 第二章.硬件设计 2.1开发板原理图 2.2 DS18B20模块 2.3按键模块 2.4 LCD显示模块 2.5 LED 模块 第三章.软件设计 3.1程序流程图 3.2程序部分代码 3.2.1主函数、main.c 3.2.2 LED 函数led.c 3.2.3温度代码 s18b20.c 3.2.4键盘代码key.c 第四章.实物效果图 第五章.课程总结

嵌入式系统课程设计总结报告

嵌入式系统课程设计报告 课程名称:嵌入式系统课程设计 项目名称:基于ARM实现MP3音乐盒 专业:

一、设计内容 基本功能:预存四首歌曲,实现循环播放; 每个按键对应一首歌曲。 拓展功能:通过按键简单演奏音乐,类似钢琴; 实现两个模式的切换,切歌模式和音量加减模式。 二、设计思路 基础功能: 将音频数据存储在SD卡中,使用FATFS文件系统进行数据的读写,通过SPI2总线将数据传到内核。内核再将数据通过SPI1总线传送到音频解码模块VS1053,输入的数据(即比特流数据)被解码后送到DAC发出声音。 将音乐存储在SD卡内,通过文件的地址来判别将要播放哪一首音乐,通过地址的递增和循环来实现音乐的自动循环播放。按键对曲目的控制,可通过键盘扫描函数,判断哪一个键被按下,使键盘扫描函数返回不同的返回值,实现对文件地址的控制。将此返回值设置为全局变量,可实现在音乐播放中曲目的切换。 另外,我们还利用解码模块实现对音量的控制,使用按键控制音量的提高或降低。使用SPI1总线将TFT显示屏连接到内核,显示按键功能、当前曲目、当前模式等信息。 由于开发板只有5个按键,按键数量有限,需要对按键实现曲目切换和音量功能的复用。我们小组设置了两种模式,切歌模式和音量模式,并定义左键为模式切换键,实现不同模式的选择和按键的复用。 拓展功能: 基本思路是通过定时器中断来产生一定频率的50% 空占比的脉宽调制波,用此脉宽调制波激励扬声器,从而使扬声器发出一定频率的声音。 所以只要将不同按键的中断子程序设置为对定时器进行不同数据的配置,即可实现不同按键与不同扬声器发生频率的对应。 然后使一个按键的按下与松开均进入中断,且分别实现开启(扬声器发声)与关闭(扬声器不发声)定时器的功能,从而使课题的附加功能表现地更自然。 三、硬件配置 基础功能: (1)SD卡:存储音频数据

stm32f103电子琴课设报告 终极版(1)

单片机课程设计 题目:实现简易电子琴 院(系): 专业: 班级: 学生: 学号: 指导教师: 2016年6月26日

简易电子琴的设计与实现 摘要:本次设计是利用单片机设计简易电子琴。其主要功能为:按下不同按键,发出不同1 、2 、3、4 、5 、6 、7 七个音符并且用LED 或LCD显示当前按键。选用stm32f103VE,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。利用芯片内部相关定时器来输出PWM,从而来驱动蜂鸣器。通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。 关键词: STM32f103VE;蜂鸣器;定时器

The Design of the Keyboard Abstract:This design is the professional direction of biomedical engineering design. Using Single Chip Microcomputer to achieve a simple Keyboard. Its main function is: While a user press the different keys, it will make different sounds from the buzzer and display different numbers which corresponded to the sounds. Using stm32f103- -C8T6 as control chip. It has16-bit timers. Some of them with up to 4 IC/OC/PWM or pulse counter. Making use of the Timers to generate driving signal .By reading the state of the external key to change the frequency of output . Different frequency of the PWM will control buzzer makes different sounds. Key words: STM32f103; signal; Timer

相关文档
最新文档