STM32嵌入式应用开发 课件 胡永华 第1-6章 ARM CortexM3内核与STM32微控制器-DMA_第1页
STM32嵌入式应用开发 课件 胡永华 第1-6章 ARM CortexM3内核与STM32微控制器-DMA_第2页
STM32嵌入式应用开发 课件 胡永华 第1-6章 ARM CortexM3内核与STM32微控制器-DMA_第3页
STM32嵌入式应用开发 课件 胡永华 第1-6章 ARM CortexM3内核与STM32微控制器-DMA_第4页
STM32嵌入式应用开发 课件 胡永华 第1-6章 ARM CortexM3内核与STM32微控制器-DMA_第5页
已阅读5页,还剩112页未读, 继续免费阅读

下载本文档

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

文档简介

STM32介绍ST公司微处理器系列产品

STM8主打低功耗,主要针对8位微控制器市场:STM8A(汽车用MCU)STM8S(主流MCU标准系列)STM8L(超低功耗MCU)三个系列STM32介绍STM32系列MCU

STM32F2、STM32F4、STM32F7为高性能MCU其中STM32F4系列基于ARMCortex-M4内核,主频高达180MHz,具有DSP和FPU等功能。

STM32F1系列是ST公司主推的STM32系列MCU,基于ARMCortex-M3内核,主频高达72MHzSTM32介绍

STM32F1系列MCU是ST针对工业、医疗和消费类市场的应用需求而设计的低功耗、高性价比的产品,该系列从功能上又可分为5个子系列,其引脚、外设和软件均相互兼容。STM32F100主频为24MHz,具有电机控制和消费电子控制功能;STM32F101基本型,主频为36MHz,具有高达1MB的Flash;STM32F102USB基本型,主频为48MHz,具有USBFSdevice接口;STM32F103增强型,主频为72MHz,具有高达1MB的Flash、电机控制、USB和CAN;STM32F105/107互联型,主频为72MHz,具有以太网MAC、CAN和USB2.0OTG。STM32F1产品系列STM32F1系列STM32F103系列产品

STM32F1系列产品中,各个子系列按闪存容量的大小又分为小容量、中容量、大容量产品。低密度(LD):闪存容量为16~32KB中密度(MD):闪存容量为64~128KB高密度(HD):闪存容量为256~512KB超密度(XL):闪存容量为768KB~1MBSTM32命名规则序号符号说明1STM32ARMCortex-M3内核的32位微控制器2F芯片的系列3103增强型系列4Z芯片有144管脚5E512K字节的Flash6T采用LQFP封装76工作温度范围为-40–+85℃

以STM32F103ZET6为例说明芯片命名规范,该芯片型号由七部分组成常见的封装形式

DIP——(塑料)双列直插式封装,适用于中小规模集成电路,引脚数一般不超过100个SOP——小外型表面贴片封装,广泛应用于10-40个引脚的芯片PQFP——塑料方形扁平封装,管脚很细,一般应用于大规模或超大型集成电路,引脚数一般在100个以上LQFP——薄型QFP指封装,本体厚度为1.4mm的QFP(Plastic)DualIn-linePackageSmallOutlinePackagePlasticQuadFlatPackageLow-profileQuadFlatPackage常见的封装形式

BGA——(塑料)球栅阵列封装,Intel系列的80486和Pentium等CPU多采用这种封装方式PGA——插针网格阵列封装,有专门的PGA插座,插拔方便,常用于CPU的封装PLCC——塑封方形引脚插入式封装,外形尺寸比DIP封装小得多,必须采用SMT(表面贴装技术)进行焊接(Plastic)BallGridArrayPinGridArrayPackagePlasticJ-LeadedChipCarrie用户使用手册

用户选型参考资料选型手册参考手册(Referencemanual)数据手册(Datasheet)内容包括:产品的基本配置(如内置Flash和RAM的容量、外设模块的种类和数量等)、引脚数量和分配、电气特性、封装信息和定购代码等对芯片每一个外设的功能进行了详细说明,并对寄存器进行了详细描述STM32F103C8T6系列:主流系列STM32F1内核:ARMCortex-M3主频:72MHzRAM:20K(SRAM)ROM:64K(Flash)供电:2.0~3.6V(标准3.3V)封装:LQFP48片上资源/外设英文缩写名称英文缩写名称NVIC嵌套向量中断控制器CANCAN通信SysTick系统滴答定时器USBUSB通信RCC复位和时钟控制RTC实时时钟GPIO通用IO口CRCCRC校验AFIO复用IO口PWR电源控制EXTI外部中断BKP备份寄存器TIM定时器IWDG独立看门狗ADC模数转换器WWDG窗口看门狗DMA直接内存访问DAC数模转换器USART同步/异步串口通信SDIOSD卡接口I2CI2C通信FSMC可变静态存储控制器SPISPI通信USBOTGUSB主机接口系统结构ICode总线:32位的AHB总线,将Cortex-M3内核的指令总线与闪存FLASH接口相连接,指令预取在此总线上完成。DCode总线:32位的AHB总线,将Cortex-M3内核的DCode总线与闪存存储器的数据接口相连接,用于常量加载和调试访问。System总线:32位的AHB总线,连接Cortex-M3内核的系统总线到总线矩阵。系统结构总线矩阵:用于主控总线之间的访问仲裁管理,由总线控制器统一管理。DMA总线:执行内存与外设之间的数据传输。DMA通过此总线访问AHB外设或执行存储器间的数据传输。系统结构AHB:AdvancedHigh-speedBus,先进高速总线。APB:AdvancedPeripheralBus,先进外设总线。FLASH:闪存。FSMC:FlexibleStaticMemoryController,静态存储控制器,用于连接外部存储器。RCC:ResetandClockControl,复位与时钟控制器。系统结构GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG、USART1、SPI1、ADC1~ADC3、TIM1、EXTI等挂接在APB2总线上,其频率最高可达72MHz;USART2、USART3、SPI2、USB、CAN、DAC等挂接在APB1总线上,其频率最高为36MHz。存储结构STM32的外设可以通过指针来实现访问和操作。每个外设寄存器都占用特定的存储器地址,对外设的操作和对存储器的操作是一样的。STM32总的地址空间大小为4GB,用0x00000000H~0x1FFFFFFF来表示,将4GB大小的空间划分为:Flash程序存储器区SRAM静态数据存储器区片上外设区

STM32存储空间地址分配启动空间128MBFLASH存128KB系统存储2KB0x000000000x080000000x080200000x1FFFFF0000x1FFFFF8000x1FFFFF80F0x1FFFFFFFFSTM32时钟系统由于STM32的外设时钟复杂,因此需要有一套完整的时钟系统来进行时钟管理,这就是STM32的时钟系统。STM32的时钟系统由RCC(ResetandClockControl,复位与时钟控制器)产生,用来为系统和各种外设提供所需的时钟频率,以确定各外设的工作速度。

STM32时钟系统HSI:HighSpeedInternal,高速内部时钟,由内部8MHz的RC振荡器生成,可作为系统时钟或2分频后作为PLL输入;特点:时钟频率精度差,不稳定。HSE:HighSpeedExternal,高速外部时钟,可外接一个外部时钟源,或者通过OSC_IN和OSC_OUT引脚外接晶振,允许外接的晶振频率范围为4~16MHz,通常使用8MHz。特点:精度高,稳定。LSI:LowSpeedInternal,低速内部时钟,由内部RC振荡器产生,频率约40kHz,主要为独立看门狗(IWDG)和自动唤醒单元提供时钟。LSE:LowSpeedExternal,低速外部时钟,通过OSC32_IN和OSC32_OUT引脚外接频率为32.768kHz的晶振,主要为RTC(Real-TimeClock,实时时钟部件)提供低速高精度的时钟源。PLL:PhaseLockedLoop,锁相环,保证外部输入时钟信号与内部振荡信号同步(频率和相位相同),以保证输出频率的稳定。另一方面,也可用于倍频HSI或HSE。引脚定义特殊

功能

(11)(Vdd+

Vss)

*

3VDDA+VSSA

(A表示Analog,模拟的)BOOT0NRSTVBAT(Battery-备用电池)普通IO(37)c8t6(48)IO复用IO复用:IO引脚身兼数职的现象叫做IO复用名称通用复用PA9普通IOUSART1_Tx/TIM1_CH3PA10普通IOUSART1_Rx/TIM1_CH4IO复用能带来什么好处?IO重映射1名称通用重定义功能PB6普通IOUSART1_TxPB7普通IOUSART1_RxIO重映射就是将某个片上外设的复用功能移动到其它

IO引脚上2PA9PA10PB6PB7启动配置(自举设置)主闪存存储器(Flash)系统存储器

(Bootloader)内置SRAM最小系统电路最小系统电路指示灯

(接PC13)micro

usb

接口低速晶振

32.768kHz高速晶振电源启动模式选择调试接口复位按钮指示灯跳帽STM328MHz交叉编译环境交叉编译开发就是利用宿主机(Host)编写程序,编译生成二进制可执行代码后,通过仿真器或者下载工具将可执行代码下载或者烧写到目标机(Target)中嵌入式软件开发过程一般分为5个阶段:代码编辑、程序编译、汇编、链接、调试和下载,每个阶段都需要不同的开发工具来完成,这些开发工具都需要运行在宿主机上。STM32下载和调试工具J-Link仿真器ST-LinkV2仿真器ISP下载工具安装ST-LinkV2驱动连接上ST-LinkV2仿真器,刷新设备管理器,能看到STM32STLink设备,并且没有感叹号,即表示安装成功安装Keil社区版Keil-MDK是KeilARMMicrocontrollerDevelopmentKit的缩写,是针对ARM微处理器的软件开发工具,支持ARM7、ARM9和基于ARMCortex-M0/M1/M3/M4等内核的处理器,其前身是德国的Keil公司,后被ARM公司收购。本书使用的Keil版本是5.43,Keil5是商业软件,正版需要购买License。2022年3月,Keil公司官方推送了一个MDK新版本:Keil5社区版(MDK-Communityedition),该版本完全免费,无2KB代码限制,可供电子爱好者、学生等群体非商业免费评估和使用。安装和激活步骤先到官网/下载软件安装包,并用邮箱注册账号并激活该账号。打开Keil→File→LicenseManagement→User-BasedLicense。点Activate/Deactivate→右上角LicenseServer。输入服务器地址:→Query。选中KeilMDKCommunity→Activate→提示成功。Keil5安装注意事项安装路径为英文路径(不要有中文路径)多个版本MDK(Keil)不要安装在同一目录Keil5需要安装芯片对应的支持包,可以在/dd2/pack这个地址下载安装(离线安装),也可以点击PackInstaller按钮来进行安装(在线安装)。安装STM32CubeMXSTM32CubeMX是意法半导体(STMicroelectronics)推出的一款免费图形化配置工具,主要用于简化STM32系列微控制器的开发流程。通过图形化界面帮助开发者配置芯片引脚、时钟树、外设及中间件,并自动生成相应的初始化C代码,大幅缩短开发时间。STM32CubeMX是基于Java环境运行,需要先安装jre或jdk(8.0以上版本)安装STM32CubeMX,安装文件可以从ST官网下载(下载地址:/content/st_com/zh/stm32cubemx.html)安装相应的固件库包HAL库默认保存路径选择需要开发的芯片系列CubeMX生成Keil工程CubeMX生成Keil工程CubeMX生成Keil工程CubeMX生成Keil工程CubeMX生成Keil工程CubeMX生成Keil工程F1库文件结构Keil工程结构分析四个模块Application/MDK-ARMDrivers/STM32F1xx_HAL_DriverDrivers/CMSISApplication/UserKeil工程结构分析Inc和Src存放工程所用到的头文件、源文件stm32f1xx_hal_conf.h头文件为STM32的HAL库的工程模块配置文件,内部包含了STM32的所有模块,项目开发时注释掉工程不用的功能模块,在编译时就不会产生相应代码stm32f1xx_it.c和stm32f1xx_it.h是中断处理的相关文件Src文件夹对应的ARM-Keilv5中的Application/User工程组Keil工程结构分析CMSISSTM32F1xx_HAL_Driver存放的是STM32F1系列HAL库的头文件和源文件放置的是ARM提供的芯片内核相关的文件,还有一个Device用于存放ST的STM32F1xx的系统文件Keil工程结构分析MDK-ARM是编译器ARM-Keilv5所产生的文件test文件夹下是keilv5在编译过程中产生的中间文件,如后缀为.o和.d的文件MDK-ARM文件夹对应的ARM-Keilv5中的Application/MDK-ARM工程组工程架构startup_xx.s复位中断调用SystemInit调用main其他中断调用中断处理函数system_xx.c/.h定义SystemInitmain.c定义mainstm32f10x_it.c/.h定义中断处理函数stm32f10x.hcore_cm3.c/.h外设寄存器描述内核寄存器描述其他用户文件stm32f10x_hal.c/.hstm32f10x_hal_adc.c/.h……库函数stm32f10x_hal_conf.h库函数配置GPIO简介GPIO(GeneralPurposeInputOutput)通用输入输出口可配置为8种输入输出模式引脚电平:0V~3.3V,部分引脚可容忍5V输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等GPIO简介GPIOPA组PB组PC组PD组PE组PF组PG组PA0~PA15PB0~PB15PC0~PC15PD0~PD15PE0~PE15PF0~PF15PG0~PG1516个引脚16个引脚16个引脚16个引脚16个引脚16个引脚16个引脚

STM32F103系列微控制器共有7组GPIO端口,每一组端口包括16个引脚,如PA组端口,包括PA0~PA15共16个引脚。GPIO内部结构GPIOA寄存器驱动器PA0PA1PA2PA15………………GPIOB寄存器驱动器PB0PB1PB2PB15……………………APB2GPIO内部结构配置寄存器(32位)GPIOx_CRLGPIOx_CRH数据寄存器(32位)GPIOx_IDRGPIOx_ODR置位/复位寄存器(16位)GPIOx_BSRR复位寄存器GPIOx_BRR锁定寄存器(32位)GPIOx_LCKRCR15[3:0]CR14[3:0]CR13[3:0]CR12[3:0]CR11[3:0]CR10[3:0]CR9[3:0]CR8[3:0]CR7[3:0]CR6[3:0]CR5[3:0]CR4[3:0]CR3[3:0]CR2[3:0]CR1[3:0]CR0[3:0]GP

IOx(x=A..G)ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0IDR15IDR14IDR13IDR12IDR11IDR10IDR9IDR8IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0GP

IOx_ODR(OutputDataRegister)输出数据寄存器GP

IOx_IDR(InputDataRegister)输入数据寄存器Px0Px1

Px2

Px3

Px4

Px5

Px6

Px7

Px8

Px9

Px10

Px11

Px12

Px13

Px14

Px15GP

IOx_CR(ConfigRegister)配置寄存器GPIO基本结构GPIO模式模式名称性质特征浮空输入(Inputfloating)数字输入可读取引脚电平,若引脚悬空,则电平不确定上拉输入(Inputpull-up)数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平下拉输入(Inputpull-down)数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平模拟输入(Analog)模拟输入GPIO无效,引脚直接接入内部ADC开漏输出(Outputopen-drain)数字输出可输出引脚电平,高电平为高阻态,低电平接VSS推挽输出(Outputpush-pull)数字输出可输出引脚电平,高电平接VDD,低电平接VSS复用开漏输出(Alternatefunctionopen-drain)数字输出由片上外设控制,高电平为高阻态,低电平接VSS复用推挽输出(Alternatefunctionpush-pull)数字输出由片上外设控制,高电平接VDD,低电平接VSS通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式浮空/上拉/下拉输入施密特触发器原理输入VTH

VTL输出

10输出0

输入输出有两个稳态对于输入负向递减和正向递增有不同的门限施密特触发器1

VTL

VTH浮空/上拉/下拉输入下面的按键电路GPIO该配置成什么模式?模拟输入开漏/推挽输出VddP-MOSN-MOSVssVddP-MOSN-MOSVssG-

Gate栅极D-

Drain

漏极S-

Source

源极交替导通0-

N闭合,

P断开1-

N断开,

P闭合开漏推挽P-MOS断开开漏输出能够方便的实现“逻辑与”功能利用外部电路的驱动能力,减少芯片内部的驱动通过上拉电阻实现5V输出,完成电平匹配功能开漏/推挽输出下面的电路应该配置成什么模式?复用开漏/推挽输出GPIO的最大输出速度应该如何选择最大输出速度?原则:选择满足要求的最小值场景2:USB-FullSpeed

(全速)场景1:驱动LED250ns最大输出速度=2MHz0

50

10015020025030035040045050ns最大输出速度=10MHz0

255075

100125

150

1752002255ns

10ns

5ns最大输出速度=50MHz0

102030405060708090功耗增加125ns125ns25ns25ns500250100GPIO的HAL库操作函数类型函数原型功能描述初始化及复位函数HAL_GPIO_Init()GPIO初始化函数HAL_GPIO_DeInit()复位选定的端口引脚到初始状态引脚功能操作函数HAL_GPIO_ReadPin()读取选定的端口引脚的电平状态HAL_GPIO_WritePin()设置选定的端口引脚输出高电平或低电平HAL_GPIO_TogglePin()设置选定端口引脚的电平状态翻转HAL_GPIO_LockPin()锁定引脚配置,而不是锁定引脚的输入或输出状态HAL_GPIO_EXTI_IRQHandler()外部中断处理函数HAL_GPIO_EXTI_Callback()中断回调函数示例1:阻塞方式实现LED闪烁功能描述:利用两个GPIO引脚输出高、低电平控制两个发光二极管,并按一定时间间隔改变IO引脚电平,达到灯光闪烁的效果。(省略了限流电阻)示例2:非阻塞方式实现LED灯闪烁HAL_Delay()函数是阻塞式的,即CPU在等待期间无法执行其他任务。因此,在处理实时任务或对执行速度有较高要求的应用中,应谨慎使用此函数。在这些情况下,可以考虑使用其他非阻塞式延迟方法,如使用计时器事件或基于RTOS(实时操作系统)的定时器。在HAL库中,我们可以利用内核外设SysTick实现延时,同时可以不阻塞(non-block)程序运行。SysTick定时器的寄存器有4个,分别为控制和状态(CTRL)寄存器、重装值(LOAD)寄存器、当前值(VAL)寄存器和定时校验(CALIB)寄存器。当SysTick定时器配置为默认的1KHz时,uwTick就会每隔1ms加1,不断累加记录整个系统的运行时间。因此,我们可以把uwTick称为系统时间。示例2非阻塞方式实现点灯效果while(1)

{

staticuint32_ttemp1

=0; //临时变量,用于记录当前系统时间staticuint32_ttemp2=0;

if(HAL_GetTick()>=temp1

+1000){ //延时1000ms HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0); //LED1状态翻转

temp1

=HAL_GetTick(); //更新为当前时间

}

if(HAL_GetTick()>=temp2

+1000){ //延时1000ms HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1); //LED2状态翻转

temp2

=HAL_GetTick(); //更新为当前时间

}

}蓝桥杯考点分析第7届LED状态显示第8届LED状态显示:用4个LED组成流水灯,先从左向右依次点灯,执行10次,然后反方向从右向左点灯,也执行10次。按键按键:常见的输入设备,按下导通,松手断开按键的电路设计外接上拉电阻内部上拉电阻内部下拉内部上拉3.3V3.3V按键消抖按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动软件消抖硬件消抖滤波电容RS触发器如何消抖?示例3:按键输入按下Key1键时,使LED1的输出翻转。按下Key2键时,使LED2的输出翻转。随堂练习

使用AI工具,编写一个基于STM32HAL库的通用的按键驱动程序,要求支持多个按钮,可以设置按键按下和松开时的默认电平,可以识别短按、长按、双击等按键状态,代码通俗易懂。中断系统中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行中断源保存现场清除中断源调用中断响应函数还原现场中断触发中断进入中断响应中断退出中断源接听电话

主程序

洽谈客户中断处理的4个阶段洽谈客户主程序中断响应来电为什么要使用中断?中断协作模型STM32中断资源68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级NVIC简介NVIC(NestedVectored

InterruptController)嵌套中断向量控制器核心外设,位于Cortex-M3内核中,

负责管理中断片上外设(On-ChipPeripheral)外设7外设8SCB核心外设(CorePeripheral)Cortex-M3内核SYSTICK外设5AFIOGP

IOCGP

IOB外设6Corte

x-M3GP

IOANVIC中断优先级的表示方法1.优先级的值越小优先级越高2.遇到抢占优先级更高的中断会发生“中断嵌套”3.未发生中断嵌套时会发生“中断排队”,总优先级更高的中断排在前面抢占优先级

响应优先级00~11

00~11bit3bit2bit1bit0抢占优先级中断优先级响应优先级常规程序常规程序1(2,3)2(2,0)3456(3,3)(3,2)(1,0)(3,2)NVIC编程接口函数名功能HAL_NVIC_SetPriorityGrouping()设置优先级分组方案HAL_NVIC_SetPriority()设置某个中断的抢占优先级和子优先级HAL_NVIC_EnableIRQ()启用某个中断HAL_NVIC_DisableIRQ()禁用某个中断EXTI简介

EXTI(External

Interrupt/EventController)-外部中断/事件控制器stm32的众多片上外设之一,能够检测外部输入信号的变化边沿并由此产生中断GPIOEXT

INVIC中断响

应函数

NVIC

AFIOGP

IOEXTI外部输入信号中断源STM32的EXTI特性支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒触发响应方式:中断响应/事件响应EXTI内部结构

手动清除电平型中断EXT

I的作用-检测外部输入信号的变化边沿并由此产生中断边沿检测双边沿外部输入上升沿

下降沿

双边沿

中断挂起上升沿

下降沿中断挂起遇到脉冲置位中断问题:什么是事件?边沿选择

事件屏蔽外部

输入软件触发中断屏蔽事件0,1什么是事件例子:使用外部输入信号将单片机从睡眠模式中唤醒外部输入

事件

唤醒电源管理片上

外设中断源NVIC中断响应函数片上

外设1

事件

片上

外设2事件指突发事件本身,

一般是一个脉冲信号,事件的处理过程不需要CPU介入

EXT

I

PWR

EXTI寄存器组上升沿选择寄存器下降沿选择寄存器软件触发寄存器

中断屏蔽寄存器

挂起寄存器事件屏蔽寄存器中断挂起遇到脉冲置位中断边沿检测TR3TR2TR1TR0MR3MR2MR1MR0SWIER3SWIER2SWIER1SWIER0TR3TR2TR1TR0PR3PR2PR1PR0MR3MR2MR1MR0…

…

…

…

…

…边沿选择

事件屏蔽SWIER19SWIER18MR19MR18TR19TR18TR19TR18PR19PR18MR19MR180,1软件触发外部输入中断屏蔽上升沿下降沿事件EXTI通道……中断挂起遇到脉冲置位中断边沿检测注意:EXT

I0~19合起来才是一个完整的片上外设边沿选择

事件屏蔽0,1EXTI5EXTI9EXTI10EXTI15EXTI16EXTI17EXTI19EXTI2EXTI0EXTI1EXTI18EXTI3EXTI4软件触发外部输入中断屏蔽上升沿下降沿EXT

I事件让所有IO具备触发中断的能力EXTI0……EXTI3EXTI5EXTI4EXTI9EXTI10EXTI2EXTI1EXTI15

1(PVD_IRQn)可编程电压监控器 3(RTC_IRQn)实时计数器 42(USBWakeUp_IRQn)USB唤醒

62(ETH_WKUP_IRQn)

以太网唤醒Px3Px4Px5Px9Px10Px15PVDRTCUSBEthernet

6(EXTI0_IRQn)

7(EXTI1_IRQn)

8(EXTI2_IRQn)

9(EXTI3_IRQn)

10(EXTI4_IRQn)PA0

PB0

PC0

PD0

PE0

PF0

PG0PA1

PB1

PC1

PD1

PE1

PF1

PG1PA2

PB2

PC2

PD2

PE2

PF2

PG2

40(EXTI10_15_IRQn)

23(EXTI9_5_IRQn)EXTI19EXTI18EXTI17EXTI16AFIOEXT

I在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择EXTIUSB休眠

唤醒EXTI编程接口函数名功能描述__HAL_GPIO_EXTI_GET_IT()检查某个外部中断线是否有挂起(Pending)的中断__HAL_GPIO_EXTI_CLEAR_IT()清除某个外部中断先的挂起标志位__HAL_GPIO_EXTI_GENERATE_SWIT()在某个外部中断线上产生软中断HAL_GPIO_EXTI_IRQHandler()外部中断ISR函数中调用的通用处理函数HAL_GPIO_EXTI_Callback()外部中断处理的回调函数,需要用户重新实现EXTI使用示例用外部中断方式检测2个按键的输入,然后分别控制两个LED。2个按键和2个LED的电路与上章示例相同。示例的功能和操作流程如下。采用外部中断方式检测2个按键的输入,在外部中断里对按键事件进行相应处理。Key1键按下时,使LED1输出翻转。Key2键按下时,使LED2输出翻转。EXTI使用示例思考:1.在该示例中,如果Systick的中断优先级比外部中断的优先级小,会出现什么现象?分析原因。2.将延时时间加长,观察抢占优先级高的按键能否抢占优先级级低的执行。通信接口通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发名称引脚双工时钟电平设备USARTTX、RX全双工异步单端点对点I2CSCL、SDA半双工同步单端多设备SPISCLK、MOSI、MISO、CS全双工同步单端多设备CANCAN_H、CAN_L半双工异步差分多设备USBDP、DM半双工异步差分点对点硬件电路Tx:发送数据Rx:接收数据GND:共地,使通信双方获取相同的电压基准VCC:使用通信的一方给另一方供电VCCVCCTxTxABRxGNDRxGNDUSB转串口模块电脑USB口蓝牙模块串口怎么表示0和1电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:TTL电平:+3.3V或+5V表示1,0V表示0RS232电平:-3~-15V表示1,+3~+15V表示0RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)串口数据帧格式VCCTxAVCCTxB

1

0

1

1

0

1

RxGNDRxGND

0

0 串口数据帧格式例1:通过串口发送十进制数字27例2:发送字符串“Hello”ASCII码:H=0x48e=0x65l=0x6co=0x6f串口数据帧格式起始位数据位停止位空闲空闲串口数据帧格式奇偶校验(查1的个数)奇校验:要求1的个数为奇数偶校验:

要求1的个数为偶数8位有效载荷+1位校验位发送方:发送0x35(00110101),奇校验10

1

0

1

10

01

1

1

0

1

10

0接收方:

奇校验校

验出错校

验校验位:为了检验数据传输是否出错而设立的比特位波特率波特率单个码元的宽度96001/9600s=

0.104ms192001/19200

s=

52

us384001/38400

s=

26

us576001/57600

s=

17.4

us1152001/115200

s=8.7us正常通信的条件:1.采用相同的波特率2.采用相同的数据帧格式波特率:每秒钟传输码元的个数异步通信:收发双方不共享时钟数据线AB时钟线串口流控的工作原理Tx:数据发送Rx:数据接收CTS(Clear

To

Send):可以发送。低电平有效,发送方有效RTS(Request

To

Send):请求发送。低电平有效,接收方有效TxTxRxRxRTSRTSCTSCTSUSART简介USART(UniversalSynchronous/AsynchronousReceiver/Transmitter)通用同步/异步收发器USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里自带波特率发生器,最高达4.5Mbits/s可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)可选校验位(无校验/奇校验/偶校验)支持同步模式、硬件流控制、DMA、智能卡、IrDA、LINSTM32F103C8T6

USART资源:USART1、USART2、USART3USART框图USART基本结构寄存器组TDR-

发送数据寄存器RDR-接收数据寄存器

CR-

配置寄存器SR-

状态寄存器BRR-

波特率寄存器IER-

中断使能寄存器中断使能寄存器(IER)状态寄存器(SR)配置寄存器(CR)

波特率寄存器(BRR)TXE

RXNE

TCTx开关发送数据寄

存器(TDR)接收数据寄

存器(RDR)÷16发送和接收

控制TCIE

PEIE

EIEIE

IE接收发送时钟TxRxM

STOP

PE

PSRx开关分频器波特率总开关中断NE

OREPE

FETXE

RXNERX

ETX

EUE----------第3个数据--------------------第1个数据--------------------第2个数据----------USART的HAL驱动程序分组函数名功能说明初始化HAL_UART_Init()串口初始化,设置串口通信参数HAL_UART_MspInit()串口初始化的MSP弱函数,在HAL_UART_Init()中被调用,一般用于串口引脚的GPIO初始化和中断设置HAL_UART_GetState()获取串口当前状态HAL_UART_GetError()返回串口错误代码阻塞式传输(Blockingmode)HAL_UART_Transmit()阻塞方式发送一个缓冲区的数据,发送完成或超时后才返回HAL_UART_Receive()阻塞方式将数据接收到一个缓冲区,接收完成或超时后才返回中断方式传输HAL_UART_Tramsmit_IT()以中断方式发送一个缓冲区的数据HAL_UART_Receive_IT()以中断方式将指定长度的数据接收到缓冲区DMA方式HAL_UART_Tramsmit_DMA()以DMA方式发送一个缓冲区的数据HAL_UART_Receive_DMA()以DMA方式将指定长度的数据接收到缓冲区HAL_UART_DMAPause()暂停DMA传输过程HAL_UART_DMAResume()继续先前暂停的DMA传输过程HAL_UART_DMAStop()停止DMA传输过程USART的HAL驱动程序宏函数功能描述__HAL_UART_ENABLE(__HANDLE__)启动某个串口__HAL_UART_DISABLE(__HANDLE__)禁用某个串口__HAL_UART_ENABLE_IT(__HANDLE__,__INTERRUPT__)允许某个事件产生中断__HAL_UART_DISABLE_IT(__HANDLE__,__INTERRUPT__)禁止某个事件产生中断__HAL_UART_GET_IT_SOURE(__HANDLE__,__INTERRUPT__)检查某个事件是否被允许产生中断__HAL_UART_GET_FLAG(__HANDLE__,__FLAG__)检查某个事件的中断标志是否被置位__HAL_UART_CLEAR_FLAG(__HANDLE__,__FLAG__)清除某个事件的中断标志位常用的宏函数USART的HAL驱动程序中断事件宏定义中断事件描述对应的回调函数UART_IT_CTSCTS信号变化中断无UART_IT_LBDLIN打断检测中断无UART_IT_TXE发送数据寄存器非空中断无UART_IT_TC传输完成中断,用于发送完成HAL_UART_TxCpltCallback(huart)UART_IT_RXNE接收数据寄存器非空中断HAL_UART_RxCpltCallback(huart)UART_IT_IDLE线路空闲状态中断无UART_IT_PE奇偶校验错误中断HAL_UART_ErrorCallback(huart)UART_IT_ERR发生帧错误、噪声错误、溢出错误的中断HAL_UART_ErrorCallback(huart)中断事件与回调函数示例1:轮询方式

创建一个示例项目Demo5_1_UART,按照下图所示的电路连接方式,通过USB转串口模块CH340将计算机与STM32F103C8T6的最小系统板连接,实现串口收发通信。示例1:轮询方式示例2:中断方式接收使用注意事项HAL_UART_Transmit()或HAL_UART_Receive()都会阻塞程序HAL_UART_Receive()和HAL_UART_Receive_IT()只能接收固定长度数据HAL_UART_Receive_IT()执行一次只能接收一次固定长度的数据,在完成数据接收后会自动关闭接收中断,不会再继续接收下一批数据怎么接收不固定长度的数据?示例3:格式化字符串1、生成格式化字符串2、通过fputc发送到控制台重写DMA简介DMA(DirectMemoryAccess)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了C

温馨提示

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

评论

0/150

提交评论