《嵌入式技术入门与实战(基于STM32)》课件全套 (尹静) 第1-7章 嵌入式系统导论和STM32基础 -STM32模拟数字转换模块_第1页
《嵌入式技术入门与实战(基于STM32)》课件全套 (尹静) 第1-7章 嵌入式系统导论和STM32基础 -STM32模拟数字转换模块_第2页
《嵌入式技术入门与实战(基于STM32)》课件全套 (尹静) 第1-7章 嵌入式系统导论和STM32基础 -STM32模拟数字转换模块_第3页
《嵌入式技术入门与实战(基于STM32)》课件全套 (尹静) 第1-7章 嵌入式系统导论和STM32基础 -STM32模拟数字转换模块_第4页
《嵌入式技术入门与实战(基于STM32)》课件全套 (尹静) 第1-7章 嵌入式系统导论和STM32基础 -STM32模拟数字转换模块_第5页
已阅读5页,还剩351页未读 继续免费阅读

下载本文档

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

文档简介

第1章认识STM32嵌入式系统《嵌入式技术入门与实战(基于STM32)》第1章认识STM32嵌入式系统010203嵌入式系统基本概念ARM微处理器简介STM32系列微控制器21、嵌入式系统基本概念第1章认识STM32嵌入式系统PartOne1、嵌入式系统基本概念1.1嵌入式系统的定义1.2嵌入式系统的分类1.3嵌入式系统组成41.1嵌入式系统的定义普遍认同的定义:

嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。5嵌入式系统的定义诠释嵌入式系统就是嵌入到对象体系中的专用计算机系统。它的三要素是嵌入性、专用性和计算机。嵌入性是指嵌入到对象体系中,有对象环境要求;专用性是指软、硬件按对象要求进行裁剪;计算机是指实现对象的智能化功能且以微处理器为核心的系统。6嵌入式系统产品移动终端平板电脑、智能手机信息家电智能冰箱、洗衣机、智能空调、微波炉数字电视、数码相机与数码摄像机、游戏机汽车电子车载、车控智能仪器仪表通讯设备71.2嵌入式系统的分类1.按表现形式即硬件范畴分类(1)芯片级嵌入式系统:在处理器芯片中含有程序或算法。(2)模块级嵌入式系统:在系统中含有某个核心模块。(3)系统级嵌入式系统:包含完整系统并有嵌入软件的全部内容。82.按实时性即软件范畴分类(1)实时系统:指能及时响应外部发生的随机事件,并已足够快的速度完成对事件处理的计算机应用系统。(2)非实时系统:用于对外部响应要求不太严格的产品中,91.3嵌入式系统组成嵌入式系统的组成主要由:嵌入式硬件系统、嵌入式软件系统。10嵌入式系统硬件组成1.嵌入式微处理器嵌入式系统上的处理器单元称为嵌入式微处理器。嵌入式微处理器是嵌入式系统硬件部分的核心嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在为特定用户群所专用设计的系统中。11嵌入式系统硬件组成2.存储器嵌入式系统需要存储器来存放和执行代码可以位于微处理器的内部或外部,其容量为256KB~1GB一般片内存储器容量小,速度快,片外存储器容量大。12嵌入式系统硬件组成3.通用设备接口和I/O接口嵌入式系统和外界交互需要一定形式的通用设备接口,通过与片外其他设备的或传感器的连接,实现微处理器与外部设备的输入/输出。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。目前嵌入式系统中常用的通用设备接口有A/D、D/A,I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)等。13嵌入式系统软件组成1.中间层硬件层与软件层之间为中间层,也称为硬件抽象层(HardwareAbstractLayer,HAL)或板级支持包(BoardSupportPackage,BSP),一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。14嵌入式系统软件组成2.系统软件层系统软件层由实时多任务操作系统(Real-timeOperationSystem,RTOS)、文件系统、图形用户接口(GraphicUserInterface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。嵌入式操作系统(EmbeddedOperationSystem,EOS)是一种用途广泛的系统软件,过去它主要应用与工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。15嵌入式系统软件组成3.应用软件层应用软件层是由基于实时系统开发的应用程序组成,用来实现对被控对象的控制功能。嵌入式应用软件开发,是应用软件开发的一种,就是在嵌入式操作系统平台上写各种应用程序,实现各种功能。操作系统控制着应用程序编程与硬件的交互作用,而应用程序控制着系统的运作和行为。162、ARM微处理器第1章认识STM32嵌入式系统PartTwo2、ARM微处理器简介2.1ARM处理器概念2.2ARM微处理器系列2.3Cortex系列微处理器182.1ARM处理器概念ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术。ARM技术体积小、功耗少、成本低、性能高等优势基于精简指令集计算机RISC思想ARM支持两种指令集:ARM指令集(32位)和Thumb指令集(16位);ARM微处理器ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、ARM11系列、SecurCore系列、Inter的XScale、ARMCortex系列等。19ARM的发展历史1990,ARM公司诞生1994,ARM公司推出ARM7,ARM7称为世界上采用量最大的CPU内核,称为嵌入式系统领域发展中的重要里程碑2004年,ARM公司推出了Cortex内核系列,A\M\R系列,针对高性能、微控制器类、实时类应用。从20世纪末开始,嵌入式系统发展进入黄金期:2007年,phone的热销,AppStore的迅速崛起,让全球移动应用彻底绑定在ARM指令集上。2008年,谷歌推出了Android(安卓)系统,也是基于ARM指令集。智能手机进入了飞速发展阶段,ARM也因此奠定了在智能手机市场的霸主地位20ARM处理器架构进化史按照架构分为ARMv4/v4T、ARMv5/v5E、ARMv6、ARMv7ARMv7架构诞生后,ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。212.2ARM微处理器系列1.ARM7系列适用于对价位和功耗要求较高的消费类应用,应用领域:工业控制、Intenet设备、网络和调制解调器、移动电话等。包含ARMTTDMI、ARM7TDMI-S、ARM72OT、ARM7EJ2.ARM9系列在高性能和低功耗特性方面提供最佳的性能,主要应用于无线设备、仪器仪表、安全系统、机盒、高端打印机、数字照相机和数字摄像机等,包含ARM920T、ARM922T和ARM940T三种类型。3.ARM10E系列具有高性能、低功耗的特点。主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息等领域。包含ARM1020E、ARM1022E和ARM1026EJ-S三种类型。224.ARM11系列是针对高性能和高能效应用而设计的,最新内核:ARM1156T2-S内核、ARM1156T2F-S内核、ARM1176JZ-S内核和ARM11JZF-S内核。5.SecurCore系列包含SecurCoreSC100、SecurCoreSC110、SecurCoreSC200和SecurCoreSC210四种类型。6.StrongARM和XScale系列InterStrongARMSA-1100处理器是32位RISC微处理器;XScale处理器采用ARMv5TE体系结构,支持16位Thumb指令和DSP指令。7.ARMCortex系列包含ARMCortex-A、ARMCortex-R和ARMCortex-M三款处理器,集成了Thumb-2指令集。ARM微处理器系列232.3Cortex系列微处理器2004年,ARM公司发布ARMv7架构的Cortex系列处理器Cortex是ARM的新一代处理器内核,全新开发,不向前兼容。Cortex系列处理器不区分ARM标准指令和Thumb指令,采用Thumb-2指令集。Thumb-2技术是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。24Cortex系列微处理器分类Cortex-A(Application)基于ARMv7-A体系结构用于高性能开放应用程序平台,支持操作系统:Symbian(诺基亚智能手机用)、Linux、微软的WindowsCE和智能手机操作系统WindowsMobileCortex-R(Real-time)基于ARMv7-R体系结构用于实时性要求的高端嵌入式系统,如高级轿车组件,大型发电机控制器,机器手臂控制等Cortex-M(Microcontroller)基于ARMv7-M和ARMv6-M体系结构用于运行实时控制系统的小规模应用程序,面向单片机的应用25Cortex-M3是ARM公司的第一个Cortex系列处理器,具有出色的计算性能以及对事件的优异系统响应能力,适用于具有较高确定性的实时应用。Cortex-M4具有高效的信号处理功能,适用需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。Cortex-M系列处理器Cortex-M0和Cortex-M0+针对低功耗低成本微控制器产品,适合用于替代51单片机Cortex-M1是专为FPGA应用设计的。26Cortex-M4处理器

Cortex-M4处理器是32位低成本、高性能的通用微控制器内核。Cortex-M4处理器的架构是基于哈佛架构,即指令和数据各使用一条总线,所以Cortex-M4处理器对多个操作可以并行执行,加快了应用程序的执行速度。内核流水线支持3级流水和分支推测。27Cortex-M4处理器特点丰富的指令集:单指令多数据的指令集(SIMD)扩展的单周期32位的乘法累加器(MAC)饱和运算指令以及单精度浮点运算指令浮点运算能力有独立的浮点单元(FPU)较大的存储空间片上闪存高达1M字节内嵌SRAM高达196K字节灵活的静态存储控制器(FSMC)运行速度快高速系统时钟频率168MHz运行时,可达到210DMIPS的处理能力更高级的外设新增了照相机接口、加密处理器,USB高速OTG接口等外设功能具有更快的通信接口、更高采样率以及带FIFO的DMA控制器中断机制优具有嵌入式中断向量控制器NVIC同样支持咬尾中断和晚到中断机制28Cortex-M4处理器特点超低功耗具有深睡眠模式以及多达240个唤醒中断的唤醒中断控制器可关闭FPU降低功耗。具有高度可配置性芯片制造商自行决定NVIC设计实际支持的可编程中断优先级的数量存储器保护单元(MPU)是可选的,由芯片制造商决定是否使用JTAG和SWD调试接口是可选的,支持最多8个断点和4个察看点,也由具体的芯片设计决定是否使用。兼容性强不仅兼容Cortex-M3,和其他的ARM处理器也具有很强的兼容性。29Cortex-M4处理器包含:处理器内核嵌套向量中断控制器(NVIC)系统时钟(SYSTICK)可选的浮点单元(FPU)内部总线系统可选的存储器保护单元(MPU)支持软件调试操作的一组部件Cortex-M4处理器

内核体系结构30思考与练习ARMCortex-M4处理器有哪些优点?ARMCortex-M4处理器由哪些部分组成?STM32MCU系列产品有哪些分类?其中STM32F407属于哪一类?根据STM32芯片的命名规则说明STM32F407ZGT6包含了哪些芯片信息?313、STM32系列微控制器PartThree第1章认识STM32嵌入式系统Cortex处理器和STM32的关系MCU中的CPU333、STM32系列微控制器3.1STM32系列微控制器3.2STM32时钟系统3.3STM32最小系统343.1STM32系列微控制器ST公司的32位产品系列STM32,覆盖超低功耗、超高性能方向,具有系列全、型号多、资料丰富等优点,得到非常广泛的应用。STM32目前提供18大产品线(F0,G0,F1,F2,F3,G4,F4,F7,H7,MP1,L0,L1,L4,L4+,L5,U5,WB,WL),超过1000个型号35STM32产品36STM32MCU的命名规则STM32F407ZGT6?37STM32F4xx微控器的系统架构主系统由32位多层AHB总线矩阵构成主控总线被控总线38总线矩阵用于主控总线之间的访问仲裁管理,仲裁采用循环调度算法。STM32F407的引脚封装39STM32F407内部功能结构图403.2STM32时钟系统在嵌入式系统开发设计中,芯片内部的时钟系统是开发者必须要熟练掌握的内核和任何片上外设都需要时钟的驱动,在开发设计中需要清晰的了解时钟系统的配置方法。STM32的时钟系统为了适应不同的频率需求,需要支持多种频率,其时钟系统比51单片机要复杂很多。41STM32F4的时钟树结构STM32有5个时钟源:HSI、HSE、LSI、LSE、PLL42STM32F4的时钟源HSIHSI是高速内部时钟,由内部16MHzRC振荡器生成可直接用作系统时钟,或者用作为PLL的输入。优点是成本较低(无需使用外部组件),启动速度比HSE晶振快其精度不及外部晶振或陶瓷谐振器。HSEHSE是高速外部时钟可接外部晶振/陶瓷谐振器,也可接外部用户时钟源可直接用作系统时钟,或者用作为PLL的输入。频率范围为4MHz~26MHz精度非常高。43STM32F4的时钟源LSILSI是低速内部时钟,RC振荡器可作为低功耗时钟源在停机和待机模式下保持运行,供独立看门狗(IWDG)和自动唤醒单元(AWU)使用。可作为实时时钟外设(RTC)的时钟源。时钟频率在32kHz左右。LSELSE是低速外部时钟,接频率为32.768kHz的晶振或陶瓷谐振器可作为实时时钟外设(RTC)的时钟源来提供时钟/日历或其它定时功能具有功耗低且精度高的优点。44STM32F4的时钟源PLLPLL为锁相环倍频输出,STM32F4具有两个PLL:主PLL和专用PLL。主PLL(MainPLL)由HSE或HSI振荡器提供时钟信号,并具有两个不同的输出时钟:第一个用于生成高速系统时钟(最高达168MHz),第二个用于生成USBOTGFS的时钟(48MHz)、随机数发生器的时钟(48MHz)和SDIO时钟(48MHz)。专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。45STM32F4系统时钟(SYSCLK)的选择系统时钟SYSCLK是提供STM32中绝大部分部件工作的时钟源,可来源于三个时钟源:HSI、HSE、PLL在系统复位后,默认系统时钟为HSI。STM32F407的SYSCLK时钟最大168MHz46STM32F4的时钟输出STM32共有两个微控制器时钟输出(MCO)引脚,可以选择一个时钟信号输出到MCO引脚上:MCO1引脚(PA8),可选择时钟源:HSI、LSE、HSE、PLL

MCO2引脚(PC9),可选择时钟源:HSE、PLL、系统时钟、PLLI2SCLK47STM32F4的总线时钟以太网PTP时钟是使用系统时钟AHB时钟经过SYSCLK时钟分频得来,最大频率为168MHzAPB2高速时钟、APB1低速时钟经过AHB时钟分频得来,最大频率分别为168MHz、84MHz483.3STM32最小系统最小系统是指仅包含必需的元器件,仅可运行最基本软件的简化系统,也就是用最少的元件组成,但可以工作的系统。无论多么复杂的嵌入式系统,都可以认为是由最小系统和扩展功能组成。最小系统是嵌入式系统硬件设计中复用率最高,也是最基本的功能单元。典型的最小系统包括:STM32微控制器芯片、电源、调试接口、复位电路、时钟、存储系统(可选)。49电源电路STM32F4微控制器使用单电源供电,工作电压VDD要求介于1.8V到3.6V之间。同时通过内部的一个嵌入式线性调压器,可以给Cortex-M4内核提供1.2V的工作电压。通常正常电源为5V,可以采用转换电路转为3.3v后给芯片供电STM32F4芯片的电源引脚可连接电容以增强稳定性50调试接口STM32的CoreSight调试系统支持JTAG

和SWD两种接口标准,这两种接口都要使用GPIO(普通I/O口)来供给调试仿真器使用。JTAG调试接口(JTAG-DP)提供5针标准JTAG接口串行调试接口(SW-DP)提供2针(时钟+数据)接口51复位电路复位电路的主要作用是把特殊功能寄存器的数据刷新为默认数据。复位场景:单片机在运算过程中由于干扰等外界原因造成寄存器中数据混乱不能使其正常继续执行程序(称死机)或产生的结果不正确时均需要复位,以使程序重新开始运行。单片机在刚上电时也需要复位电路,系统上电时复位电路

提供复位信号,直至电源稳定后,撤销复位信号,以使单

片机能够正常稳定的工作。52时钟系统一般在最小系统设计时,我们会考虑选用外部时钟源,以获得更高的时钟精度HSE外接晶振电路,晶振8MHz

LSE外接晶振电路,晶振32.768KHz53思考与练习STM32F4有哪些时钟源信号?时钟频率分别是多少?STM32F4的系统时钟的时钟源有哪些?STM32最小系统包含哪些部分?请说明STM32F4的供电要求?STM32系统复位有哪些场景?STM32的时钟源一般如何选择?54单击此处添加副标题内容谢谢聆听55第二章搭建开发环境《嵌入式技术入门与实战(基于STM32)》第二章搭建开发环境010203STM32CubeIDE下载和安装STM32CubeIDE的操作界面下载和调试驱动安装571、STM32CubeIDE下载和安装第二章搭建开发环境PartOne1、STM32CubeIDE下载和安装1.1初识STM32CubeIDE1.2STM32CubeIDE下载和安装步骤591.1初识STM32CubeIDE60STM32CubeIDE是ST官方提供的免费软件开发工具。基于Eclipse框架,GCC编译工具链和GDB调试工具,支持添加第三方功能插件。集成了部分STM32CubeMX和STM32CubeProgrammer的功能,是一个“多合一”的STM32开发工具1.1初识STM32CubeIDE61STM32CubeIDE功能:集成了STM32CubeMX的STM32配置与项目创建功能;下载调试支持ST-LINK(意法半导体)和J-Link(SEGGER)调试探头;1.2STM32CubeIDE下载和安装步骤62最新版的STM32CubeIDE安装程序可以从ST网站中下载,根据自己电脑操作系统选择下载版本。下载路径:/zh/development-tools/stm32cubeide.html2、STM32CubeIDE的操作界面第二章搭建开发环境PartTwo2、STM32CubeIDE的操作界面2.1工作空间(workspace)2.2信息中心2.3C/C++视图642.1

工作空间(workspace)652.2信息中心662.3C/C++视图67工程索引代码编辑函数与头文件list编译信息打印3、下载和调试驱动安装第二章搭建开发环境PartThree3、下载和调试驱动安装1.1串口下载程序3.2ST-LINK仿真器下载程序693.1串口下载程序70串口下载前需安装的驱动:CH340或CH341CH340G芯片将串口转USB接口,电脑端需安装CH340或CH341驱动才能识别MCU的串口CH340驱动的安装串口下载程序71串口程序下载可以选择flymcu,该软件是mcuisp的升级版本,支持STM32芯片的程序下载。该软件可以在免费下载3.2ST-LINK仿真器下载程序72STM32CubeIDE下载调试支持ST-LINK和J-Link(SEGGER)仿真器。实验板采用ST-LINK仿真器,ST-LINK是专门针对意法半导体STM8和STM32系列芯片的仿真器。安装ST-LINK驱动73进入“ST官网”,找到“STSW-LINK009”。STSW-LINK009是基于ST-LINK,ST-LINK/V2,ST-LINK/V2-1,ST-LINK-V3的USB驱动,支持32或64位的Windows7、Windows8、Windows10操作系统。官方下载地址:/zh/development-tools/sts实验板下载资源地址:/docs/tool/dap/ST-LINKV2.html更新ST-LINK固件74如果第一次使用STM32CubeIDE下载调试,需要先检查仿真器固件版本是否符合STM32CubeIDE的要求,不符合需要更新固件。单击此处添加副标题内容谢谢聆听75第3章STM32I/O应用实战《嵌入式技术入门与实战(基于STM32)》第3章STM32I/O应用实战0102初识STM32的I/O口任务1GPIO实现跑马灯的控制771、初识STM32的I/O口第3章STM32I/O应用实战PartOneGPIO端口和引脚的概念,GPIO工作模式1、初识STM32的I/O口1.1STM32的I/0口定义1.2GPIO的工作模式和结构791.1STM32的I/0口定义STM32的I/0口,又叫做GPIO(General-PurposeInputs/Outputs),是STM32数字输入输出的基本模块,可以实现STM32与外部环境进行数字交换。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能:借助GPIO,微控制器可以实现对外围设备(如LED和按键等)最简单、最直观的监控。当微控制器没有足够的I/O引脚或片内存储器时,GPIO还可用于串行和并行通信、存储器扩展等。通用I/O端口GPIO51系列单片机有1个8位双向并行I/O端口P0和3个8位准双向并行I/O端口P1~P3。✐51系列单片机的端口和引脚?STM32的GPIO的每个端口组有16个引脚,STM32不同型号的芯片,具有不同的端口组和不同的引脚数量STM32F407微控制器有9组通用I/O端口,端口号用GPIOx(x是A、B、C、D、E、F、G、H、I)表示,即GPIOA、GPIOB、……GPIOI每组端口有16个引脚(0~15),引脚号分别用Px0、Px1、……Px15(x是A~I)表示1.2GPIO的工作模式GPIO端口的每个位(引脚)可以由软件分别配置成多种模式。状态配置模式HAL库代码中宏定义名称通用输出开漏(Push-Pull)GPIO_MODE_OUTPUT_PP推挽式(Open-Drain)GPIO_MODE_OUTPUT_OD复用功能输出开漏(Push-Pull)GPIO_MODE_AF_PP推挽式(Open-Drain)GPIO_MODE_AF_OD输入上拉输入GPIO_MODE_INPUT,GPIO_PULLUP下拉输入GPIO_MODE_INPUT,GPIO_PULLDOWN浮空输入GPIO_MODE_INPUT,GPIO_NOPULL模拟输入GPIO_MODE_ANALOG1.2.2GPIO端口位的基本结构84GPIO不同工作模式下的电压标准非模拟输入模式端口能够读取当前电平的高低,读取电压高低的范围为5V/3.3V~0V。模拟输入模式端口能够读取当前电路的模拟电压值,分辨率为4096(12bit),采集范围为3.3V~0V。采集电压尽可能不要超过3.3V,否则可能会对芯片产生损坏。通用输出模式端口能够输出电平,控制输出口的电压范围为3.3V~0V。 复用模式端口复用到芯片内置的各种功能寄存器上,比如串口发送接收,SPI通信,Can总线等。这些寄存器没有直接的输出口,都是通过复用端口完成它们的功能。2、任务1GPIO实现跑马灯的控制第3章STM32I/O应用实战PartTwo了解应用实例功能,GPIO工作模式的选择,硬件设计2、任务1GPIO实现跑马灯的控制2.1软硬件设计2.2实现与代码分析86872.1软硬件设计基于嵌入式MCU设计并实现一个流水灯系统,具体要求:系统上电后,微控制器控制2个LED灯间隔200ms依次闪烁,并以此循环往复。88GPIO作为输出的应用芯片:STM32F407ZGT6实验板:正点原子探索开发套件实验板已实现了硬件电路,无需重新搭建。89硬件平台条件硬件设计原理图STM32芯片作为输出的引脚:PF9、PF10LED连接硬件电路输出状态下的GPIO内部配置推挽输出模式下:1:P导通,输出高0:N导通,输出低开漏输出模式下,0:N导通,输出低高阻状态:N不导通(P-MOS从不被激活)原理:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。用途:可以输出高、低电平,连接数字器件;特点:推拉式输出级既提高电路的负载能力,又提高开关速度。92推挽输出原理输出寄存器上的0激活N-MOS,输出低电平,输出寄存器上的1将端口置于高阻状态用途适合做电流型的驱动特点:

利用外部电路的驱动能力,减少IC内部的驱动一般来说,开漏是用来连接不同电平的器件,匹配电平用的因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平,比如输出5V开漏输出功能:基于嵌入式MCU设计并实现一个流水灯系统。LED灯驱动需要输出高低电平,GPIO引脚的模式选择推挽输出模式GPIO作为输出的应用-模式选择思考与练习◎简述GPIO有哪几种工作模式。◎分析推挽输出和开漏输出的区别。962.2实现与代码分析掌握详细实现过程,分析具体实现代码第一步使用STM32CubeIDE新建工程第二步

使用STM32CubeMX完成时钟配置第三步使用STM32CubeMX完成GPIO端口引脚初始化配置第四步导出工程第五步LED流水灯功能代码编写第六步下载调试2.2.1实现过程2.2.2代码分析1)程序框架设计的程序可以采用“只执行一次初始化函数,重复执行功能函数”这种框架,如下所示:int

main(void)

{

//init()

while(1)

{

//test()

}

}

981)程序框架2)HAL库函数HAL库是ST推出的官方的固件库,它将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,降低开发难度。用户在开发过程中不需要详细掌握寄存器的配置方法,只要知道调用哪些固件库函数即可,只要掌握了固件库开发思想,就大大降低了初学者入门的难度。寄存器标准库HAL库2)引脚控制的HAL库函数1、HAL_GPIO_Init功能:GPIO初始化,每个引脚可独立配置,也可同时传入多个引脚进行配置,包括GPIO工作模式、响应速度等相关寄存器的配置。无返回值。函数原型voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)101GPIO_InitTypeDef结构体内容解析102成员含义配置选项Pin引脚号GPIO_PIN_0~GPIO_PIN_15(使用符号“|”进行或运算便可以合并)GPIO_PIN_All(一次初始化全部16个端口)Mode工作模式GPIO_MODE_INPUT(输入,需进一步配置)GPIO_MODE_OUTPUT_PP(推挽输出)GPIO_MODE_OUTPUT_OD(开漏输出)GPIO_MODE_AF_PP(复用推挽)GPIO_MODE_AF_OD(复用开漏)GPIO_MODE_ANALOG(模拟输入)Pull上下拉电阻的选择配置GPIO_NOPULL(无上下拉的浮空输入)GPIO_PULLUP(上拉输入)GPIO_PULLDOWN(下拉输入)SpeedI/O口驱动电路的响应速度,输出模式下有效GPIO_SPEED_FREQ_LOW(2MHz)GPIO_SPEED_FREQ_MEDIUM(25MHz)GPIO_SPEED_FREQ_HIGH(50MHz)GPIO_SPEED_FREQ_VERY_HIGH(100MHz)本任务中,配置PF9、PF10为推挽输出,无上下拉,速度2MHz2)引脚控制的HAL库函数2、HAL_GPIO_ReadPin功能:从输入数据寄存器(IDR)中读取引脚状态值,0或1,返回引脚状态值“0”或“1”。函数原型:GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)1032)引脚控制的HAL库函数3、HAL_GPIO_WritePin功能:向输出数据寄存器(ODR)中写入输出状态(0或1),无返回值函数原型:voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)4、HAL_GPIO_TogglePin1043)GPIO初始化的代码实现GPIO的初始化在STM32CubeMx中完成配置,会自动转化成初始化代码105开启外设时钟106

__HAL_RCC_GPIOF_CLK_ENABLE();4)流水灯功能的实现在while(1)中无限循环执行以下LED0/1交替亮灭,实现跑马灯效果。107思考与练习◎对于应用案例,修改跑马灯功能为全亮和全灭,调用HAL_GPIO_TogglePin函数实现3、GPIO的寄存器描述GPIO寄存器实现对GPIO端口初始化配置和数据输入输出控制每个寄存器只能以32位(字)进行访问,不允许16位(半字)或8位(字节)访问*GPIO配置寄存器GPIO端口模式寄存器GPIOx_MODERGPIO端口输出类型寄存器GPIOx_OTYPERGPIO端口输出速度寄存器GPIOx_OSPEEDRGPIO端口上拉/下拉寄存器GPIOx_PUPDR数据寄存器GPIO端口输入数据寄存器GPIOx_IDRGPIO端口输出数据寄存器GPIOx_ODR置位/复位寄存器GPIOx_BSRR锁定寄存器GPIOx_LCKR复用功能选择寄存器GPIO复用功能高位寄存器GPIOx_AFRHGPIO复用功能低位寄存器GPIOx_AFRLGPIO端口模式寄存器GPIOx_MODER111GPIO端口输出类型寄存器GPIOx_OTYPER112GPIO端口输出速度寄存器GPIOx_OSPEEDR113GPIO端口上拉/下拉寄存器GPIOx_PUPDR114115端口输入数据寄存器(GPIOx_IDR)GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIO_PinStatebitstatus;/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));if((GPIOx->IDR&GPIO_Pin)!=(uint32_t)GPIO_PIN_RESET){bitstatus=GPIO_PIN_SET;}else{bitstatus=GPIO_PIN_RESET;}returnbitstatus;}116端口输出数据寄存器(GPIOx_ODR)117端口位设置/复位寄存器(GPIOx_BSRR)voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState){/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState!=GPIO_PIN_RESET){

GPIOx->BSRR=GPIO_Pin;}else{

GPIOx->BSRR=(uint32_t)GPIO_Pin<<16u;}}通用I/O(GPIO)说明事项复位期间和刚复位后:复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b,MODEx[1:0]=00b)。当作为输出配置时:写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式使用输出驱动器。输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活,也可以不被激活所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。单击此处添加副标题内容谢谢聆听119第3章STM32I/O应用实战《嵌入式技术入门与实战(基于STM32)》3、STM32系列微控制器3.1STM32内部结构3.2STM32时钟系统3.3STM32最小系统1213.1STM32F407内部功能结构图1223.2STM32时钟系统在嵌入式系统开发设计中,芯片内部的时钟系统是开发者必须要熟练掌握的内核和任何片上外设都需要时钟的驱动,在开发设计中需要清晰的了解时钟系统的配置方法。STM32的时钟系统为了适应不同的频率需求,需要支持多种频率,其时钟系统比51单片机要复杂很多。123STM32F4的时钟树结构STM32有5个时钟源:HSI、HSE、LSI、LSE、PLL124STM32F4的时钟源HSIHSI是高速内部时钟,由内部16MHzRC振荡器生成可直接用作系统时钟,或者用作为PLL的输入。优点是成本较低(无需使用外部组件),启动速度比HSE晶振快其精度不及外部晶振或陶瓷谐振器。HSEHSE是高速外部时钟可接外部晶振/陶瓷谐振器,也可接外部用户时钟源可直接用作系统时钟,或者用作为PLL的输入。频率范围为4MHz~26MHz精度非常高。125STM32F4的时钟源LSILSI是低速内部时钟,RC振荡器可作为低功耗时钟源在停机和待机模式下保持运行,供独立看门狗(IWDG)和自动唤醒单元(AWU)使用。可作为实时时钟外设(RTC)的时钟源。时钟频率在32kHz左右。LSELSE是低速外部时钟,接频率为32.768kHz的晶振或陶瓷谐振器可作为实时时钟外设(RTC)的时钟源来提供时钟/日历或其它定时功能具有功耗低且精度高的优点。126STM32F4的时钟源PLLPLL为锁相环倍频输出,STM32F4具有两个PLL:主PLL和专用PLL。主PLL(MainPLL)由HSE或HSI振荡器提供时钟信号,并具有两个不同的输出时钟:第一个用于生成高速系统时钟(最高达168MHz),第二个用于生成USBOTGFS的时钟(48MHz)、随机数发生器的时钟(48MHz)和SDIO时钟(48MHz)。专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。127STM32F4系统时钟(SYSCLK)的选择系统时钟SYSCLK是提供STM32中绝大部分部件工作的时钟源,可来源于三个时钟源:HSI、HSE、PLL在系统复位后,默认系统时钟为HSI。STM32F407的SYSCLK时钟最大168MHz128STM32F4的时钟输出STM32共有两个微控制器时钟输出(MCO)引脚,可以选择一个时钟信号输出到MCO引脚上:MCO1引脚(PA8),可选择时钟源:HSI、LSE、HSE、PLL

MCO2引脚(PC9),可选择时钟源:HSE、PLL、系统时钟、PLLI2SCLK129STM32F4的总线时钟以太网PTP时钟是使用系统时钟AHB时钟经过SYSCLK时钟分频得来,最大频率为168MHzAPB2高速时钟、APB1低速时钟经过AHB时钟分频得来,最大频率分别为168MHz、84MHz1303.3STM32最小系统最小系统是指仅包含必需的元器件,仅可运行最基本软件的简化系统,也就是用最少的元件组成,但可以工作的系统。无论多么复杂的嵌入式系统,都可以认为是由最小系统和扩展功能组成。最小系统是嵌入式系统硬件设计中复用率最高,也是最基本的功能单元。典型的最小系统包括:STM32微控制器芯片、电源、调试接口、复位电路、时钟、存储系统(可选)。131电源电路STM32F4微控制器使用单电源供电,工作电压VDD要求介于1.8V到3.6V之间。同时通过内部的一个嵌入式线性调压器,可以给Cortex-M4内核提供1.2V的工作电压。通常正常电源为5V,可以采用转换电路转为3.3v后给芯片供电STM32F4芯片的电源引脚可连接电容以增强稳定性132调试接口STM32的CoreSight调试系统支持JTAG

和SWD两种接口标准,这两种接口都要使用GPIO(普通I/O口)来供给调试仿真器使用。JTAG调试接口(JTAG-DP)提供5针标准JTAG接口串行调试接口(SW-DP)提供2针(时钟+数据)接口133复位电路复位电路的主要作用是把特殊功能寄存器的数据刷新为默认数据。复位场景:单片机在运算过程中由于干扰等外界原因造成寄存器中数据混乱不能使其正常继续执行程序(称死机)或产生的结果不正确时均需要复位,以使程序重新开始运行。单片机在刚上电时也需要复位电路,系统上电时复位电路

提供复位信号,直至电源稳定后,撤销复位信号,以使单

片机能够正常稳定的工作。134时钟系统一般在最小系统设计时,我们会考虑选用外部时钟源,以获得更高的时钟精度HSE外接晶振电路,晶振8MHz

LSE外接晶振电路,晶振32.768KHz135思考与练习STM32F4有哪些时钟源信号?时钟频率分别是多少?STM32F4的系统时钟的时钟源有哪些?STM32最小系统包含哪些部分?请说明STM32F4的供电要求?STM32系统复位有哪些场景?STM32的时钟源一般如何选择?136单击此处添加副标题内容谢谢聆听137第3章STM32I/O应用实战《嵌入式技术入门与实战(基于STM32)》3、任务2按键点灯的控制与实现第3章STM32I/O应用实战PartThree3、任务2按键点灯的控制与实现3.1GPIO输入工作模式3.2GPIO作为输入的应用设计3.3实现与代码分析1403.4GPIO的寄存器描述3.1、GPIO输入工作模式1、GPIO输入工作模式模拟输入1浮空输入2上拉输入3下拉输入4输入模式上拉、下拉和浮空输入的内部配置输出缓冲器被禁止,施密特触发器输入被激活上拉电阻开关闭合接VDD,下拉电阻开关打开在引脚没有外部输入时,引脚被上拉至高电平,且保持高电平状态144上拉输入开关闭合下拉电阻开关闭合接GND,上拉电阻开关打开在引脚没有外部输入时,引脚被下拉至低电平,且保持低电平状态145下拉输入开关闭合输入引脚即不接高电平,也不接低电平。由外部输入决定引脚的状态。146浮空输入开关都打开关闭施密特触发器,上拉和下拉电阻被禁止。147模拟输入3.2、GPIO作为输入的应用设计设计并实现一个按键控制LED灯系统,具体要求:系统上电后,按下4个按键KEY0、KEY1、KEY2、WK_UP分别控制翻转LED1与LED2的亮灭状态149GPIO作为输入的应用芯片:STM32F407ZGT6实验板:正点原子探索开发套件实验板已实现了硬件电路,无需重新搭建。150硬件平台条件按下按键时导通A端与B端;松开按键保持电路开路状态151按键原理在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间一般为5ms~10ms。硬件消抖:在按键上并联一个电容,利用电容的充放电特性来对抖动过程中产生的电压毛刺进行平滑处理。软件消抖:使用程序完成消抖任务。152按键消抖硬件设计原理图KEY0→PE4,KEY1→PE3,KEY2→PE2、WK_UP→PA0按键连接硬件电路功能:基于嵌入式MCU设计并实现一个按键控制LED灯系统。KEY0→PE4:上拉输入模式KEY1→PE3:上拉输入模式KEY2→PE2:上拉输入模式WK_UP→PA0:下拉输入模式GPIO作为输出的应用-模式选择思考与练习◎简述GPIO有哪几种输入工作模式。◎分析上拉、下拉和浮空输入的区别。3.3、实现与代码分析掌握详细实现过程,分析具体实现代码3.3.1

实现过程第一步使用STM32CubeMX完成GPIO引脚初始化配置和工程代码的生成第二步按键扫描和按键点灯代码添加第三步下载调试3.3.2代码分析1)GPIO引脚初始化代码2)按键扫描代码3)按键点灯代码158GPIO引脚初始化代码159按键扫描思路按键扫描代码1614、GPIO的寄存器描述GPIO寄存器GPIO寄存器实现对GPIO端口初始化配置和数据输入输出控制每个寄存器只能以32位(字)进行访问STM3F40x芯片系列的GPIO寄存器:GPIO配置寄存器GPIO端口模式寄存器GPIOx_MODERGPIO端口输出类型寄存器GPIOx_OTYPERGPIO端口输出速度寄存器GPIOx_OSPEEDRGPIO端口上拉/下拉寄存器GPIOx_PUPDR数据寄存器GPIO端口输入数据寄存器GPIOx_IDRGPIO端口输出数据寄存器GPIOx_ODR置位/复位寄存器GPIO端口置位/复位寄存器GPIOx_BSRR锁定寄存器GPIO端口配置锁定寄存器GPIOx_LCKR复用功能选择寄存器GPIO复用功能高位寄存器GPIOx_AFRHGPIO复用功能低位寄存器GPIOx_AFRL164GPIO端口模式寄存器GPIOx_MODER每个引脚2bit:MODEy[1:0]32bit可配置16个引脚,即1个端口PA0输入模式的配置:GPIOA_MODER,MODER0[1:0]=00GPIO端口输出类型寄存器GPIOx_OTYPER165每个引脚仅用1bit表示引脚输出类型:OTy[0],1个端口仅占用低16位,高16位保留PE5推挽输出:在GPIOE_MODER中,MODER5[1:0]=01,在GPIOE_OTYPER中,OT5=0GPIO端口输出速度寄存器GPIOx_OSPEEDR166每个引脚2bit:OSPEEDRy[1:0]32bit可配置16个引脚,即1个端口GPIO端口上拉/下拉寄存器GPIOx_PUPDR167每个引脚2bit:PUPDRy[1:0],32bit可配置16个引脚,即1个端口PE3上拉输入模式:在GPIOE_MODER中,MODER3[1:0]=00,在GPIOE_PUPDR中,PUPDR3[1:0]=01端口输入数据寄存器(GPIOx_IDR)168GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIO_PinStatebitstatus;/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));if((GPIOx->IDR&GPIO_Pin)!=(uint32_t)GPIO_PIN_RESET){bitstatus=GPIO_PIN_SET;}else{bitstatus=GPIO_PIN_RESET;}returnbitstatus;}每个引脚仅需1bit表示状态“0”或“1”1个端口仅占用低16位,高16位保留:IDRy[15:0]169端口输出数据寄存器(GPIOx_ODR)每个引脚仅需1bit表示状态“0”或“1”1个端口仅占用低16位,高16位保留:ODRy[15:0]170端口位设置/复位寄存器(GPIOx_BSRR)voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState){/*Checktheparameters*/assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState!=GPIO_PIN_RESET){

GPIOx->BSRR=GPIO_Pin;}else{

GPIOx->BSRR=(uint32_t)GPIO_Pin<<16u;}}每个引脚置位和复位各1bit,低16位为置位,高16位为复位1思考与练习◎如果通过寄存器配置PB4引脚的工作模式,请问如何配置?◎请分析HAL库函数:HAL_GPIO_ReadPin、HAL_GPIO_WritePin、HAL_GPIO_TogglePin的代码,对引脚的读写分别配置了哪些寄存器?单击此处添加副标题内容谢谢聆听172《嵌入式技术与应用》

STM32的GPIO模块-位操作

第3章STM32I/O应用实战《嵌入式技术入门与实战(基于STM32)》任务3STM32I/O的位带操作实现01STM32存储器的映射02位带操作原理03位带操作的应用分析1、STM32存储器的映射STM32存储器的映射

4GB地址空间内可寻址的存储空间分为8个主要块,每个块为512MB。嵌入式SRAM包括:192KB系统SRAM、4KB备份SRAM系统SRAM:起始地址是0x20000000,分为三块:映射在地址0x20000000的112KB和16KB块,供所有AHB主控总线访问。外设存储器映射外设存储器映射起始地址是0x40000000通过总线AHB、APB连接外设2、位带操作原理GPIO输出数据寄存器写一位值控制其对应的引脚状态,普通的操作过程中需要3步骤:

1.

读:读取包含该位的字节数据

2.修改:设置该位为0或1、同时屏蔽其他位

3.写:将包含该位的字节数据写入181位带操作的起因CM4中,有两个区中实现了位带。其中一个是SRAM区的最低1MB范围,第二个则是片内外设区的最低1MB范围。SRAM区的最低1MB范围:0x2000_0000-0x200F_FFFF片内外设区的最低1MB范围:0x4000_0000-0x400F_FFFF182位带操作的概念概念:使用普通的加载/存储指令来对单一的比特进行读写。位带别名区把位带区的每个比特膨胀成一个32位的字。对别名区直接进行读写,实现对位带区每一位的状态的改变183位带操作的实现-位带别名区184映射关系0x20000000~0x200FFFFF

0x22000000~0x23FFFFFF

别名地址(32MB)SRAM数据区(1MB)0x40000000~0x400FFFFF

0x42000000~0x43FFFFFF

别名地址(32MB)外设区(1MB)别名地址

=位带基址

+字节偏移量×32+位号×4地址0x20000300中位号2的位对应的别名区地址是多少?位段基址=0x22000000字节偏移量

=0x20000300-0x20000000=0x300别名地址=0x22000000+0x300×32+2×4

=0x22006008185地址映射示例别名地址

=位带基址

+字节偏移量×32+位号×4一个字节8位共占用32个地址保证每个别名地址是4字节地址对齐其他3个地址不用1、位带操作对硬件I/O密集型的底层程序提供了很大方便。2、位带操作可用来化简跳转的判断,使代码更整洁。3、在多任务中用于实现共享资源在任务间的“互锁”访问。186位带操作的优越性3、位带操作的应用分析基于LED跑马灯的工程,修改代码,采用位带操作实现对LED灯的亮灭的控制。188位带操作的应用任务芯片:STM32F407ZGT6实验板:正点原子探索开发套件实验板已实现了硬件电路,无需重新搭建。硬件设计STM32芯片作为输出的引脚:PF9、PF10LED连接硬件电路软件设计地址映射的实现代码别名地址

=位带基址

+字节偏移量×32+位号×4位带操作实现LED灯亮灭软件设计思考与练习◎位带别名区有什么作用?◎别名区和位带区的映射关系是什么?实操练习:基于位带操作,实现蜂鸣器的控制193蜂鸣器学习参考NPN三极管(S8050)来驱动蜂鸣器;R61主要用于防止蜂鸣器的误发声。PF.8输出高电平,蜂鸣器将发声;PF.8输出低电平,蜂鸣器停止发声。单击此处添加副标题内容谢谢聆听194第4章用好STM32的外部中断《嵌入式技术入门与实战(基于STM32)》第4章用好STM32的外部中断01外部中断和外部中断/事件控制器(EXTI)02嵌套向量中断控制器NVIC03外部中断应用实例分析1、外部中断和外部中断/事件控制器(EXTI)1.1外部中断原理STM32允许多种多样的中断,如外部IO、ADC、USART、I2C等。中断事件中断处理程序主程序外部中断是微控制器实时处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使MCU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后,返回被中断的程序处,继续执行。一般情况下,微控制器的程序是封闭状态下自主运行的,如果在某一时刻需要响应一个外部事件(比如按键按下),这时就会用到外部中断。1.2外部中断/事件控制器(EXTI)外部中断/事件控制器,即EXTI,功能分两个部分:一个是产生中断,另一个是产生事件。STM32F407xxx中的EXTI的配置:有23个边沿检测器每根中断线可单独地被配置为中断或事件;每根中断线可独立选择事件(上升沿触发、下降沿触发或边沿触发)每个输入线可单独进行屏蔽STM32的每个IO都可以作为外部的中断输入口中断事件EXTI内部结构中断与事件的区别STM32F4系列支持将所有GPIO设置为中断输入。外部IO可由上升沿、下降沿、高低电平的三种方式触发。中断的触发方式STM32F407的23个外部中断线可分为:GPIO外部中断信号线EXTI0~EXTI15:对应GPIOx_Pin0~GPIOx_Pin15其他外设的事件信号线EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USBOTGFS唤醒事件EXTI线19连接到以太网唤醒事件EXTI线20连接到USBOTGHS(在FS中配置)唤醒事件EXTI线21连接到RTC入侵和时间戳事件EXTI线22连接到RTC唤醒事件外部中断/事件线的映射GPIO的管脚GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线0~15。中断与GPIO对应关系各个端口的0号引脚各个端口的1号引脚各个端口的15号引脚思考与练习◎STM32F407xx中EXTI线总共有几条,其与GPIO如何映射?◎中断和事件的主要区别是什么?2、嵌套向量中断控制器NVICCortex内核具有强大的异常响应系统,把能够打断当前代码执行流程的事件分为异常(exception)和中断(interrupt),系统把其用一个表管理起来,称为中断向量表。中断向量表为了管理配置中断,Cortex-M4在内核水平上搭载了一个嵌套向量中断控制器(NVIC,NestedVectoredInterruptController)NVIC把外部的中断信号关联到单片机内核中,对各种中断进行分类,按先后顺序发送给内核,让内核处理对应的中断。NVIC的定义实现低延迟的中断处理晚到中断的高效处理中断嵌套是指在进入一个中断处理程序之后,还能在中断之内再次产生中断。中断是否能嵌套依据优先级进行判断。NVIC中断嵌套的概念STM32的中断源具有两级优先级属性:第一级:抢占优先级抢占是指打断其它中断的属性,即会出现中断嵌套第二级:响应优先级(亚优先级)响应属性应用在多个中断抢占优先级相同的情况下,通过响应优先级判断执行顺序中断优先级的定义优先级附加说明:优先级属性编号越小,优先级别越高。有3个系统异常:复位(Reset)、不可屏蔽中断(NMI)、硬件错误(Hardfault),它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常和中断。所有其它中断的优先级则都是可编程的(但不能编程为负数)。当两个中断源的抢占优先级相同时:(1)如果两个中断同时到达,则中断控制器会先处理响应优先级高的中断;(2)当一个中断到来后,如果正在处理另一个中断,则这个后到的中断就要等到前一个中断处理完之后才能被处理;(3)如果他们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪一个。响应优先级的规则已设置:中断1的抢占优先级为0,响应优先级为0中断2的抢占优先级为2,响应优先级为1中断3的抢占优先级为2,响应优先级为01、假如主程序先被中断1中断,这时中断2和3产生中断只能等中断1结束后再处理。【先看抢占优先级,中断1的抢占优先级为0最高,不会嵌套】2、同时产生中断2和3中断3响应优先级高,所以先处理中断3,结束后处理中断2。【抢占优先级相同,先处理响应优先级高的中断】3、假如主程序先被中断2中断,这时如果又产生中断1在中断2内嵌套处理中断1。【低抢占优先级的中断A可以被高抢占优先级的中断B打断】举例:Cortex-M4优先级配置寄存器共有8位,而STM32F系列MCU的NVIC只采用了4位二进制数设置中断优先级这4位二进制数可以分为两段,一段用于设置抢占优先级,另一段用于设置响应优先级,共有5种组合:STM32优先级的配置中断分组输入参数bit分配情况中断优先级分配结果NVIC_PriorityGroup_00:40位抢占优先级(0),4位响应优先级(0~15)NVIC_PriorityGroup_11:31位抢占优先级(0~1),3位响应优先级(0~7)NVIC_PriorityGroup_22:22位抢占优先级(0~3),2位响应优先级(0~3)NVIC_PriorityGroup_33:13位抢占优先级(0~7),1位响应优先级(0~1)NVIC_PriorityGroup_44:04位抢占优先级(0~15),0位响应优先级(0)思考与练习◎STM32F407xx系列芯片中哪些异常是编号为负的内核异常,其优先级如何?◎NVIC的作用是什么,具有什么特点?3、外部中断应用实例分析外部中断应用实例设计并实现一个由外部中断完成的按键控制LED灯系统,系统上电后,按键按下会触发外部中断,通过外部中断实现按键控制LED灯的亮灭状态。硬件平台条件芯片:STM32F407ZGT6实验板:正点原子探索开发套件实验板已实现了硬件电路,无需重新搭建。外部中断线的选择四个独立按键:KEY0->PE4->EXTI4KEY1->PE3->EXTI3KEY2->PE2->EXTI2WK_UP->PA0->EXTI0外部中断触发模式的配置WK_UP->PA0->EXTI0,下拉输入,上升沿触发中断KEY0->PE4->EXTI4,上拉输入,下降沿触发中断

KEY1->PE3->EXTI3,上拉输入,下降沿触发中断KEY2->PE2->EXTI2,上拉输入,下降沿触发中断按键连接硬件电路按键按下按键按下软件设计:外部中断服务函数中断服务函数是用户用来编写中断响应事件的。GPIO引脚作为输入线的外部中断线EXTI0~15在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。名称说明地址中断服务函数名EXTI0EXTI线0中断0x0000_0058EXTI0_IRQHandlerEXTI1EXTI线1中断0x0000_005CEXTI1_IRQHandlerEXTI2EXTI线2中断0x0000_0060EXTI2_IRQHandlerEXTI3EXTI线3中断0x0000_0064EXTI3_IRQHandlerEXTI4EXTI线4中断0x0000_0068EXTI4_IRQHandlerEXTI9_5EXTI线[9:5]中断0x0000_009CEXTI9_5_IRQHandlerEXTI15_10EXTI线[15:10]中断0x0000_00E0EXTI5_10_IRQHandler软件设计:外部中断服务函数的调用以EXTI0_IRQHandle()为例,代码实现过程如下:void

EXTI0_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(KEY4_Pin);}void

HAL_GPIO_EXTI_IRQHandler(uint16_tGPIO_Pin){

if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin)!=RESET){__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);

HAL_GPIO_EXTI_Callback(GPIO_Pin);

//调用回调函数}}void

HAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){

if(GPIO_Pin==GPIO_PIN_4)//KEY0按下 { HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转LED0 }………… }EXTI0中断服务函数GPIO的外部中断服务函数GPIO的外部中断回调函数用户功能代码单击此处添加副标题内容谢谢聆听221第5章会用STM32的串口通信《嵌入式技术入门与实战(基于STM32)》使用PC机的串口调试助手显示和发送数据,用户通过PC端串口调试助手发送指定命令的信息后,微控制器按照指定命令控制LED灯状态变化,并将接收的数据再次传输至PC的串口助手显示。串口通信应用实例串口调试助手第5章会用STM32的串口通信01串行通信基础知识02STM32的USART串口通信原理03GPIO的复用功能04串口通信应用实例分析1、串行通信基础知识通信接口通常有两种:(1)并行通信(2)串行通信1、串口通信基础知识串行通信与并行通信的比较串行通信按照数据传送方向分为:(1)单工通信(2)半双工通信(3)全双工通信串行通信的分类串行通信按照按照串行数据的时钟控制方式分为(1)异步通信发送方和接收方之间没有统一的时钟信号数据通常以字符为单位组成字符帧传送(1个字节)(2)同步通信通信双方按照统一节拍工作。一次通信传输一帧信息,一帧通常由若干个数据字符组成(n个字节)0起始位D0D18D2位D3D4D5D6D70/1奇偶校验1停止位0D0D1D2D3D4D5D6串行通信的分类2、STM32的USART串口通信原理STM32串行通信方式有两种:同步通信,带时钟同步信号传输,如:SPI,I2C通信接口;异步通信,是不带时钟同步信号。如:UART、单总线STM32串行通信方式STM32串行通信方式USART即通用同步异步收发器,主要功能:USART利用分数波特率发生器提供宽范围的波特率选择。支

温馨提示

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

最新文档

评论

0/150

提交评论