STM32的数字示波器设计
示波器的设计分为硬件设计和软件设计两部分。示波器的控制核心采用ARM9,由于STM32芯片里有自带的AD,采样速率最高为500KSPS,分辨率为10位,供电电压为3.3V,基本上能满足本设计要求,显示部分用3.2寸TFTLCD(分辨率:320*240)模块。软件部分采用C语言进行设计,设计环境为Keil。
硬件总体结构
该设计采用模块化的设计方法,根据系统功能把整个系统分成不同的具有特定功能的模块,硬件整体框图如下图所示。
该示波器由4部分电路构成,分别是:
(1)输入程控放大衰减电路;
(2)极性转换电路;
(3)AD转换电路;
(4)显示控制电路;
(5)按键控制电路;
整体设计思路是:信号从探头输入,进入程控放大衰减电路进行放大衰减,程控放大器对电压大的信号进行衰减,对电压小信号进行放大以符合AD的测量范围,经过处理后信号进入极性转换电路进行
电平调整成0—3.3V电压,因为被测信号可能是交流信号,而AD只能测量正极性电信号,经调整后送入AD转换电器对信号进行采样,采样所得数据送入LCD显示,这样实现了波形的显示。按键控制可以通过不同的按键来控制波形的放大和缩小,同时也可以改变采样间隔,以测量更大频率范围的信号。
STM32处理器介绍
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。
本设计所用的STM32F103VCT6集成的片上功能如下:
(1) 1.2v内核供电,1.8V/2.5V/3.3/V存储器供电,3.3V外部I/O供电
(2)外部存储控制器
(3)(3) LCD 控制器
(4) 4通道DNA并有外部请求引脚
(5) 3通道UART
(6) 2通道SPI
(7) 1通道IIC总线接口1通道IIS总线接口
(8) AC’97编解码器接口
(9) 兼容SD主接口协议1.0版和MMC卡协议2.11兼容版
(10) 2通道USB主机1通道USB设备
(11) 4通道PWM定时器和1通道内部定时器/看门狗定时器
(12) 8通道10位ADC和触摸屏接口
(13) 80个通用I/O和24通道外部中断源
LCD显示介绍
LCD液晶显示器是Liquid Crystal Display的简称,LCD的构造是在两片平行的玻璃当中放置液态晶体,两片玻璃中间有许多垂直和水平的细小电线,通过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
LCD的主要技术参数有:
1.对比度 LCD制造时选用的控制IC、滤光片和定向膜等配件,与面板的对比度有关,对于一般用户而言,对比度能够达到350:1就足够了,但在专业领域这样的对比度还不能满足用户的要求。对比值定义是最大亮度值(全白)除以最小亮度值(全黑)的比值
2.亮度 LCD是一种介于固态与液态之间的物质,本身是不能发光的,需要借助于额外的光源才行。因此,灯管数目关系着液晶显示器亮度。液晶显示器的最大亮度,通常由冷阴极涉嫌管来决定,亮度值一般都在200~250cd/m2间。
3.可视面积液晶显示器所表示的尺寸就是与实际可以使用的
屏幕范围一致。
4.可视角度当背光源通过偏极片、液晶和去向层之后,输出的光线变具有了方向性。也就是说大多说光都是从屏幕中垂直射出来的,所以从某一个较大的角度观看液晶显示时,便不能看到原来的颜色,甚至是只能看到全白或者全黑。为了解决这个问题,制造商们也着手开发广角技术,到目前为止有三种比较流行的技术,分别是:TN+FILM、IPS和MVA。
5.色彩度任何一种色彩都是由红、绿、蓝三种基本色组成的。LCD面板上是由480×272个像素点组成现象的,每个独立的像素色彩是由红、绿、蓝(R、G、B)三种基本色来控制。
软件整体设计
整体设计思路是:信号从探头输入,进入程控放大衰减电路进行放大衰减,程控放大器对电压大的信号进行衰减,对电压小信号进行放大以符合AD的测量范围,经过处理后信号进入极性转换电路进行电平调整成0—3.3V电压,因为被测信号可能是交流信号,而AD只能测量正极性电信号,经调整后送入AD转换电器对信号进行采样,采样所得数据送入LCD显示,实现波形的显示按键控制可以通过不同的按键来控制波形的放大和缩小,同时也可以控制程控放大器,选择放大和衰减的倍数。
该示波器软件开发环境为Keil 4,代码采用C语言编写。ARM中软件完成的功能:
(1)输入波形显示和峰峰值测量。
(2)LCD的初始化和显示控制。
(3)按键的检测和控制。
数字手持示波器技术参数
(1)水平扫描速度可调 (2) 垂直电压灵敏度可调 (3) 被测信号的电压峰峰值在屏幕上显示。 (4) 能测量输入频率为1HZ~50KHZ的信号 (5) 测量幅度范围为-3.3V~3.3V
软件编程与调试
整体设计思路是:经过程控放大衰减和极性转换后的电压作为AD 转换的输入电压,然后通过不同的按键来控制波形的放大和缩小,最后在LCD屏上显示出大小适中的波形。同时测出电压峰峰值,并显示。以下是根据整个系统进行的软件设计。
软件设计总体框图
系统总体框图如图3-1所示:
键盘控制程序
利用4个按键K1,K2,K3,K4来选择波形的放大和缩小,按键采用外部中断方式。其中通过K1和K2来调整波形显示的高度比例,通过K3和K4来改变采样间隔增加或减少一个周期内采样点数,达到控制水平扫描速度,使低频率波形能完整显示。当检测到K1时,波形幅度系数置为2,当检测到K2时,波形幅度系数置为1/2,否则波形幅度系数为1,以此控制幅度的放大和缩小。当检测到K3、K4时,采样函数中分别加入不同的延时函数来拉长或缩短波形。按键中断程序流程图如下图所示。
峰峰值测量程序设计
通过遍历AD转换结果,取出最大值和最小值求差,结果即为电压峰峰值。
测量函数:
high_vpp=low_vpp=Buff[0];
for(i=0;i<200;i=i+1)
{
if(Buff[i]>high_vpp)
{
high_vpp = Buff[i];//最大值
}
if(Buff[i] { low_vpp = Buff[i];//最小值 } } vpp=(float)(high_vpp-low_vpp)*(6.6/4096); LCD显示程序设计 本设计所使用的是3.2寸320×240图形点阵LCD,该部分程序主要有LCD初始化,AD转换过来的数据转换成显示数据。用数组连续存储AD转换结果,存满后依次在LCD上显示,依次循环。显示过程中由于STM32处理器频率较低,导致显示一屏的时间较长,从而使刷屏速度较慢,效果不好。这里采用每次刷一列的的算法,即每次显示下一列点之前将此列初始化为屏幕底色,从而改善视觉效果。 LCD 显示主要程序为: int main() { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 LCD_Init(); //初始化液晶 KEY_Init(); //按键初始化 Adc_init(); //ADC初始化 LCD_Clear(BLACK); //清屏 POINT_COLOR=RED; //点颜色 BACK_COLOR=BLACK; //背景色 while(1) { key=KEY_Scan(); //获取按键返回值 high_vpp=low_vpp=Buff[0]; for(i=0;i<200;i=i+1) { Buff[i]=Get_Adc(0); Choose_Delay(); //改变采样间隔 } for(i=0;i<200;i=i+1) { Clear_Line(i); //清列 first_point=next_point; temp=Buff[i]; Vpp_Change(); //调整电压显示幅度 next_point=100+temp*100/4096; //得到点 坐标 Draw_net(); //画网格 LCD_DrawLine(first_point,i,next_point,i+1);//通过连线画波形 } LCD_ShowChar(80,220,'V',18,0); vpp=(float)(high_vpp-low_vpp)*(6.6/4096); //求得峰值 temp=vpp; LCD_ShowChar(97,202,'o',18,0); LCD_ShowChar(50,220,'.',18,0); LCD_ShowNum(40,220,temp,1,18,0); //显示峰峰值整数位 vpp-=temp; temp=vpp*100; LCD_ShowNum(58,220,temp,2,18,0); //显示峰峰值小数 位 } } 实验一使用固件函数库创建库函数模板 一、实验目的 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初始化过程 实验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的多任务设计-嵌入式系统课程设 计报告 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 - 嵌入式系统课程设计报告 利用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的嵌入式系统应用设计》课程实验报告 班级:电信工程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); 实验报告 课程名称:单片微机原理与车载系统 学生姓名蒋昭立 班级电科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 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。 寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。 姓名:楚昕班级:轨道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) 实验一:一个灯的闪烁 一、实验要求 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开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉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的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处理器基本接口应用 实验一. 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处理器的外部中断控制器的使用。 嵌入式技术与应用 课程设计报告 题目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 南京航空航天大学 研究生实验报告 项目名称: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所示。 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记录实验过程,撰写实验报告 《嵌入式系统原理》课程设计报告 题目 学院(部) 专业 班级 学生姓名 学号 指导教师(签字) 目录 题目 (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开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉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大作业报告 学生姓名: 学号: 所在院系:光电信息与计算机工程学院专业班级: 授课教师: 完成时间: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卡:存储音频数据 单片机课程设计 题目:实现简易电子琴 院(系): 专业: 班级: 学生: 学号: 指导教师: 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; TimerSTM32嵌入式系统实验报告模板
STM32 实验2报告
基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告
stm32课程设计报告
基于STM32的嵌入式系统应用设计》课程实验报告
单片机STM32实验报告
STM32 MDK实验报告
STM32实验报告分析
STM32实验报告
STM32实验报告
STM32处理器基本接口实验报告
嵌入式课程设计报告stm32
STM32-ARM-综合实验报告(南京航空航天大学)
基于stm32的嵌入式系统原理与设计实验报告 学位论文
基于STM32自动洗衣机的课程设计报告
STM32实验报告
STM32课程设计贪吃蛇
嵌入式系统课程设计报告书
嵌入式系统课程设计总结报告
stm32f103电子琴课设报告 终极版(1)