嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件全套 项目1 -8 STM32 单片机入门 - - 综合应用-基于RTC实时时钟的智能电子万年历设计_第1页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件全套 项目1 -8 STM32 单片机入门 - - 综合应用-基于RTC实时时钟的智能电子万年历设计_第2页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件全套 项目1 -8 STM32 单片机入门 - - 综合应用-基于RTC实时时钟的智能电子万年历设计_第3页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件全套 项目1 -8 STM32 单片机入门 - - 综合应用-基于RTC实时时钟的智能电子万年历设计_第4页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件全套 项目1 -8 STM32 单片机入门 - - 综合应用-基于RTC实时时钟的智能电子万年历设计_第5页
已阅读5页,还剩461页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式原理与应用集成电路学院

嵌入式课程组STM32单片机入门项目11.1STM32概述01单片机概述04STM32单片机优势03STM32系列特点02STM32简介了解单片机的发展历程。掌握STM32系列单片机的特点与优势。任务内容:任务要求:单片机概述01单片机概述单片机是一种集成电路芯片,包含CPU、存储器、计时器、通信接口等功能,广泛应用于嵌入式系统。发展自上世纪70年代的Intel8048单片机,随着技术进步,衍生出多种系列和型号。单片机在家电、工业控制、汽车电子等领域都有应用,因其高集成度、小体积、低功耗等特点备受青睐。STM32简介02STM32简介STM32是由意法半导体(STMicroelectronics)推出的一系列32位ARMCortex-M单片机。STM32系列单片机具有丰富的外设和强大的性能。STM32系列单片机广泛应用于工业控制、汽车电子、消费类电子等领域。STM32系列微控制是嵌入式系统设计中的重要组成部分。STM32系列特点03STM32系列特点STM32系列单片机集成了丰富的外设,如通用IO口、定时器、串口、SPI、I2C、ADC、DAC等,适用于各种应用场景。STM32采用高性能的ARMCortex-M系列处理器核心,提供强大的计算和处理能力,同时功耗较低,适用于高性能和低功耗需求。STM32系列单片机有多个产品系列,如STM32F0、STM32F1、STM32F4等,根据应用需求选择合适的型号,实现性能和成本平衡。STM32提供完善的开发生态环境,包括STM32CubeIDE、STM32CubeMX等官方开发工具,丰富的开发文档和社区支持,帮助开发者加快产品开发周期,降低成本。STM32单片机优势04STM32单片机优势STM32系列单片机采用先进的低功耗设计,在电池供电等场景下延长设备使用寿命,降低设备运行成本。搭载ARMCortex-M系列高性能处理器核心,具备强大的计算和处理能力,满足复杂应用需求,提升系统整体性能。集成了丰富的外设,如通用IO口、定时器、串口、SPI、I2C、ADC、DAC等,灵活应对各种应用场景,提高系统可扩展性和灵活性。拥有完善的开发生态环境,提供官方开发工具和丰富的开发资源,为开发者提供便捷的开发平台和全面的技术支持,加快产品开发周期,降低开发成本,提高开发效率。1.2HAL库01HAL库概述03HAL库使用方法02HAL库特点了解HAL库的特点。掌握HAL库的使用。任务内容:任务要求:HAL库概述01HAL库概述HAL库是STMicroelectronics为STM32系列单片机提供的软件库,用于简化硬件的访问和控制。HAL库提供了一组API函数,用于配置和控制微控制器的外设,如GPIO、USART、SPI等。HAL库提供了独立于微控制器型号和硬件平台的编程接口,增强了代码的移植性。使用HAL库可以简化开发过程,提高开发效率。HAL库特点02HAL库特点HAL库提供了硬件无关的API函数,使得相同代码可适用于不同型号的STM32微控制器和硬件平台,比标准库更易移植。HAL库支持对几乎所有STM32微控制器外设进行配置和控制,包括GPIO、UART、SPI、I2C、定时器、中断控制等,功能丰富于标准库。HAL库提供简单易用的API函数,使得外设配置和控制更为直观,相较于标准库的API函数更易上手。HAL库的API函数按照标准和规范设计,使得不同开发人员能够轻松理解和使用,相比之下,标准库的API函数不够统一,可能存在厂家或芯片型号间的差异。HAL库使用方法03HAL库使用方法初始化HAL库,包括系统时钟的配置和外设的初始化,使用标准的初始化函数简化初始化过程。使用HAL库提供的API函数配置和初始化外设,如GPIO引脚、UART通信等,相对标准库更简洁。控制外设状态通过调用HAL库的API函数实现,包括发送数据、接收数据、设置中断等,操作更便捷。HAL库提供事件回调函数,在外设发生特定事件时调用,可在其中处理事件。HAL库提供更完善的错误处理功能,检测和处理外设错误,确保系统稳定性和可靠性。1.3软件安装01STM32CubeIDE介绍04Proteus安装03Proteus介绍02STM32CubeIDE安装掌握STM32CubeIDE开发软件的安装。掌握Proteus电子电路仿真软件的安装。任务内容:任务要求:STM32CubeIDE介绍01STM32CubeIDE介绍STM32CubeIDE是由STMicroelectronics开发的集成开发环境(IDE),专门用于STM32系列单片机的软件开发。基于Eclipse开发框架,集成了STM32CubeMX配置工具和STM32CubeHAL库,提供了一体化的开发环境和全面的软件开发工具链。具有直观友好的用户界面,支持多种编程语言(如C和C++),提供了丰富的功能模块,包括代码编辑器、编译器、调试器等,满足各种项目开发需求。提供了丰富的开发资源和示例代码,支持多种调试工具和接口(如ST-LINK调试器和JTAG/SWD接口),方便开发者进行调试和性能优化,是STM32应用开发的首选工具。STM32CubeIDE安装02STM32CubeIDE安装一、下载软件:首先,访问STMicroelectronics的官方网站()。在搜索栏中输入“STM32CubeIDE”,然后点击搜索按钮。在搜索结果中找到STM32CubeIDE的页面,进入该页面。STM32CubeIDE安装在下载页面上,选择对应操作系统的版本(如Windows、Linux或macOS),然后点击下载按钮。STM32CubeIDE安装二、安装软件:下载完成后,双击下载的安装文件以开始安装过程,根据安装向导的指引,选择“Next”,“IAgree”。STM32CubeIDE安装根据指引选择安装路径,根据个人电脑硬盘空间选择,建议安装在非C盘,下载器驱动可选择ST-Link。STM32CubeIDE安装完成安装设置后,点击“安装”按钮开始安装,安装过程可能需要一些时间,请耐心等待直到安装完成,可以选择在桌面创建快捷方式。STM32CubeIDE安装安装完成后,按照提示重新启动计算机。在首次启动STM32CubeIDE时,可能会提示配置工作区(Workspace),选择想要保存STM32CubeIDE项目的目录,然后点击“Launch”以继续。STM32CubeIDE安装安装需要的固件库:根据STM32单片机型号选择对应的固件库,找到软件“帮助”菜单下的固件库管理“ManageEmbeddedSoftwarePackages”,选择对应的STM32单片机系列及固件库版本。完成安装和配置后,双击桌面上的STM32CubeIDE图标即可打开并使用软件。Proteus介绍03Proteus介绍Proteus是一款专业的电子电路仿真软件,被广泛应用于电子电路设计、原型验证、系统调试等领域。Proteus具有强大的电路仿真功能,可模拟各种模拟和数字电路,帮助用户快速验证电路设计的正确性和性能。Proteus内置大量的电子元件和器件模型,用户可根据需要选择并搭配使用,方便快捷地设计出所需的电路。Proteus提供直观友好的原理图设计界面,用户可轻松绘制电路原理图,并进行仿真和调试。Proteus支持多种仿真模式,包括直流、交流、数字仿真等,满足不同类型电路的仿真需求。Proteus安装04Proteus安装从官方网站或其他可信来源下载Proteus的安装程序。确保选择适用于计算机操作系统的版本,并确保下载的文件完整且未被篡改。下载完成后,双击安装程序以运行安装向导。在安装向导中,可能需要选择安装的语言和安装路径等选项。Proteus安装安装程序会自动将Proteus及其相关组件安装到选择的安装路径中。安装完成后,可以在开始菜单、桌面或安装路径中找到Proteus的快捷方式,双击快捷方式即可启动Proteus软件,可以开始使用它进行电路设计和仿真工作了。1.4软件使用01Proteus软件使用02STM32CubeIDE软件使用掌握Proteus电子电路仿真软件的使用。掌握STM32CubeIDE开发软件的使用。任务内容:任务要求:Proteus软件使用01Proteus软件使用1.打开软件:双击桌面上的Proteus图标或者从开始菜单中找到Proteus并点击打开。2.创建新项目:在Proteus的主界面中,点击“新建工程”菜单Proteus软件使用然后根据新建工程向导来创建一个新项目。输入项目的名称:新工程,并选择保存路径。工程扩展名保持默认不变。在新建工程向导中选择空的原理图和不创建PCB布板设计。Proteus软件使用在新建工程向导中选择创建固件项目,并且选择“Cortex-M3”系列“STM32F103C8”单片机,这也是本课程中所采用的单片机型号,完成创建并打开电路图编辑界面。Proteus软件使用设计电路:在电路原理图编辑界面中,通过从左侧的元件库中添加电路图所需的元件。点击按钮“P”,在弹出的对话框“Keywords”中输入元件关键词如电阻“res”,发光二极管“led”搜索并添加相应的元件。Proteus软件使用拖放元件到画布上来设计电路,连接元件并设置元件的属性。4.保存项目:在完成所有设计工作后,记得点击“File”菜单并选择“SaveProject”来保存项目,以便下次打开时可以继续编辑。5.关闭软件:完成所有工作后,点击“File”菜单并选择“Exit”来关闭Proteus软件。STM32CubeIDE软件使用02STM32CubeIDE软件使用1.打开软件:双击桌面上的STM32CubeIDE图标或者从开始菜单中找到STM32CubeIDE并点击打开。2.创建新项目:在STM32CubeIDE的主界面中的“项目资源管理器”中选择“CreateaNewSTM32project”选项,创建一个STM32工程。3.选择单片机系列:在项目配置向导中,输入本教材所使用的“STM32F103C8T6”单片机,并在候选的两个条目中任意选择其一。STM32CubeIDE软件使用4.设置STM32工程:在工程设置页面中,按图1-25所示设置工程名、保存路径(建议保存在工作空间)、编程语言等,然后点击“完成”完成项目创建。5.配置项目:项目创建后可以进行一系列的配置,如图1-26所示,包括选择外设、配置时钟、设置引脚等。根据项目需求进行相应配置。STM32CubeIDE软件使用6.编写代码:使用STM32CubeMX自动生成初始化代码,并在图1-26的main.c中,按要求编写发光二极管LED闪烁的应用程序代码。7.保存项目:在完成所有工作后,点击“File”菜单并选择“Save”来保存项目,以便下次打开时可以继续编辑。8.关闭软件:完成所有工作后,点击“File”菜单并选择“Exit”来关闭STM32CubeIDE软件。1.5程序下载01编译项目03下载程序并仿真02生成Hex文件掌握代码的编译方法。学会生成Hex文件。能够实现仿真。任务内容:任务要求:编译项目01编译项目完成代码编写后,可以在STM32CubeIDE中通过选择工具栏的“Debug”或“Release”图标进行代码编译。在Debug模式下生成的可执行文件包含用于调试和跟踪代码的额外信息,适用于开发阶段,可使用调试器进行实时调试和查看变量值等操作。Release模式下生成的可执行文件会进行优化,去除调试信息和其他不必要的内容,以提高执行效率和减小文件大小,适用于最终发布产品的阶段。生成Hex文件02生成Hex文件Hex文件是一种十六进制格式的文件,通常用于将程序下载到STM32单片机的存储器中。Hex文件具有可读性强、易于传输和存储的优点,在嵌入式系统开发中被广泛使用。在STM32CubeIDE中,可设置在编译过程中生成Hex文件。进入“项目”菜单的“属性”选项,勾选相关设置后应用并关闭,编译或构建项目时系统会生成Hex文件。下载程序并仿真03下载程序并仿真在Proteus软件中打开电路图,双击STM32F103C8单片机进入编辑元件界面。在编辑界面中选择ProgramFile,加载STM32CubeIDE编译生成的Hex文件,并确定。确定加载Hex文件后,点击工具栏上的“Run”按钮或选择“Simulate”菜单中的“Run”选项来进行仿真。Proteus将模拟电路的运行情况,并显示仿真结果。THANKYOU嵌入式原理与应用集成电路学院

嵌入式课程组LED显示电路设计应用项目22.1STM32GPIO与时钟系统01STM32GPIO概述04STM32时钟系统重要参数及配置03STM32时钟系统概述02GPIO引脚功能了解GPIO引脚。了解STM32F1系列的时钟参数。掌握STM32CubeIDE对单片机进行时钟配置。任务内容:任务要求:STM32GPIO概述01STM32GPIO概述STM32GPIO是STM32系列单片机中的重要外设模块,用于控制外部设备或处理与外部设备的数字信号交互。GPIO模块具有多个引脚,每个引脚可以配置为输入或输出,并可以通过软件控制其电平状态。GPIO模块的灵活性使得它在嵌入式系统设计中具有广泛的应用,可以用于连接各种外部设备,如传感器、LED、按钮等。通过配置GPIO引脚的工作模式和电平状态,可以实现对外部设备的控制和与外部环境的交互,从而满足不同应用场景下的需求。GPIO引脚功能02GPIO引脚功能每个STM32单片机都有一定数量的GPIO引脚,每个GPIO口都可以由软件配置成如下8种模式:模式描述输入浮空引脚处于高阻态,可接收外部电平信号但不影响信号输入上拉引脚通过上拉电阻连接到高电平,未接入信号时保持高电平输入下拉引脚通过下拉电阻连接到低电平,未接入信号时保持低电平模拟输入引脚被配置为模拟输入,用于连接模拟传感器或设备开漏输出引脚被配置为开漏输出,可拉低但不能拉高推挽输出引脚被配置为推挽输出,可拉低也可拉高推挽复用功能引脚被配置为推挽输出,并具有其他功能,如定时器、串口等开漏复用功能引脚被配置为开漏输出,并具有其他功能,适用于需要外部上拉电阻的情况,如I2C总线GPIO引脚功能STM32的每个IO端口都有7个寄存器来控制:寄存器描述CRL端口0-7配置寄存器CRH端口8-15配置寄存器IDR端口输入数据寄存器ODR端口输出数据寄存器BSRR端口位设置/复位寄存器BRR端口位复位寄存器LCKR端口配置锁定寄存器STM32时钟系统概述03STM32时钟系统概述STM32系列单片机的时钟系统是整个芯片运行的核心,负责提供系统各个模块和外设所需的时钟信号。时钟系统决定了芯片的运行速度和功耗等重要特性,因此了解STM32的时钟系统对于正确配置和优化系统性能至关重要。通过正确配置时钟系统,可以确保系统各个模块和外设能够按照预期的速度和节奏进行工作,提高系统的稳定性和可靠性。合理优化时钟系统可以降低功耗、提高性能,并且适应不同的应用场景和需求,为STM32单片机的应用提供更灵活的选择和更好的性能表现。STM32时钟系统重要参数及配置04STM32时钟系统重要参数一、内部时钟源高速内部时钟(HSI)频率:8MHz精度高,适用于大多数普通应用低速内部时钟(LSI)频率:40kHz用于低功耗模式和RTC(实时时钟)功能STM32时钟系统重要参数二、外部时钟源外部晶体振荡器(HSE)用途:提供更高精度的时钟信号连接方式:晶体振荡器引脚(XTAL1和XTAL2)外部时钟信号输入用途:接收外部时钟源提供的时钟信号STM32时钟系统重要参数三、时钟分频器功能将时钟源的频率分频到各个模块和外设所需的频率配置可设置不同的分频比例以满足系统对时钟频率的需求STM32时钟系统配置通过STM32CubeIDE的图形编译工具,可以轻松进行STM32单片机的时钟配置,正确配置时钟参数,能够优化系统性能,提高应用稳定性。在STM32CubeIDE工程中打开STM32CubeMX图形编译工具,点击“ClockConfiguration”选项卡进入STM32时钟配置界面。STM32时钟系统重要参数及配置在STM32系列中,时钟系统形成了一棵复杂的时钟树结构,通过参数配置可以将时钟频率设置为72MHz2.2STM32CubeIDEGPIO初始化01GPIO引脚功能选择03生成代码02GPIO输出引脚配置学会GPIO引脚功能的选择。学会GPIO输出引脚的配置。学会生成代码并查阅。任务内容:任务要求:GPIO引脚功能选择01GPIO引脚功能选择打开STM32CubeMX图形编译工具。在项目中选择“Pinout&Configuration”选项卡。在“SystemCore”模块中选择“GPIO”。芯片引脚图及引脚状态将显示在界面右侧的“Pinoutview”中。用户可以直接在图上选择引脚并设置其功能。点击特定引脚,弹出对话框以选择GPIO输入、输出等状态。GPIO引脚功能选择STM32引脚功能引脚功能描述ADC1_IN8用于ADC(模数转换器)的输入通道,用于模拟信号的采样ADC2_IN8用于ADC(模数转换器)的输入通道,用于模拟信号的采样TIM1_CH2N用于定时器(Timer)的通道输出,用于PWM输出或捕获比较等定时器功能TIM3_CH3用于定时器(Timer)的通道输出,用于PWM输出或捕获比较等定时器功能GPIO_Input通用输入输出引脚的默认功能,被配置为通用输入,具体取决于所选引脚的硬件连接GPIO_Output通用输入输出引脚的默认功能,被配置为通用输出,具体取决于所选引脚的硬件连接GPIOAnalogGPIO引脚在复位状态下被配置为模拟输入,用于模拟信号的输入,而不是数字信号的输入或输出EVENTOUTGPIO引脚在复位状态下被配置为事件输出,用于将特定事件的状态输出到外部GPIO_EXTI0GPIO引脚的外部中断0功能,在复位状态下,引脚可能被配置为外部中断,用于触发特定事件或处理外部输入GPIO输出引脚配置02GPIO输出引脚配置引脚功能中选择“GPIO_Output”后对应引脚就可以作为通用输出口使用,这时需要在“GPIOModeandConfiguration”菜单中对引脚进行详细配置。1.GPIOOutputLevel(输出电平):用于配置GPIO引脚在输出模式下的默认电平状态。可选择高电平(High)或低电平(Low)。引脚在输出模式下会保持选择的默认电平状态,直到通过代码显式改变。GPIO输出引脚配置2.GPIOMode(GPIO模式):用于选择STM32单片机引脚作为输出时的模式。OutputPushPull(推挽输出):输出引脚可提供电流来驱动外部负载,能提供高和低电平。OutputOpenDrain(开漏输出):输出引脚只能拉低到地,处于高电平时不提供电流,需要外部上拉电阻拉高电平。选择输出模式需根据实际应用和外部电路需求进行。3.GPIOPull-up/Pull-down(上拉/下拉电阻):用于选择STM32单片机引脚作为输入时的上拉或下拉电阻。上拉电阻将引脚拉高到逻辑高电平,下拉电阻将引脚拉低到逻辑低电平。有助于保持输入引脚在未连接外部设备时的稳定状态。GPIO输出引脚配置4.MaximumOutputSpeed(最大输出速度):用于配置GPIO引脚在输出模式下的最大驱动能力。可选择不同速度级别,如低速(Low)、中速(Medium)、高速(High)等。速度级别影响引脚切换状态的速度、输出电流能力和功耗。5.UserLabel(用户标签):允许用户为特定的GPIO引脚添加自定义标签或注释。在生成的代码中使用自定义标签来标识该引脚,而不是默认的引脚名称。提高代码的可读性和可维护性,方便区分每个GPIO引脚的作用和功能。生成代码03生成代码GPIO引脚配置完后点击“Project”菜单中的“GenerateCode”生成代码。等待进度条完成后,在STM32CubeIDE中生成了初始化后的工程目录及文件。2.3STM32CubeIDE实现LED闪烁01电路设计04编译运行代码03编写代码02生成代码学会用Proteus绘制电路图。学会在STM32CubeIDE中配置选项。学会生成代码并查阅。学会编译代码并运行。任务内容:任务要求:电路设计01电路设计电路设计要求:使用STM32F103C8单片机的PB0引脚控制LED的开和关状态当PB0引脚输出高电平时,LED熄灭;当输出低电平时,LED点亮,电阻R1限流通过不断交替改变PB0引脚的状态,实现LED的闪烁效果生成代码02生成代码生成代码流程:1.在STM32CubeIDE中新建工程,然后打开STM32CubeMX。2.在“Pinout&Configuration”页面中找到“RCC”选项,选择“Crystal/CeramicResonator”作为时钟源,将时钟频率调整为72MHz。3.在“Pinout&Configuration”页面中找到芯片示意图的“Pinoutview”,选择PB0引脚。4.点击PB0,在弹出的对话框中选择“GPIO_Output”。5.对PB0进行设置:默认输出电平为低电平,输出模式为推挽输出,无上拉或下拉电阻,最大输出速度为低速。生成代码6.在“CodeGenerator”选项中勾选“Generateperipheralinitializationasapairof'.c/.h'filesperperipheral”选项。7.点击“Project”菜单中的“GenerateCode”生成代码。生成代码STM32CubeMX生成代码中包含的三个初始化函数:1.HAL_Init():HAL_Init()函数是HAL库的初始化函数,用于初始化HAL库的运行环境。在程序执行前调用HAL_Init()函数,确保HAL库能够正常工作。通常在main函数的开头处调用。生成代码2.SystemClock_Config():SystemClock_Config()函数是由STM32CubeMX自动生成的,用于配置系统时钟。在该函数中,设置了系统时钟源、时钟频率等参数。通过调用该函数,确保单片机能够以正确的时钟频率运行。生成代码3.MX_GPIO_Init():MX_GPIO_Init()函数是由STM32CubeMX自动生成的,用于初始化GPIO引脚。在该函数中,配置了各个GPIO引脚的工作模式、输出类型、上拉/下拉等参数。通过调用该函数,确保GPIO引脚能够按照预期工作。编写代码03编写代码在生成的工程文件中,找到“main.c”文件,并在右边的代码编辑页面中定位到“USERCODEBEGINWHILE”和“USERCODEENDWHILE”之间的位置,在这之间写入控制LED闪烁的代码。编写代码控制LED闪烁代码:编写代码代码中用到了HAL库提供了写引脚函数“HAL_GPIO_WritePin()”和延时函数“HAL_Delay()”函数名称HAL_GPIO_WritePin()HAL_Delay()功能设置指定GPIO引脚的输出状态,以实现将引脚设置为高电平或低电平在毫秒级别上生成延迟,用于在微控制器执行代码时生成指定时间的延迟使用说明GPIOx:要操作的GPIO端口。例如GPIOA、GPIOB等GPIO_Pin:要操作的GPIO引脚。GPIO_PIN_x,其中x是引脚编号(0到15)PinState:要设置的引脚状态,可以是GPIO_PIN_RESET(低电平)或GPIO_PIN_SET(高电平)Delay:延迟的时间,单位为毫秒示例代码HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);HAL_Delay(1000);编译运行代码04编译运行代码完成代码编写后,使用菜单中的“项目”->“属性”,在“属性”菜单中依次找到“C/C++Build”->“Settings”->“MCUPostbuildoutputs”并且勾选“ConverttoInterHexfile”选项。编译运行代码勾选完成点击“应用并关闭”,通过点击工具栏“”图标选择“Debug”或者“Release”进行编译,当代码没有错误或者警告时控制台会输出以下信息,并在对应文件夹生成Hex文件。编译运行代码打开Proteus绘制的电路图,双击单片机打开编辑元件界面,在“ProgramFile”中加载上述步骤中生成的Hex文件。在编辑元件页面设置“OSCFrequency”振荡器频率为72M,"ClockScale"时钟分频器选择"8Times"。编译运行代码点击运行,信号灯开始闪烁。LED灯闪烁频率可以通过修改延时函数“HAL_Delay(100)”中的参数来改变。设定值越小,LED闪烁频率越高,LED闪烁越快;反之,LED闪烁频率降低,闪烁速度变慢。2.4实战演练-设计花样灯01设计要求02编写代码掌握Proteus电路的设计。学会用多种方法编写代码。任务内容:任务要求:设计要求01设计要求STM32F103C8单片机的PB0~PB7连接8个LED灯,使8个LED灯从上到下循环闪烁,时间间隔为0.5秒,呈现出流水灯闪烁的效果。编写代码02编写代码1.配置GPIO引脚:使用STM32CubeMX工具配置用于控制8个LED灯的GPIO引脚。将8个LED灯连接到STM32F103C8单片机的PB0-PB7引脚上,确保每个引脚都配置为推挽输出模式、默认高电平、无上拉下拉电阻、最大输出速度为低速。编写代码2.生成代码:在STM32CubeMX中完成GPIO配置后,点击“Project”菜单中的“GenerateCode”生成代码。3.在STM32CubeIDE中编写应用程序:打开生成的STM32CubeIDE项目,在main.c文件中,编写控制8个LED灯流水灯闪烁的代码。编写代码位操作法实现流水灯在每次循环中,依次点亮和熄灭GPIOB的8个引脚控制的LED。每隔500毫秒(0.5秒),依次点亮GPIOB一个引脚的LED,然后再将其熄灭,并点亮下一个

引脚的LED,以此类推,直到最后一个引脚被点亮后又回到第一个引脚,循环继续。HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0):将GPIOB的引脚0设置为低电平(点亮LED)。HAL_Delay(500):延时500毫秒。HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1):将GPIOB的引脚0设置为高电平(熄灭LED)。以此类推,依次操作GPIOB的引脚1至引脚7,使得8个LED依次流水灯地点亮和熄灭。while(1):无限循环,保持LED的流水灯效果持续进行。编写代码取反函数方法实现流水灯HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0):将GPIOB的引脚0的输出状态取反,

即将其从低电平翻转到高电平或从高电平翻转到低电平,实现LED的点亮和熄灭。HAL_Delay(500):延时500毫秒。HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0):再次将GPIOB的引脚0的输出状态

取反,实现LED的熄灭和点亮。以此类推,依次操作GPIOB的引脚1至引脚7,使得8个LED依次流水灯地点亮和熄灭。代码中用到了HAL库引脚翻转函数HAL_GPIO_TogglePin()。

voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)

GPIOx

:要操作的GPIO端口GPIO_Pin:要操作的GPIO引脚编写代码寄存器控制方法实现流水灯这段代码使用了for循环来循环遍历一个存储了流水灯状态的数组,

并将数组中的值依次写入到GPIOB的ODR寄存器中。每个值代表了一个流水灯状态,通过不断更新ODR寄存器的值,

实现了流水灯的效果。和前两种方法相比,此方法需要编写的代码较少,通过此方法能够

轻松实现更为复杂的花样灯效果。但需要提前准备好存储流水灯状态的数组,如代码中的数组“table[]”

数组中的内容就是流水灯对应的编码。编写代码流水灯编码表PB7PB6PB5PB4PB3PB2PB1PB0编码111111100xfe111111010xfd111110110xfb111101110xf7111011110xef110111110xdf101111110xbf011111110x7f2.5实战演练-交通信号灯的设计01设计要求03编写代码02电路设计掌握单片机控制LED的程序设计及编码方法。任务内容:任务要求:设计要求01设计要求按下表要求设计一个十字路口交通信号灯东西信号绿灯亮绿灯闪黄灯亮红灯亮时间24s3s3s30s南北信号红灯亮绿灯亮绿灯闪黄灯亮时间30s24s3s3s电路设计02电路设计STM32F103C8单片机的PB0~PB6控制十字路口的交通信号灯。编写代码03编写代码1.配置GPIO引脚:使用STM32CubeMX工具配置用于控制交通信号灯6个GPIO引脚。通过标号模式将6个LED灯连接到STM32F103C8单片机的PB0-PB5引脚上,确保每个引脚都配置为推挽输出模式、默认高电平、无上拉下拉电阻、最大输出速度为低速,编写代码2.生成代码:在STM32CubeMX中完成GPIO配置后,点击“Project”菜单中的“GenerateCode”生成代码。3.在STM32CubeIDE中编写应用程序:打开生成的STM32CubeIDE工程,在main.c文件中,编写控制交通信号灯的代码。编写代码交通信号灯代码编写代码交通信号灯编码表PB7PB6PB5PB4PB3PB2PB1PB0十六进制代码空空南北绿南北黄南北红东西绿东西黄东西红111100110xf3111101110xf7111101010xf5110111100xde111111100xfe111011100xeeTHANKYOU嵌入式原理与应用集成电路学院

嵌入式课程组STM32数码管显示原理与应用项目33.1数码管01数码管概述04数码管显示方式03数码管字段编码02数码管的结构和工作原理了解数码管的结构和工作方式。了解数码管字段编码模式。了解数码管显示方式。任务内容:任务要求:数码管概述01数码管概述数码管是一种用于显示数字的电子元件,通常由多个发光二极管(LED)组成,能够显示数字0到9以及一些特殊字符,如字母和符号。数码管也称为LED数码管,根据其段数的不同可分为七段数码管和八段数码管。八段数码管相比七段数码管多一个发光二极管单元用于显示小数点,因此外形稍有不同。数码管具有亮度高、低功耗、寿命长等特点,广泛应用于各种计数、显示和指示系统中,如时钟、计时器、计数器、温度显示器等。数码管的结构和工作原理02数码管的结构和工作原理八段数码管由8个发光二极管构成,能够显示数字、字母和符号,通过不同的组合实现。数码管根据发光二极管连接的方式可分为共阳极数码管和共阴极数码管。共阳数码管的所有发光二极管的正极连接到一起形成公共端,在使用时应将公共端接到+5V。当某一字段发光二极管的负极为低电平时,对应字段点亮;负极为高电平时,对应字段不亮。共阴数码管的所有发光二极管的负极连接到一起形成公共端,在使用时应将公共端接到地GND。当某一字段发光二极管的正极为高电平时,对应字段点亮;正极为低电平时,对应字段不亮。数码管字段编码03数码管字段编码单片机连接数码管时,通常GPIO口8个引脚从低位到高位分别连接数码管a~dp八个引脚,在单片机系统中要使数码管显示出相应的数字或字符时,GPIO口就需要输出相应的字段编码。显示内容PX7PX6PX5PX4PX3PX2PX1PX0共阴字段码共阳字段码dpgfedcba0001111110x3f0xc01000001100x060xf92010110110x5b0xa43010011110x4f0xb04011001100x660x995011011010x6d0x926011111010x7d0x827000001110x070xf88011111110x7f0x809011011110x6f0x90A011101110x770x88B011111000x7c0x83C001110010x390xc6D010111100x5e0xa1E011110010x790x86F011100010x710x8e数码管显示方式04数码管显示方式静态显示方式每个LED分段直接与驱动电路的输出端口相连优点:

简单直接,适用于少量数码管的显示

控制电路简单,成本较低缺点:

需要较多的引脚

当数码管数量增多时,引脚数量会大幅增加数码管显示方式动态扫描显示方式每个数码管的LED分段依次被快速地点亮,形成连续的显示效果优点:

有效节省引脚数量,适用于大量数码管的显示

可实现多个数码管同时显示缺点:

驱动电路复杂,需要采用锁存器硬件模块来控制数码管的扫描

对控制时序要求较高数码管显示方式锁存器驱动方式数码管的共阳极(或共阴极)端子连接到同一个电源,LED分段分别连接到锁存器的输出端口锁存器的输入端口连接到单片机的输出端口,控制锁存器的状态优点:

节省引脚数量,降低连接成本和布局复杂度

可实现多个数码管的同时显示缺点:

需要额外的锁存器芯片,增加了硬件成本

控制时序复杂,需要确保锁存器的输出信号与数码管的显示时序匹配3.2一位数码管显示程序设计01电路设计02编写代码能使用Proteus将STM32F103C8单片机PB0-BB7连接共阴数码管。能通过编程实现数码管循环显示0-F。任务内容:任务要求:电路设计01电路设计数码管引脚从左到右依次为a,b,c,d,e,f,g,dp,最右侧的是公共端。分别与STM32F103C8单片机的PB0-PB7相连。编写代码02编写代码使用STM32CubeMX工具配置用于数码管的8个GPIO引脚。将数码管的8个引脚按固定顺序连接到STM32F103C8单片机的PB0-PB7引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速。编写代码2.生成代码在STM32CubeMX中完成GPIO配置后,点击“Project”菜单中的“GenerateCode”生成代码。3.编写代码打开生成的STM32CubeIDE工程,在main.c文件中,编写数码管显示代码。编写代码程序首先定义了一个名为seg_num[]的数组,其中存储了共阴数码管每个数字对应的段码,每个元素表示一个数字在循环体内部,通过将seg_num[]数组中的元素依次写入GPIOB的输出数据寄存器,来控制共阴数码管显示数字0到F。每个数字的显示时间为0.5秒,通过调用HAL_Delay(500)

函数实现延时。编写代码仿真效果-数码管循环显示0-F3.3STM32CubeIDE自定义函数01自定义函数作用02STM32CubeIDE自定义函数流程了解自定义函数的作用。掌握自定义函数的流程。任务内容:任务要求:自定义函数作用01自定义函数作用功能封装与模块化:自定义函数将具有特定功能的代码封装到一个函数中,实现功能模块化,提高代码的可读性和可维护性。代码复用:自定义函数可以在不同的地方重复使用,从而提高代码的复用性,避免了重复编写代码,提高了开发效率。提高代码可读性:将复杂的功能抽象为一个函数名,提高了代码的可读性,通过命名和函数注释清晰地表达功能和用途。简化调试和测试:将代码封装为函数使得调试和测试更简单,可以更快地定位到具体函数进行调试,而不必检查整个程序的代码。项目组织与管理:自定义函数将项目的不同功能模块进行逻辑划分,并封装为函数库或模块,便于项目组织和管理,提高了开发效率。STM32CubeIDE自定义函数流程02STM32CubeIDE自定义函数流程1.为自定义函数创建文件夹STM32CubeIDE生成代码创建工程目录如下图所示,用户常用的文件都在“Core”目录下,“Inc”文件夹存放相关头文件,“Src”文件夹存放源文件,我们创建的自定义函数文件夹也放在“Core”目录下。STM32CubeIDE自定义函数流程选中“Core”文件夹点击鼠标右键,并依次点击“新建”->“文件夹”,并起名“HardWare”,“Core”目录下就会新增一个“HardWare”文件夹。STM32CubeIDE自定义函数流程该文件夹可用于存放各种外设相关的函数文件,如显示、键盘等,使代码实现功能模块化。在该文件夹下再新建一个文件夹存放数码管自定义函数。STM32CubeIDE自定义函数流程2.创建自定义函数(1)创建源文件选中新建的“7seg”文件夹点击鼠标右键,并依次点击“新建”->“SourceFile”创建源文件,并在弹出的对话框中为源文件起名“7seg.c”,需要注意源文件后缀必须加“.c”STM32CubeIDE自定义函数流程(2)创建头文件选中新建的“7seg”文件夹点击鼠标右键,并依次点击“新建”->“HeaderFile”创建头文件,并在弹出的对话框中为头文件起名“7seg.h”,需要注意源文件后缀必须加“.h”STM32CubeIDE自定义函数流程3.编写自定义函数(1)通过“include”关联相关头文件“7seg.h”和“main.h”。(2)将原来在“main.c”中的代码移植到“7seg.c”文件中。(3)在“7seg.h”中加入显示函数的声明。STM32CubeIDE自定义函数流程4.主程序调用自定义显示函数(1)包含自定义显示函数头文件。(2)主程序中调用自定义显示函数STM32CubeIDE自定义函数流程5.工程文件中关联文件点击“项目”菜单,选择“属性”。在弹出的对话框中,依次点击“C/C++General”下拉项中的“PathsandSymbols”。在“PathsandSymbols”界面,点击“Add”按钮。弹出“adddirectorypath”界面,点击“Workspace”工作空间。STM32CubeIDE自定义函数流程在目录选择窗口中,选择之前创建的自定义函数目录“7seg”,并点击确定。STM32CubeIDE自定义函数流程回到“PathsandSymbols”界面,已经出现了添加的“7seg”目录地址。点击“应用并关闭”即可完成设置。3.4函数调用实现数码管显示设计01相关概念02编写代码了解有参函数和无参函数。学习编写显示函数和主程序。任务内容:任务要求:相关概念01相关概念有参函数(带参数的函数)和无参函数(不带参数的函数)是编程中常见的两种函数类型。有参函数:有参函数指的是在函数定义时需要传入参数的函数。这些参数可以是函数执行时所需的数据或信息,它们被用于在函数内部执行特定的操作。有参函数能够接收外部传入的数据,并且可以根据传入的参数值执行不同的操作。无参函数:无参函数指的是在函数定义时不需要传入参数的函数。这些函数不依赖外部传入的数据或信息,它们的执行结果通常是固定的或者仅与函数内部的逻辑有关。编写代码02编写代码一、编写显示函数在有参显示函数中,函数只需要满足数码管显示功能即可,显示内容和显示方式则由主程序控制。显示函数代码编写代码二、编写主函数在主程序中调用有参显示函数,主程序可以自定义显示内容和显示方式①显示指定数值代码:该代码仿真实现数码管固定显示“3”,可以通过修改数值改变数码管显示内容。②数码管循环显示9-0代码:编写代码STM32是由意法半导体(STMicroelectronics)推出的一系列32位ARMCortex-M单片机。STM32系列单片机具有丰富的外设和强大的性能。STM32系列单片机广泛应用于工业控制、汽车电子、消费类电子等领域。STM32系列微控制是嵌入式系统设计中的重要组成部分。3.5多位数码管静态显示设计01电路设计03编写代码02数据处理掌握以静态显示的方式显示两位数码管。任务内容:任务要求:电路设计01电路设计打开Proteus软件并新建工程。从元件库中添加“7SEG-MPX1-CC”共阴数码管组件。将个位数码管连接至GPIOB的低8位。将十位数码管连接至GPIOB的高8位。数据处理02数据处理如果数码管要显示数值“24”,这两个字段码是如何产生的首先定义了一个名为a的变量,赋值为24,表示待处理的两位数字。使用除法运算将变量a除以10,得到的商保存在变量shi中,即获取十位数。使用求余运算将变量a除以10的余数保存在变量ge中,即获取个位数。通过以上操作,将数字24拆分成十位数和个位数,并存储在变量shi和ge中。可以利用这两个变量的值来获取对应数字的段码,用于在数码管上进行显示。编写代码03编写代码1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具配置连接两个数码管的16个GPIO引脚。将两个数码管的16个引脚按固定顺序连接到STM32F103C8单片机的PB0-PB15引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速。编写代码3.编写代码与控制单个数码管相比,控制两位数码管的静态显示代码编写存在一个难点,即需要使用同一个GPIO口控制两个数码管的显示。其中,GPIOB的低8位用于输出数码管个位的字段码,而GPIOB的高8位用于输出数码管十位的字段码。因此,设计思路是将数码管的个位和十位字段码整合在一起,由GPIOB同时输出。这样,就可以实现两个数码管同时显示数值。编写代码将两个8位的字段码整合在一个16位变量的过程,具体步骤如下:创建一个16位的变量,用于存储两个8位字段码的整合结果。将十位字段码赋值给变量的低8位,并将该变量向左移动8位。将个位字段码和变量进行或运算就能够正确地将两个字段码整合在一起。整合完成后,这个16位变量就包含了两个8位字段码的信息。编写代码自定义函数“7seg.c”代码编写代码自定义函数“7seg.h”代码第三行代码是定义了一个小数点点亮的宏定义"point",编程采用的字段码是不包含小数点的七段码,因此数码管显示时数码管都是不会点亮的,如果需要数码管的小数点点亮,可以单独控制小数点引脚,小数点是由PB15控制,可以通过宏定义"point"使小数点点亮。编写代码主函数“main.c”核心代码3.6锁存器在数码管电路中的应用01锁存器03编写代码02电路设计学会锁存器控制数码管静态显示电路设计。学会锁存器控制数码管代码编写。任务内容:任务要求:锁存器01锁存器锁存器简介:锁存器是逻辑电路元件,用于将输入信号的状态保持在输出端,直到下一次输入信号到来或复位操作。基于触发器特性工作,可在时钟信号或输入信号变化下触发状态转换。常见类型包括RS触发器、D触发器、JK触发器和T触发器。工作原理:当输入信号变化时,锁存器保存当前输入状态,并持续输出该状态。输出状态保持直到接收到下一个输入信号或复位信号。在电路中起到存储、延迟和信号控制作用。74HC573锁存器:74HC573是一种8位锁存器,可存储8位二进制数据,用于数字系统的数据存储和输出控制。具有8个输入端(D0-D7)、8个输出端(Q0-Q7)和一个控制端(LE)用于控制输出状态。锁存器74HC573工作原理:控制端(LE)为高电平时,锁存器处于工作状态,输入信号(D0-D7)传递到输出端(Q0-Q7)。控制端(LE)为低电平时,锁存器被锁定,输出状态保持不变,不受输入信号影响。特点:输入端具有8位数据输入,输出端具有8位数据输出,适用于8位数据存储和输出控制。具有高速和低功耗的特点,适用于数字系统的高性能应用。可通过级联多个锁存器实现更多位的数据存储和输出控制。应用场景:数据存储与输出控制:可用于存储临时数据或控制外部设备。时序逻辑:配合时钟信号实现复杂的时序控制功能。数字系统中的高性能应用:适用于要求高速和低功耗的数字系统。片选信号(低有效)控制信号INPUTOUTPUT`OELEDQ0111010000XQ01XXZ电路设计02电路设计同样显示两位数码管占用的GPIO口减少了很多,并且以后每增加一个数码管只需要多提供一位GPIO口即可,这就是通过锁存器控制数码管静态显示的优势。PA0-PA7与两个锁存器的输入口D0-D7相连,用于输入数码管段码,PA8和PA9分别连接两个锁存器,用于控制锁存器状态。OE接地使两个锁存器始终处于选中工作状态。编写代码03编写代码1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具配置连接锁存器的10个GPIO引脚。将两个锁存器的8个引脚一一并联按固定顺序连接到STM32F103C8单片机的PA0-PA7引脚上,另外将两个锁存器的LE分别接到PA8和PA9引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速,并且PA8和PA9分别添加用户标签“GE”、“SHI”。编写代码定义两个锁存器:十位锁存器:控制十位数码管的显示。个位锁存器:控制个位数码管的显示。共用一组GPIO口:两个锁存器的输入共用一组GPIO口,接收相同的字段码。分时接收字段码:先取出十位数码管要显示数值的字段码,通过GPIOA输出字段码,通过PA8控制十位锁存器LE产生下降沿,使十位锁存器锁存并输出该段码。再取出个位数码管要显示数值的字段码,通过GPIOA输出字段码,通过PA9控制个位锁存器LE产生下降沿,使个位锁存器锁存并输出该段码。锁存器状态控制:在十位锁存器输出段码并锁存时,个位锁存器处于锁存状态,不接收新的字段码。在个位锁存器输出段码并锁存时,十位锁存器处于锁存状态,不接收新的字段码。编写代码自定义函数“7seg.c”代码编写代码主函数“main.c”代码编写代码仿真效果3.7数码管动态显示设计01动态显示概述04四位数码管动态显示设计03数码管动态显示原理02动态显示数码管结构了解动态显示数码管结构。了解数码管动态显示原理。学会四位数码管动态显示设计。任务内容:任务要求:动态显示概述01动态显示概述数码管的动态显示原理是一种通过时间分片的方式,实现多位数码管依次显示数字的方法。其基本原理是利用人眼视觉暂留的特性,通过高速切换每个数码管的显示,使得所有数码管看起来像是同时显示的。动态显示数码管结构02动态显示数码管结构当数码管的位数比较多时,若采用静态显示方式,会占用大量的I/O口,硬件电路比较复杂。为了简化电路,降低成本,就采用了动态显示方式。动态显示电路是将各位数码管的相同的字段连在一起,由一个并行I/O口控制,各位数码管的公共端由另一个并行I/O口控制。动态显示方式占用I/O口少,电路简单,但程序设计比静态显示方式复杂。数码管动态显示原理03数码管动态显示原理依次选通每个数码管:单片机的GPIO口(Px口)输出字段码,决定显示的内容。单片机的另一个GPIO口(Py口)输出位码,决定哪位数码管点亮。实现轮流显示内容,例如,要求显示“12345678”。首先,Px口输出“1”的字段码“0x3f”,Py口输出位码“0xfe”选择第一个数码管点亮,调用1~2ms的延时程序。然后,Px口输出“2”的字段码“0x06”,Py口输出位码“0xfd”选择第二个数码管点亮,调用1~2ms的延时程序。以此类推,依次显示“12345678”,并反复循环。实现连续显示效果:按一定的时间间隔逐个切换数码管的选通状态,使每个数码管在人眼中呈现连续显示的效果。四位数码管动态显示设计04四位数码管动态显示设计1.电路设计在Proteus中新建基于STM32F103C8的工程,在元件模式中添加“74HC573”锁存器和“7SEG-MPX4-CCBLUE”的四位共阴动态显示数码管,并绘制仿真电路图四位数码管动态显示设计2.编写代码四位数码管动态显示程序的设计流程是:GPIO口PB0-PB7发送第一位显示数值的段码(显示数值)GPIO口PB0-PB7发送第一位显示数值的位码(显示位置)延时1-2ms让第一位数码管显示数值GPIO口PB0-PB7发送第二位显示数值的段码(显示数值)GPIO口PB0-PB7发送第二位显示数值的位码(显示位置)延时1-2ms让第二位数码管显示数值GPIO口PB0-PB7发送第三位显示数值的段码(显示数值)GPIO口PB0-PB7发送第三位显示数值的位码(显示位置)延时1-2ms让第三位数码管显示数值GPIO口PB0-PB7发送第四位显示数值的段码(显示数值)GPIO口PB0-PB7发送第四位显示数值的位码(显示位置)延时1-2ms让第四位数码管显示数值循环程序,数码管动态显示指定数值。四位数码管动态显示设计根据设计流程使第一个数码管点亮的代码如下:四位数码管动态显示设计只要再复制三次以上代码并且修改对应的段码和位码就可以使四位数码管同时显示,但是这里要强调一个在动态显示中重要的概念“消影”。数码管动态显示中的“消影”指的是在切换显示不同数码管时,先将之前显示的数码管熄灭(消影),然后再点亮新的数码管。这种操作是为了确保在切换数码管显示时不会出现两个数码管同时显示的情况,防止出现乱码,从而保证显示的准确性和清晰度。3.优化代码以上代码过于冗长,代码可以分为四组,每组控制一位数码管显示指定数值,四组代码中除了段码、位码部分基本相同,可以通过循环方式对代码进行优化。四位数码管动态显示设计仿真结果3.8实战演练-动态显示日历设计01设计要求03编写代码02电路设计掌握单片机控制数码管的程序设计方法。掌握动态显示日历的设计原理。提高编码能力和逻辑思维能力。任务内容:任务要求:设计要求01设计要求使用STM32CubeIDE进行单片机程序设计,结合Proteus进行电路仿真,实现数码管动态显示年月日的功能。实现动态显示的功能:设计程序使得数码管可以动态显示当前的年、月、日信息,包括年份的四位数字、月份的两位数字、日期的两位数字。在STM32CubeIDE中编写完成程序后,通过Proteus进行电路仿真验证,确保程序设计的正确性和可靠性。电路设计02电路设计在Proteus中新建基于STM32F103C8的工程,在元件模式中添加“74HC573”锁存器和“7SEG-MPX8-CCBLUE”的八位共阴动态显示数码管,并绘制仿真电路图编写代码03编写代码按要求在STM32CubeMX中完成GPIO及时钟配置后,点击“Project”菜单的“GenerateCode”生成代码,会在STM32CubeIDE自动创建工程文件,在工程文件“Core”目录下新建“HardWare”->“7seg”文件夹,并创建“7seg.c”和“7seg.h”文件,打开“7seg.c”文件开始编写代码。完整代码见教材。编写代码仿真结果3.9实战演练-数码管滚动显示设计01设计要求03编写代码02电路设计掌握单片机动态显示信息的设计原理。掌握显示信息滚动显示的方法。提高编码能力和逻辑思维能力。任务内容:任务要求:设计要求01设计要求当屏幕空间有限,而想要显示更多内容时通常可以使用信息滚动显示的方式,如出租车后的LED广告牌。使用STM32CubeIDE进行单片机程序设计,结合Proteus进行电路仿真,实现数码管信息滚动显示的功能。实现滚动显示的功能:单片机控制八位数码管动态显示的方式,实现对“0-F”十六个信息的滚动显示,信息从右入左出。在STM32CubeIDE中编写完成程序后,通过Proteus进行电路仿真验证,确保程序设计的正确性和可靠性。电路设计02电路设计在Proteus中新建基于STM32F103C8的工程,在元件模式中添加“74HC573”锁存器和“7SEG-MPX8-CCBLUE”的八位共阴动态显示数码管,并绘制仿真电路图编写代码03编写代码按要求在STM32CubeMX中完成GPIO及时钟配置后,点击“Project”菜单的“GenerateCode”生成代码,会在STM32CubeIDE自动创建工程文件,在工程文件“Core”目录下新建“HardWare”->“7seg”文件夹,并创建“7seg.c”和“7seg.h”文件,打开“7seg.c”文件开始编写代码。完整代码见教材。编写代码仿真结果THANKYOU嵌入式原理与应用集成电路学院

嵌入式课程组STM32键盘控制技术与应用项目44.1独立式按键设计01独立式按键电路结构04独立式按键代码设计03独立式按键电路设计02按键抖动的消除了解独立式按键电路结构。了解消抖的方法。学会独立式按键电路设计和代码编写。任务内容:任务要求:独立式按键电路结构01独立式按键电路结构独立式键盘按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其它按键的工作状态,单片机可直接读取该I/O线的电平状态,通过电平状态判断按键是否按下。这种按键硬件结构简单、程序设计容易、判断速度快、使用方便,但每一个按键就要占用一个I/O口,因此,仅适用于按键数量较少的系统中。上拉按键和下拉按键是常见的按键连接方式,用于在单片机或其他电路中检测按键状态。独立式按键电路结构上拉按键:在上拉按键连接中,按键引脚连接到VCC(高电平),而通过一个上拉电阻(Pull-upResistor)连接到VCC和按键引脚之间。当按键未被按下时,引脚的电平为高电平,因为上拉电阻将引脚连接到VCC。当按键按下时,按键引脚与地之间会形成一个较低的电阻路径,使得引脚的电平从高电平变为低电平。下拉按键:在下拉按键连接中,按键引脚连接到地(低电平),而通过一个下拉电阻(Pull-downResistor)连接到地和按键引脚之间。当按键未被按下时,引脚的电平为低电平,因为下拉电阻将引脚连接到地。当按键按下时,按键引脚与VCC之间会形成一个较低的电阻路径,使得引脚的电平从低电平变为高电平。4.2外部中断01单片机中断系统04STM32单片机的NVIC03中断服务函数的映射关系02STM32中断线了解单片机中断系统。了解中断服务函数的映射关系。了解STM32单片机的NVIC。任务内容:任务要求:单片机中断系统01单片机中断系统1.中断的概念当CPU在正常执行某一程序时,由于内部或外部的突发事件,要求CPU暂停正在执行的程序而转去处理突发事件(即执行突发事件的中断服务程序),事件处理结束后返回原来被中断的程序断点处(被中断的下一条指令)继续执行,这个过程称为中断。单片机中断系统当CPU正在执行某个低优先级的中断服务程序时,如果有优先级高的中断源请求中断时,CPU可以中断正在执行的低优先级的中断服务程序,转去处理优先级高的中断服务程序,当高优先级的中断服务程序处理结束后返回刚才被中断的低优先级中断服务程序的断点处继续执行,这个过程称为中断嵌套。单片机中断系统2.引入中断的好处实现分时操作:只有当服务对象向CPU发出中断申请时,才去为它服务,这样单片机可以同时为多个对象服务,从而大大提高工作效率。实现实时处理:利用中断技术,各个服务对象可以根据需要随时向CPU发出中断请求,CPU能及时发现和处理中断请求,以满足实时控制的要求。进行故障处理:发生难以预料的情况或故障时,例如突然断电、存储出错、运算溢出等,系统及时发出请求中断,由CPU快速作出相应的处理,可以提高系统自身的可靠性。STM32中断线02STM32中断线STM32单片机外部中断的优势在于它的每个IO口都可以作为外部中断的中断输入口。在STM32F103系列中,中断控制器支持19个外部中断/事件请求。每个中断都有独立的状态位、触发和屏蔽设置。具体来说,STM32F103的19个外部中断包括:线0~15:对应外部IO口的输入中断。线16:连接到功率监视器(PVD)输出。线17:连接到实时时钟(RTC)闹钟事件。线18:连接到USB唤醒事件。STM32中断线GPIO中断映射关系STM32单片机提供了最多有7组GPIO口,每组有16个GPIO引脚。但是只有16个中断线可供IO口使用。每个中断线最多对应7个IO口。中断服务函数的映射关系03中断服务函数的映射关系STM32单片机提供了16条外部IO口的输入中断线,但是没有匹配16个中断服务函数,0-4号线有各自独立的中断通道及中断服务函数,而5-9号线共用一个通道和一个服务函数,10-15号线同样也共用一个通道和一个服务函数。GPIO中断通道IRQn中断服务函数IRQHandlerGPIO_Pin0EXTI0_IRQnEXTI0_IRQHandlerGPIO_Pin1EXTI1_IRQnEXTI1_IRQHandlerGPIO_Pin2EXTI2_IRQnEXTI2_IRQHandlerGPIO_Pin3EXTI3_IRQnEXTI3_IRQHandlerGPIO_Pin4EXTI4_IRQnEXTI4_IRQHandlerGPIO_Pin5—GPIO_Pin9EXTI9_5_IRQnEXTI9_5_IRQHandlerGPIO_Pin10—GPIO_Pin15EXTI15_10_IRQnEXTI15_10_IRQHandlerSTM32单片机的NVIC04STM32单片机的NVICSTM32单片机的NVIC(NestedVectoredInterruptController,嵌套向量中断控制器)是用于管理中断的关键组件之一。它负责处理和调度来自各种外设和系统异常的中断请求,并决定哪个中断被优先处理,以及在多个中断同时发生时的处理顺序。STM32单片机的中断优先级是用来确定在多个中断同时发生时,哪个中断会被首先处理的。STM32单片机的中断优先级由两部分组成:抢占优先级和响应优先级。抢占优先级用于确定中断之间的优先级关系,而响应优先级用于确定同一中断内部不同处理段之间的优先级关系。STM32单片机的NVIC抢占优先级:用来决定在多个中断同时发生时,哪个中断具有更高的优先级。优先级数值越低,抢占优先级越高,能够中断抢占优先级低的中断,从而形成中断嵌套。优先级为0的中断具有最高的抢占优先级。响应优先级:响应优先级用于区分同一抢占优先级下不同的中断同时向系统申请中断,系统响应中断的顺序。响应优先级数值越低,响应优先级越高,响应优先级为0的中断处理函数具有最高的执行优先级。STM32单片机的NVICNVIC优先级分组分组抢占优先级(值越小级别越高)响应优先级值越小级别越高)00位(0级)04位(16级)0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,111111位(2级)0,13位(8级)000,001,010,011,100,101,110,11122位(4级)00,01,10,112位(4级)00,01,10,1133位(8级)000,001,010,011,100,101,110,1111位(2级)0,144位(16级)0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,11110位(0级)0按键抖动的消除02按键抖动的消除按键是由机械弹性元件组成的,按键的抖动是指按键的触点在闭合和断开瞬间由于接触情况不稳定,从而导致电压信号的抖动现象(由按键的机械特性造成,不可避免)。一次按键的按下过程中按键的前沿和后沿都会有5~10ms的抖动。按键抖动的消除对于以微秒级工作的单片机而言,键盘的抖动有可能造成单片机对一次按键的多次处理。为了提高系统的稳定性,必须采用有效的方式消除抖动。消除抖动可以采用硬件方式和软件方式。硬件方式是指在按键与单片机I/O口之间增加硬件消抖电路,利用硬件电路消除抖动(如RS触发器)。软件方式是指在程序设计中增加消除抖动的程序,通过程序设计消除抖动。硬件方式虽然对程序不会造成影响,但构成键盘的硬件电路复杂,成本增加,因此,软件方式应用更为广泛。软件方式的实现方法是:当单片机查询到电路中有按键按下时,先不进行处理,而是先执行10~20ms(键盘抖动时间一般为5~10ms)的延时程序,延时程序结束后,再次查询按键状态,若此时按键仍为按下状态,则视为按键被按下。独立式按键电路设计03独立式按键电路设计编程实现独立式按键控制发光二极管的亮灭状态。要求:K1控制D1;K2控制D2,K3控制D3,

按键每按下一次发光二极管状态取反。在Proteus

温馨提示

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

最新文档

评论

0/150

提交评论