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

基于STM32和uC_OS-II的多任务设计-嵌入式系统课程设计报告
基于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 -

嵌入式系统课程设计报告

(2)MCU

开发板的处理器是STM32F107VCT6,该处理器基于ARM V7 架构的Cortex-M3 内核,主频72Mhz,内部含有256K字节的FLASH 和64K字节的SRAM,LQFP100 封装。

(3)蜂鸣器

开发板板载一个无源蜂鸣器,用于产品告警或声音提醒。蜂鸣器连接到了处理器的PA3管脚,当处理器的PA3管脚输出低电平时蜂鸣器开始鸣响,反之处理器的PA3管脚输出高电平时蜂鸣器停止鸣响. (4)指示灯

开发板提供了1个电源指示灯和4路通用LED指示灯。电源指示灯指示3.3V

电源是否正常。4路通用LED指示灯可以用于指示STM32开发板的状态。

用户LED 指示灯由GPIO 管脚控制LED 灯的亮灭,当GPIO 管脚输出低电平时,LED 指示灯亮。反之,当GPIO 管脚输出高电平时,LED 指示灯灭。

这四个LED指示灯分别由PD2、PD3、PD4和PD7控制。 (5)JTAG仿真调试

开发板提供标准的20针JTAG接口,可以直接和JLINK V8仿真器连接,下载程序,调试仿真;

- 2 -

嵌入式系统课程设计报告

(6)晶振电路

STM32F107内部已经包含了8MHz高速内部RC振荡电路,但是其精准度

不是很高;为此在外部增加了25MHz的晶振电路,为系统的可靠工作提供

时序基准。

(7)设计中用到的管脚

芯片引脚开发板模块

PD2 LED1

PD3 LED2

PD4 LED3

PD7 LED4

PA3 蜂鸣器

3.2 STM32寄存器使用说明

设计中,只用到时钟和GPIO相关的寄存器。

(1)STM32F107VC中共有80个GPIO,分成A、B、C、D、E五个组,每组有13-16个可用的I/O端口,每个GPIO可以自由编程。通过各个寄存器来控制GPIO输出高电平或者是低电平。每个GPIO有7个寄存器来控制,其中CRL和CRH用来确定I/O管脚的方向和速率以及何种驱动方式,BSRR可直接修改某一个CPIO引脚的高低电平,BRR可将GPIO置零。

(2)在使用配置GPIO寄存器之前,都要先配置GPIO的时钟。通过RCC寄存器当中的CR、CFGR和CIR来设置系统时钟。GPIO挂在APB2总线上,可对APB2ENR 寄存器设置来确定所用到的GPIO时钟。

(3)μC/OS-II用Cortex-M3的SysTick定时器产生操作系统需要的滴答时钟,作为整个系统的根基。SysTick定时器的四个寄存器SysTick_CTRL、

SysTick_LOAD、SysTick_VAL、SysTick_CALIB控制每隔一定时间产生一个中断使μC/OS-II系统能进行多任务控制。

(3)用到的寄存器:CRL、CRH、BRR、BSRR、CR、CFGR、CIR、APB2ENR、SysTICK_CTRL、SysTICK_LOAD、SysTICK_VAL、SysTICK_CALIB

3.3 STM32库函数使用说明

设计中只用到时钟和GPIO相关的库函数。

(1)直接配置寄存器开发,如果代码比较庞大,可读性差。ST针对STM32 封装好一个软件封装库,开发者可调用函数接口(API ,Application Program Interface)来完成相应的开发工作,配置寄存器的工作由接口函

- 3 -

嵌入式系统课程设计报告数完成,使开发人员脱离最底层的寄存器操作,易于阅读,维护成本低。库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。库开发方式与直接配置寄存器的方式的区别:

(2)库目录和文件简介

Libraries文件夹下是驱动库的源代码及启动文件。

在使用库开发时,需要把libraries目录下的相关库函数文件添加到工程中。进入Libraries文件夹看到,关于内核与外设的库文件分别存放在CMSIS和

STM32F10x_StdPeriph_Driver文件夹中。

CMSIS(Cortex Microcontroller Software Interface Standard):ARM将所有Cortex芯片厂商的产品的软件接口标准化,制定了CMSIS 标准。CMSIS 层起着承上启下的作用,一方面该层对硬件寄存器层进行了统一的实现,屏蔽了不同厂商对Cortex-M 系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,简化了应用程序开发的难度。

Libraries\CMSIS\CM3 文件夹下又分为CoreSupport 和DeviceSupport 文件夹。在CoreSupport 中的是M3核通用的源文件core_cm3.c 和头文件

core_cm3.h,作用是为采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口。这两个文件在其它公司的Cortex-M3系列芯片也是相同的。我们只需把这个文件加进我们的工程文件即可。

在DeviceSupport文件夹下的是启动文件、外设寄存器定义&中断向量定

- 4 -

嵌入式系统课程设计报告义层的一些文件,由ST公司提供。

system_stm32f10x.c文件的功能是设置系统时钟和总线时钟,该文件中包含了stm32f10x.h 这个头文件。启动文件要选择startup_stm32f10x_cl.s。系统启动文件由汇编编写,不同的文件对应不同的芯片型号。启动文件是任何处理器在上电复位之后最先运行的一段汇编程序。在我们编写的c 语言代码运行之前,需要由汇编为c 语言的运行建立一个合适的环境,接下来才能运行我们的程序。所以我们也要把启动文件添加进我们的的工程中去,其作用相当于bootloader。

STM32F10x_StdPeriph_Driver:该文件夹下有inc和src两个文件夹,都属于CMSIS的设备外设函数部分。src 里面是每个设备外设的驱动程序。

src 和inc 文件夹里的就是ST 公司针对每个STM32外设而编写的库函数文件,每个外设对应一个.c 和.h 后缀的文件。我们把这类外设文件统称

为:stm32f10x_ppp.c 或stm32f10x_ppp.h 文件,ppp表示外设名称。如针对GPIO 外设,在src文件夹下有一个stm32f10x_gpio.c 源文件,在inc 文件夹下有一个stm32f10x_gpio.h头文件,设计中用到了STM32的GPIO,则至少要把这两个文件包含到工程里。

这两个文件夹中,还有一个很特别的misc.c文件,这个文件提供了外设对内核中的NVIC(中断向量控制器)的访问函数,在配置中断时,我们必须把这个文件添加到工程中。

在用库建立一个完整的工程时,还需要添加user目录下的stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h 这三个文件。stm32f10x_it.c用来编写中断服务函数;stm32f10x_conf.h用来配置使用了什么外设的头文件,用这个头文件我们可以很方便地增加或删除外设驱动函数库。

库文件直接包含进工程即可,丝毫不用修改,而有的文件就要我们在使用的时候根据具体的需要进行配置。

(3)用到的库函数:SystemInit、RCC_APB2PeriphClockCmd、SysTick_Config、GPIO_Init 、GPIO_SetBits、GPIO_ResetBits。

3.4 uC/OS-II任务管理函数使用说明

设计中用到的任务管理函数包括任务堆栈的建立、任务的创建和

uC/OS-II的初始化和任务的启动。

(1)UCOSII的前身是UCOS,最早出自于1992 年美国嵌入式系统专

家Jean https://www.360docs.net/doc/0e6049714.html,brosse把UCOS 的源码发布在BBS 上。目前最新的版本是

UCOSIII,但是现在使用最为广泛的还是UCOSII。

UCOSII是一个可裁减的、抢占式、实时多任务内核,具有高度可移

- 5 -

嵌入式系统课程设计报告

植性,特别适合于微处理器和控制器,已经移植到近40多种处理器体系

上,涵盖了从8位到64位各种CPU(包括DSP)。UCOSII(V2.91版本)

体系结构如下图所示:

(2)uC/OS-II操作系统内核的主要工作就是对任务进行管理和调度,任务的执行代码通常是一个无限循环结构。从程序设计的角度来看,一个uC/OS-II任务的代码就是一个C语言函数,任务的参数是一个void类型的指针,但是这些函数是由主函数main()来负责创建和启动,然后由操作系统负责调度和运行,而不是调用的关系。

OSTaskCreate()为创建任务的函数,OSStart()为启动任务的函数。使用OSStart()之后,任务就交由操作系统来管理和调度。每个任务都必须具有一个唯一的优先级别,每一个级别都用一个数字来表示,比如数字为0,255.

在存储器中按数据“后进先出”的原则组织的连续存储空间称为堆栈,为了满足任务切换和响应中断时保存CPU寄存器中的内容及存储任务私有数据的需要,每个任务都应该配有自己的堆栈。任务堆栈是任务的重要组成部分。使用数据类型OS_STK来定义任务堆栈,即定义一个OS_STK类型的数组。

- 6 -

嵌入式系统课程设计报告

在使用uC/OS-II的所有服务之前,必须调用uC/OS-II的初始化函数

OSInit(),对uC/OS-II自身的运行环境进行初始化。

为了能使用习惯的方法来使任务延时,uC/OS-II提供了一个可以用时、分、秒为参数的任务延时函数OSTimeDlyHMSM(),比如延时1秒可用OSTimeDlyHMSM(0,0,0,1000).

(3)需要用到的任务管理函数:

OSInit、OSTaskCreate、OSStart、OSTimeDlyHMSM

四、软件设计

(含流程图、带注释的程序清单)

系统上电开始运行

初始化

创建任务创建任务创建任务创建任务

TASK_3 TASK_2 TASK_1 TASK_4

执行OSSTART()函数后执行OSSTART()函数后执行OSSTART()函数后执行OSSTART()函数后

开始执行相应任务开始STM32执行相应开始执行相应任务开始STM32执行相

任务任务

/*************

*main.c

**************/

#include "includes.h"

#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

- 7 -

嵌入式系统课程设计报告

#include "stdio.h"

const uint32_t SystemFrequency = 72000000;

#define RCC_GPIO_LED RCC_APB2Periph_GPIOD

#define GPIO_LED GPIOD

#define DS1_PIN GPIO_Pin_4

#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))

#define TRCENA 0x01000000

GPIO_InitTypeDef GPIO_InitStructure;

#define TASK_1_PRIO 5

#define TASK_2_PRIO 6

#define TASK_3_PRIO 7

#define TASK_4_PRIO 8

#define TASK_1_STK_SIZE 100

#define TASK_2_STK_SIZE 100

#define TASK_3_STK_SIZE 100

#define TASK_4_STK_SIZE 100

OS_STK task_1_stk[TASK_1_STK_SIZE]; //定义堆栈OS_STK task_2_stk[TASK_2_STK_SIZE]; //定义堆栈OS_STK task_3_stk[TASK_3_STK_SIZE]; //定义堆栈OS_STK task_4_stk[TASK_4_STK_SIZE]; //定义堆栈- 8 -

嵌入式系统课程设计报告

struct __FILE { int handle; };

FILE __stdout;

FILE __stdin;

/**

* 重写fputc函数

**/

int fputc(int ch, FILE *f) {

if (DEMCR & TRCENA)

{

while (ITM_Port32(0) == 0);

ITM_Port8(0) = ch;

}

return(ch);

}

void Task_1(void *arg)

{

while (1)

{

GPIO_ResetBits(GPIO_LED,DS1_PIN); //点亮LED3 OSTimeDlyHMSM(0,0,0,1000);

GPIO_SetBits(GPIO_LED,DS1_PIN); //熄灭LED3 OSTimeDlyHMSM(0,0,0,1000);

}

}

void Task_2(void *arg)

{

while (1)

{

GPIO_ResetBits(GPIO_LED,GPIO_Pin_2); //点亮LED1 OSTimeDlyHMSM(0, 0,0,1500);

- 9 -

嵌入式系统课程设计报告

GPIO_SetBits(GPIO_LED,GPIO_Pin_2); //熄灭LED1 GPIO_ResetBits(GPIO_LED,GPIO_Pin_3); //点亮LED2 OSTimeDlyHMSM(0, 0,0,1500);

GPIO_SetBits(GPIO_LED,GPIO_Pin_3); //熄灭LED2

GPIO_ResetBits(GPIO_LED,GPIO_Pin_7); //点亮LED4 OSTimeDlyHMSM(0, 0,0,1500);

GPIO_SetBits(GPIO_LED,GPIO_Pin_7); //熄灭LED4 }

}

void Task_3(void *arg)

{

while (1)

{

GPIO_ResetBits(GPIOA,GPIO_Pin_3); //无源蜂鸣器响OSTimeDlyHMSM(0,0,0,1000);

GPIO_SetBits(GPIOA,GPIO_Pin_3); //无源蜂鸣器不响OSTimeDlyHMSM(0,0,0,1500);

}

}

void Task_4(void *arg)

{

while (1)

{

printf("hello,world!\n");

}

}

int main(void)

{

SystemInit(); //配置系统时钟为72M

- 10 -

嵌入式系统课程设计报告

SysTick_Config(SystemFrequency/OS_TICKS_PER_SEC); //使能

SysTick定时器

RCC_APB2PeriphClockCmd(RCC_GPIO_LED | RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA和GPIOD的时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIO_LED , &GPIO_InitStructure); //LED灯相关

的GPIO初始化

GPIO_Init(GPIOA , &GPIO_InitStructure); //无源蜂鸣器

相关的GPIO初始化

GPIO_SetBits(GPIO_LED ,GPIO_Pin_All); //熄灭所有LED

指示灯

GPIO_SetBits(GPIOA,GPIO_Pin_3); //让无源蜂鸣器

不响

OSInit(); //操作系统初始化

OSTaskCreate(Task_1,(void *)0,&task_1_stk[TASK_1_STK_SIZE-1],

TASK_1_PRIO); //创建任务Task_1

OSTaskCreate(Task_2,(void *)0,&task_2_stk[TASK_2_STK_SIZE-1],

TASK_2_PRIO); //创建任务Task_2

OSTaskCreate(Task_3,(void *)0,&task_3_stk[TASK_3_STK_SIZE-1], TASK_3_PRIO); //创建任务Task_3

OSTaskCreate(Task_4,(void *)0,&task_4_stk[TASK_4_STK_SIZE-1], TASK_4_PRIO); //创建任务Task_4

OSStart(); //启动操作系统

}

/******************************************************************* ***********/

/* STM32DBG.INI: STM32 Debugger Initialization File

*/

- 11 -

嵌入式系统课程设计报告

/******************************************************************* ***********/

// <<< Use Configuration Wizard in Context Menu >>> //

/******************************************************************* ***********/

/* This file is part of the uVision/ARM development tools. */

/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */ /* This software may only be used under the terms of a valid, current, */

/* end user licence from KEIL for a compatible version of KEIL software */

/* development tools. Nothing else gives you the right to use this software. */

/******************************************************************* ***********/

FUNC void DebugSetup (void) {

// Debug MCU Configuration

// DBG_SLEEP Debug Sleep Mode

// DBG_STOP Debug Stop Mode

// DBG_STANDBY Debug Standby Mode // TRACE_IOEN

Trace I/O Enable

// TRACE_MODE Trace Mode

// <0=> Asynchronous

// <1=> Synchronous: TRACEDATA Size 1

// <2=> Synchronous: TRACEDATA Size 2

// <3=> Synchronous: TRACEDATA Size 4

// DBG_IWDG_STOP Independant Watchdog Stopped when Core

is halted

// DBG_WWDG_STOP Window Watchdog Stopped when Core

- 12 -

嵌入式系统课程设计报告

is halted

// DBG_TIM1_STOP Timer 1 Stopped when Core is halted // DBG_TIM2_STOP Timer 2 Stopped when Core is halted // DBG_TIM3_STOP Timer 3 Stopped when Core is halted //

DBG_TIM4_STOP Timer 4 Stopped when Core is halted //

DBG_CAN_STOP CAN Stopped when Core is halted // _WDWORD(0xE0042004, 0x00000027); // DBGMCU_CR

_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register

}

DebugSetup(); // Debugger Setup

五、设计总结

本学期为期一周的嵌入式课程设计在不知不觉中结束了,虽说这次课程

设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处,课程设计是培养学生综合运用所学知识,发现, 提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 随着网络在人们生活中的运用越来越广泛和嵌入式技术在日常生活中的地位日益凸显。这对我们这些学习有关网络以及计算机专业的学生来说既是一种挑战,又是一个难得的机会。通过这次嵌入式的课程设计让我们初步了解了BOA WEB服务器的设计过程和工作原理,掌握

了一些编程能力。对我们的网络编程有了很大的提高,与此同时,我们还学到了一些专业知识之外的东西。

在课程设计过程中,我们了解到课程设计不光光是埋头做设计,也是同

学之间互相学习和互相交流经验和知识的机会。也是我们大家向老师提出疑问和学以致用的机会,这让我们不会成为只知道理论而不会将理论化为实践- 13 -

嵌入式系统课程设计报告中去的书呆子。我觉得课程设计就是一个复习课堂上学到知识的机会,也是一个加强学生动手能力设计的机会。更是一个让学习得到升华的过程。在该次课程设计的初期,我们将任务分配好,每个人各就其职,各尽所能。当然,在一开始我们就遇到了一些问题,解决问题的方法是跑到图书馆查看有关书籍,或上网查阅有关信息,或请教老师。终于在大家的相互帮组和大家的齐心协力下,我们最终完成了该次的课程设计。

这次课程设计不仅考察了我们对课堂上所学专业知识的理解程度,也锻炼了我们的动手能力。提高了我们独立思考文理,解决问题的能力。总体上看,我觉得这次课程设计是我自身的知识丰富了不少,但同时也发现了自己的不足之处。例如在动手方面,和知识融合方面,不能与实践相结合。软件操作不够熟练,不能灵活运用。是我了解要先学好理论知识才能很好地与实践相结合,才能熟练地运用到生活中。

设计成绩: 教师签名:

年月日

- 14 -

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

相关文档
最新文档