任务2-2 简单声光报警器的制作_第1页
任务2-2 简单声光报警器的制作_第2页
任务2-2 简单声光报警器的制作_第3页
任务2-2 简单声光报警器的制作_第4页
任务2-2 简单声光报警器的制作_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务2-2简单声光报警器的制作掌握C语言预处理宏定义、条件编译、文件包含理解数据类型与结构体CMSIS标准库类型定义GPIO控制LED与蜂鸣器实现声光报警功能绿色低碳设计理念低功耗设计与节能优化STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用项目二

可控LED流水灯的设计与实现CONTENTS目录01任务目标明确学习目标与能力要求掌握嵌入式C语言编程基础,包括预处理技术、基本数据类型和结构体的使用,实现GPIO控制LED和蜂鸣器的简单操作理论基础核心能力02知识储备嵌入式C语言基础学习C语言预处理指令(宏定义、条件编译、文件包含)、CMSIS标准库数据类型、结构体的定义与使用预处理数据类型结构体03任务实施电路设计与程序开发完成声光报警器电路设计,编写控制程序,实现LED闪烁和蜂鸣器报警功能,通过Proteus仿真验证电路设计程序开发仿真验证04任务总结核心知识点梳理梳理嵌入式C语言编程要点、GPIO配置方法、延时函数设计,总结声光报警器实现的关键技术知识梳理技能提升05提升训练与评价巩固知识·提升技能通过知识问答检验理论掌握程度,通过实践操作提升动手能力,设计多种报警模式,增加按键控制功能知识问答实践操作任务评价01CHAPTERONE任务目标掌握C语言基础预处理技术、数据类型、结构体GPIO控制LED闪烁与蜂鸣器报警仿真验证Proteus仿真与程序调试TASKOBJECTIVES任务目标目标一掌握嵌入式C语言编程基础深入理解C语言预处理技术,包括#define宏定义、#ifdef条件编译和#include文件包含的使用方法。掌握CMSIS标准库中的基本数据类型和结构体的定义与应用。宏定义与条件编译数据类型与类型别名结构体定义与使用目标二GPIO控制LED与蜂鸣器通过实践编写能正确配置STM32GPIO端口、控制LED和蜂鸣器的简单操作程序。实现LED闪烁控制和蜂鸣器报警发声功能,注重代码可读性、可维护性和执行效率。GPIO端口配置与初始化LED闪烁控制程序蜂鸣器发声控制目标三仿真验证与绿色设计通过Proteus仿真软件验证电路和程序的正确性,观察LED和蜂鸣器是否正常工作。在设计过程中注重节能环保,选择低功耗元件,优化控制程序减少能耗。Proteus电路设计与仿真程序编译与调试绿色低碳设计理念绿色低碳设计理念在设计过程中,强调选择低功耗LED和微控制器,以及通过优化控制程序减少系统待机和运行时的能耗,体现绿色低碳的设计思路。在代码逻辑中减少冗余操作,关闭未使用外设时钟,以降低整体能耗。02CHAPTERTWO知识储备预处理技术宏定义、条件编译、文件包含数据类型CMSIS标准库类型定义结构体结构体定义与指针应用PREPROCESSOR嵌入式C语言中的预处理所谓预处理,是指在C语言编译过程中,进行正式编译之前所做的一系列准备工作#1define宏定义define是C语言中的预处理命令,用于宏定义(定义的是常量),可以提高源代码的可读性,为编程提供方便。//常见格式:#define标识符字符串示例1:定义定时器分频系数#defineTIM_PRESCALER_VALUE7199示例2:定义LED引脚#defineLED1PBin(1)//LED1=1;使PB1输出高电平#2typedef类型别名typedef用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。在MDK中用得最多的就是定义结构体的类型别名。//为结构体定义别名:typedefstruct{__IOuint32_tMODER;__IOuint32_tOTYPER;}GPIO_TypeDef;使用方法:GPIO_TypeDefGPIOA,GPIOB;数据类型别名:typedefunsignedintuint32_t;#3ifdef条件编译在STM32程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。//常见形式:#ifdef标识符程序段1#else程序段2#endif作用:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。应用场景:在stm32f10x.h头文件中,用于区分不同容量芯片的变量定义学习要点:条件编译理解起来可以类比于C语言中的if-else语句。条件编译在STM32的开发中比较常用,自己写代码写.h头文件的时候经常会用到。DATATYPES嵌入式C语言的基本数据类型在STM32微控制器的编程中,数据类型的定义起着至关重要的作用CMSIS标准库数据类型STM32标准外设库中的数据类型,分成3.0及之前版本的数据类型和3.0以后标准外设库使用的CMSIS数据类型。两者表示方式有所不同,但两部分的数据类型是兼容的。//在stm32f10x.h中定义的数据类型:typedefint32_ts32;typedefint16_ts16;typedefint8_ts8;typedefuint32_tu32;typedefuint16_tu16;typedefuint8_tu8;//带volatile限定词的数据类型typedef__IOuint32_tvu32;typedef__IOuint16_tvu16;typedef__IOuint8_tvu8;说明:在Keil-MDK-ARM的C语言编译器下进行STM32外设标准库编程时,以上数据类型都能识别,但基于编程习惯和书写便利性,CMSIS类型的数据类型逐渐被普遍应用。数据类型对照表固件库类型CMSIS类型描述s32int32_t有符号32位数据s16int16_t有符号16位数据s8int8_t有符号8位数据u32uint32_t无符号32位数据u16uint16_t无符号16位数据u8uint8_t无符号8位数据vu32__IOuint32_t易失性读写32位数据vu16__IOuint16_t易失性读写16位数据vu8__IOuint8_t易失性读写8位数据sc32constint32_t只读有符号32位数据uc32constuint32_t只读无符号32位数据IO类型限定词:__I表示只读访问,__O表示只写访问,__IO表示读写访问。const是一个C语言的关键字,它限定一个变量不允许被改变。STRUCTURE结构体的定义与使用结构体和结构体指针在基于STM32标准外设库的嵌入式C语言编程中被广泛使用什么是结构体?结构体是一个可以包含不同数据类型成员的集合体,它是一种可以自己定义的数据类型。使用结构体可以将描述某一对象的多个变量组织在一起,提高代码的可读性。//声明结构体类型:struct结构体名{成员列表;}变量名列表;结构体指针结构体指针是一个结构体变量在内存中的地址。使用指针而不是直接使用变量,往往会带来数据传递效率上的提升和灵活性。方法1:结构体变量作为参数程序直观易懂,但效率不是太高方法2:结构体指针作为参数开销较小,效率较高GPIO初始化结构体示例在STM32标准外设库的GPIO驱动库头文件"stm32f10x_gpio.h"中,可以找到GPIO初始化使用的结构体GPIO_InitTypeDef://GPIO初始化结构体定义typedefstruct{uint16_tGPIO_Pin;//GPIO引脚定义GPIOSpeed_TypeDefGPIO_Speed;//设置GPIO引脚最大输出翻转速度GPIOMode_TypeDefGPIO_Mode;//GPIO引脚工作模式}GPIO_InitTypeDef;//定义结构体变量及赋值:GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3;//GPIO初始化函数(使用结构体指针):voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)重要提示:对结构体成员操作时,要注意符号"->"和"."的不同。对结构体指针的成员赋值时,要写成:GPIO_InitStruct->GPIO_Mode=GPIO_Mode_Out_PP;03CHAPTERTHREE任务实施任务要求硬件设计、程序设计、功能验证电路设计声光报警器控制电路设计程序设计LED闪烁与蜂鸣器控制程序编译调试工程编译与仿真验证TASKREQUIREMENTS任务实现要求硬件电路设计1芯片选型选用STM32F103R6芯片作为主控制器2外设连接使用一个LED灯和一个蜂鸣器,确保能正常连接到STM32的GPIO引脚3控制引脚LED连接到PA0,蜂鸣器连接到PA8,通过电平变化进行控制程序设计1LED控制编写程序控制LED灯的状态,实现LED灯的闪烁控制2蜂鸣器控制实现蜂鸣器的发声控制,产生报警声音3优化控制逻辑优化控制程序以减少能耗,体现节能减排理念功能验证1Proteus仿真通过Proteus仿真软件验证电路和程序2观察验证观察LED灯和蜂鸣器是否正常工作3稳定性测试验证程序的稳定性和可靠性绿色低碳理念1节能环保在设计过程中注重节能环保2低功耗元件选择低功耗元件,优化控制程序减少能耗3可扩展性考虑电路的复用性和可扩展性CIRCUITDESIGN声光报警器控制电路设计电路组成声光报警器控制电路由STM32F103R6芯片、电阻、LED灯、扬声器和三极管2N3904组成。LED电路D1的阴极同任务1-4仍连接到PA0引脚,通过控制PA0输出高低电平实现LED的亮灭控制蜂鸣器电路Q1(三极管2N3904)的基极经电阻R3接到PA8引脚,通过控制PA8输出高低电平驱动蜂鸣器发声控制原理当GPIO输出低电平时,LED点亮/蜂鸣器发声;输出高电平时,LED熄灭/蜂鸣器静音仿真原理图主控芯片STM32F103R6LEDPA0控制蜂鸣器PA8控制驱动元件三极管2N3904设计要点:在Proteus软件中,复位电路和晶振电路在不连接的情况下,软件默认处于已接好状态。PROGRAMDESIGN声光报警器程序设计声光报警器程序同项目一任务1-4LED闪烁程序基本相同主程序代码#include"stm32f10x.h"//STM32F10x设备头文件//毫秒级延时函数voidDelay_ms(intn){inti,j;while(n--){for(i=20;i>1;i--)//外层循环for(j=50;j>1;j--);//内层循环}}//主函数intmain(void){GPIO_InitTypeDefGPIO_InitStructure;//GPIO配置结构体//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置GPIOA的0和8引脚为推挽输出模式GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//主循环while(1){//关闭GPIOA的0和8引脚输出(低电平)-LED亮/蜂鸣器响GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_8);Delay_ms(500);//延时500ms//打开GPIOA的0和8引脚输出(高电平)-LED灭/蜂鸣器停GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_8);Delay_ms(500);//延时500ms}}程序流程1包含头文件stm32f10x.h2定义延时函数Delay_ms()3使能GPIO时钟RCC_APB2PeriphClockCmd4配置GPIO引脚推挽输出模式5主循环控制LED闪烁/蜂鸣器报警关键代码说明GPIO_ResetBits()将引脚设为低电平,LED点亮,蜂鸣器发声GPIO_SetBits()将引脚设为高电平,LED熄灭,蜂鸣器静音Delay_ms(500)延时500毫秒,控制闪烁频率PROJECTBUILD工程编译与调试工程创建步骤1建立工程目录创建"任务2-2简单声光报警器"目录2复制基础工程复制任务1-4工程并修改名称3修改主文件将flash_led.c修改为Sound_light_alarm.c4修改工程名把ProjectTargets栏下的工程名修改为Sound_light_alarm5编译工程单击Build按钮对工程进行编译6仿真验证加载hex文件到Proteus验证常见编译错误及解决方案❌UndefinedsymbolSystemInit原因:未添加system_stm32f10x.c文件解决:检查并添加该文件到工程❌Cannotopensourceinputfile原因:头文件路径配置不正确解决:检查C/C++选项中的IncludePaths❌USE_STDPERIPH_DRIVERundefined原因:未定义全局宏解决:在C/C++选项中添加宏定义调试技巧:编译发生错误时,要仔细分析错误信息,定位问题所在。常见错误包括文件未添加、路径配置错误、宏定义缺失等。仿真验证步骤1在Proteus中加载hex文件到STM32F103R6芯片2单击仿真工具栏的"运行"按钮3观察LED是否闪烁,蜂鸣器发出报警声04CHAPTERFOUR任务总结C语言基础预处理、数据类型、结构体GPIO控制LED闪烁、蜂鸣器控制开发技能电路设计、程序调试SUMMARY核心知识点总结嵌入式C语言编程基础预处理技术掌握#define宏定义、#ifdef条件编译和#include文件包含的使用方法,理解预处理在编译过程中的作用。数据类型了解STM32标准外设库中的基本数据类型和结构体的使用,以及如何在STM32标准外设库中应用这些数据类型和结构体。类型别名理解typedef的作用,掌握为现有类型创建新名字的方法,简化变量的定义和使用。GPIO端口配置与控制GPIO配置流程掌握如何配置STM32的GPIO端口,包括使能GPIO时钟、设置引脚模式和速度等关键步骤。LED与蜂鸣器控制通过GPIO端口控制LED和蜂鸣器的方法,实现了LED的闪烁和蜂鸣器的发声功能。控制函数熟练使用GPIO_SetBits()、GPIO_ResetBits()等函数控制GPIO输出高低电平。延时函数与节能考虑延时函数设计编写了毫秒级延时函数,用于控制LED和蜂鸣器的工作时间,实现稳定的闪烁和报警效果。节能优化在程序设计中考虑了节能减排的理念,通过优化控制逻辑减少系统能耗。电路设计与仿真Proteus电路设计在Proteus中设计了简单声光报警器的电路原理图,包括STM32最小系统电路、LED电路和蜂鸣器电路。仿真验证通过Proteus仿真验证了电路设计的正确性和程序的可靠性,确保实际硬件连接和程序逻辑的正确性。05CHAPTERFIVE提升训练与评价知识问答通过问答巩固理论知识实践操作通过实践提升动手能力PRACTICE提升训练知识问答Q1预处理指令解释预处理指令#define、#ifdef和#include的作用,并给出使用示例。Q2数据类型描述STM32标准外设库中的数据类型,并说明它们的作用和适用场景。Q3位操作函数GPIO_SetBits和GPIO_ResetBits的作用是什么?请给出使用示例。实践操作1多种报警模式设计并仿真一个声光报警系统,实现多种报警模式(如单次报警、连续报警等)。2按键控制功能借助DeepSeek或KimiAI等学习模型,在本任务基础上,修改现有程序,增加按键控制功能,即按键按下后启动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论