久治县wap网站建设公司,全球搜索网站排名,网站建设代理平台怎么做,深圳电器公司13.2.10 RTC中断所有RTC中断都连接到EXTI控制器#xff0c;并且占用相同的中断向量号“2”。其中RTC报警事件连接至EXTI17线#xff0c;RTC侵入和时间戳事件连接至EXTI19线。RTC模块的中断控制详见表13-6。注#xff1a;仅当RTC时钟源为LSE或LSI时才可以从停止和待机模式中唤…13.2.10 RTC中断所有RTC中断都连接到EXTI控制器并且占用相同的中断向量号“2”。其中RTC报警事件连接至EXTI17线RTC侵入和时间戳事件连接至EXTI19线。RTC模块的中断控制详见表13-6。注仅当RTC时钟源为LSE或LSI时才可以从停止和待机模式中唤醒。编程向导1.启用RTC报警中断·在中断模式下设置并使能RTC报警事件对应的EXTI线并选择上升沿极性。·设置并使能NVIC中的RTC_ALARM通道。·设置并使能RTC触发报警功能Alarm A。2.启用侵入中断·在中断模式下设置并使能RTC侵入事件对应的EXTI线并选择上升沿极性。·设置并使能NVIC的TAMP_STAMP通道。·设置RTC检测RTC侵入事件。3.启用时间戳中断·在中断模式下设置并使能RTC时间戳事件对应的EXTI线并选择上升沿极性。·设置并使能NVIC的TAMP_STAMP通道。·设置RTC检测RTC时间戳事件。13.3 RTC函数13.3.1 RTC类型定义13.3 RTC函数13.3.1 RTC类型定义13.3.2 RTC常量定义13.3.3 RTC函数定义13.4 RTC应用实例STM32F072VBT6微控制器的RTC模块相对于芯片来说是一个独立的部分它不仅能依靠主电源供电当主电源VCC掉电后还可以使用VBAT引脚的电池供电以维持时钟的运行只有发生上电复位时RTC才停止工作并返回到初始状态。在本章RTC模块的编程应用中将读取RTC模块日历寄存器的值并将时间显示在四位数码管上并且使能PC13的1Hz校准输出用其驱动一个LED灯显示RTC模块的运行状态。由于PC13、PC14和PC15引脚处于备份域其引脚通过片内模拟开关供电对于供电电流有严格限制3 mA所以在驱动LED时需要通过一个晶体管来提高其负载能力。具体电路见图13-4。在使用STM32CubeMX软件生成开发项目时在“Pinout”视图中对于外设和引脚的配置如图13-5所示。这里需要注意的是要使能RTC模块的校准输出频率为1Hz并且将PC14和PC15的引脚功能设置为RCC_OSC32_IN和RCC_OSC32_OUT。在“Clock Configuration”视图中对时钟的配置如图13-6所示。这里需要注意的是要将RTC模块的时钟设置为LSE。在“Configuration”视图中对于RTC的配置如图13-7所示。RTC模块的时间设置为“2018年1月1日12时00分星期一”。图13-6 配置RTC模块二基于RTC模块的四位数字时钟代码详见代码清单13-1。代码清单13-1 RTC四位数字时钟main.c在附录J中指定的网站链接下载源代码第14章 定时器STM32F0系列微控制器片内集成了多个定时器。按照功能的不同这些定时器可以分为高级控制型、通用型和基本型3种本章将以高级控制型定时器TIM1为例介绍定时器的内部结构和编程方法。14.1 定时器概述STM32F0系列微控制器片内的定时器功能非常丰富除了最基本的定时和计数功能以外还集成了输入捕捉、输出比较和PWM输出等功能。此外定时器按使用定位不同还支持互补输出、死区时间控制、定时器从模式等一些特殊功能。14.1.1 定时器配置STM32F072VBT6微控制器片内集成了9个具有定时功能的定时器。其中有1个16位高级控制定时器、1个32位及5个16位通用定时器、2个16位基本定时器。定时器的具体配置及功能详见表14-1。1.高级控制定时器TIM1TIM1用于高级控制功能具有16位自动重载向上/向下计数器和16位预分频器。该定时器有4个独立通道可用于输入捕捉、输出比较、PWM或单脉冲输出模式。TIM1可以配置成具有6路复合输出的三相PWM控制器每相均有互补输出通道并带有可编程死区时间控制。2.通用定时器TIM2、TIM 3、TIM 14、TIM 15、TIM 16、TIM 17通用定时器可以用于时基或PWM输出其中TIM2是32位定时器TIM3是基于16位定时器这两个定时器均具有自动重载向上/向下计数功能有16位预分频器和4个独立通道。TIM14、TIM15、TIM16和TIM17都是16位定时器。TIM15有两个独立的通道TIM14、TIM16和TIM17只有一个通道。这些定时器的每一个通道都具有输入捕捉、输出比较、PWM或单脉冲输出功能。3.基本定时器TIM6、TIM7TIM6和TIM7也是基于16位自动装载向上计数和16位预分频器的定时器没有输入输出通道主要用于产生DAC触发事件或作为通用的16位时基使用。14.1.2 TIM1的功能TIM1定时器由一个16位向上、向下、向上/向下自动装载计数器构成具有16位可编程、可以实时修改预分频器预分频系数可以在165535的任意数值调整。TIM1具有4个独立通道每个通道可以配置成输入捕捉、输出比较、PWM或单脉冲模式输出。当配置成PWM功能时具有可编程的死区时间控制、互补输出和刹车功能。可以在更新或触发等事件发生时产生中断或DMA请求。此外TIM1还支持编码器和霍尔传感器电路。TIM1定时器的内部结构如图14-1所示。1.时基单元TIM1的时基单元包含4个寄存器分别是计数器寄存器TIM1_CNT、预分频器寄存器TIM1_PSC、自动装载寄存器TIM1_ARR和重复计数寄存器TIM1_RCR。TIM1的主要部分由一个16位计数器CNT和自动装载寄存器构成计数器可以向上计数、向下计数或者向上/向下双向计数计数器由预分频器的时钟输出CK_CNT驱动当TIM1_CR1寄存器的计数器使能位CEN1时计数器开始计数。计数器、自动装载寄存器和预分频寄存器均可以由软件读写而不论计数器运行与否。自动装载寄存器由预装载寄存器和影子寄存器构成二者组成预装载结构如图14-2所示。写或读自动装载寄存器将首先访问其预装载寄存器。按照设置的不同预装载寄存器的内容可以被立即或在每次更新事件UEV产生时传送到影子寄存器。当自动预装载使能TIM1_CR1寄存器ARPE1时写入自动装载寄存器中的数据将被保存在预装载寄存器中并在下一个更新事件时传送到影子寄存器并立即生效当自动预装载禁止时ARPE0写入自动装载寄存器的数据将立即传送至影子寄存器中。更新事件UEV是由计数器达到溢出条件上溢或下溢且在更新事件允许TIM1_CR1寄存器的UDIS0时产生的。更新事件也可以由软件操作TIM1_EGR寄存器的UG位或由从模式控制器产生定时器复位时产生。2.预分频器预分频器可以将计数器预分频时钟CK_PSC165536之间的任意值进行分频得到计数器时钟CK_CNT。预分频器的分频比例可以使用以下公式计算计数器时钟fCK_CNT计数器预分频时钟fCK_PSC/PSC[150]1预分频寄存器带有缓冲器它能够在定时器运行时改变新的预分频值会在下一次更新事件到来时生效具体时序如图14-3所示。图14-3中当预分频值PSC[150]0时分频比为1预分频时钟与计数器时钟相同。当在TIM1_PSC寄存器中写入新的预分频值PSC[150]3时分频比并没有立即更改而是在更新事件到来时分频比才从1变为4。3.计数器16位的计数器CNT按照设置的不同可以向上、向下或向上/向下计数并产生更新事件。·向上计数模式计数器从0计数到自动加载值TIM1_ARR寄存器的值并产生计数溢出然后重新从0开始计数。计数溢出时将产生一个更新事件如果开启了重复计数功能TIM1_RCR寄存器的值不为0只有在向上计数溢出的次数达到设置的重复次数TIM1_RCR寄存器的值时才会产生更新事件。当更新事件产生时重复计数器被重新加载为TIM1_RCR寄存器的值自动装载影子寄存器被更新为预装载寄存器TIM1_ARR的值预分频器的缓冲区被写入预装载寄存器TIM1_PSC的值TIM1_SR寄存器的更新标志位UIF将置位如果TIM1_DIER寄存器的UIE位为1将产生更新中断。通过软件设置TIM1_CR1寄存器中的UDIS位可以禁止更新事件的产生但计数器溢出后计数器的值仍然会被清0同时预分频器的计数也将被清0但原有的预分频系数不变。图14-4中显示了当预分频系数为4且TIM1_ARR寄存器的值为“0x0036”时向上计数的时序。图中计数器在每4个预分频时钟时计数1次当计数值达到“0x0036”时发生计数溢出计数值清0并产生更新事件同时更新中断标志位将被设置。在计数过程中更改TIM1_ARR寄存器的值会对当前的计数过程产生影响这可以分两种情况来讨论。一种是当TIM1_CR1寄存器的ARPE位为0时TIM1_ARR寄存器的预装载功能关闭正常情况下计数器计数到“0x00FF”时才发生计数溢出但在计数器计数到“0x0032”时软件向TIM1_ARR寄存器写入数值“0x0036”写入的数值立即生效并在计数器计数至“0x0036”时发生计数溢出并产生更新事件。当ARPE0时更新事件对计数器的影响如图14-5所示。另一种情况是当ARPE位为1时TIM1_ARR寄存器的预装载功能开启这时写入TIM1_ARR寄存器的值“0x0036”并没有立即生效而是在下一次更新事件到来时才更新自动装载影子寄存器并开始对计数溢出产生影响。ARPE1时更新事件对计数器的影响如图14-6所示。·向下计数模式在向下计数模式中计数器从自动装入值TIM1_ARR寄存器的值开始向下计数到0在发生计数器下溢时产生一个更新事件。之后计数器再次从自动装入值开始向下计数。如果启用了重复计数器只有当向下计数溢出次数达到重复计数寄存器TIM1_RCR中设定的值后才产生更新事件。向下计数模式的时序如图14-7所示。·中央对齐模式向上/向下计数在中央对齐模式下计数器从0开始向上计数到自动加载值TIM1_ARR寄存器的值产生一个计数器上溢事件然后向下计数到1并产生一个计数器下溢事件。之后计数器再次从0开始重新计数每次计数上溢和下溢时均会产生更新事件。中央对齐模式的计数时序如图14-8所示。4.重复计数器重复计数寄存器TIM1_RCR的值默认为0这时计数器每次上溢或下溢都会产生更新事件。当重复计数器的值为N时则在每N次计数上溢或下溢时才会产生更新事件。重复计数器的值在以下条件成立时递减·在向上计数模式下每次计数器溢出时·在向下计数模式下每次计数器下溢时·在中央对齐模式下每次上溢和每次下溢时重复计数器是自动加载的当重复计数值达到0并产生更新事件时重复计数器的值自动加载为TIM1_RCR寄存器的值。当更新事件由软件产生时通过设置TIM1_EGR寄存器的UG位则不论重复计数器的值是多少都会立即产生更新事件并且TIM1_RCR寄存器的内容被重载入到重复计数器。定时器不同工作模式下更新事件的产生情况如图14-9所示。14.1.3 计数时钟通常情况下TIM1的计数时钟由系统内部时钟CK_INT提供称为内部时钟模式。此外计数时钟也可以由外部信号提供如配置成使用输入通道TIx、内部触发输入ITRx或外部触发输入引脚ETR信号作为计数时钟这称之为外部时钟模式。TIM1的时钟结构如图14-10所示。1.内部时钟模式当TIM1从模式控制寄存器TIM1_SMCR的“SMS000”时预分频器时钟CK_PSC由内部时钟CK_INT提供。当TIM1_CR1寄存器的CEN位置1后计数器开始使用内部时钟的分频时钟计数。2.外部时钟模式1当TIM1_SMCR寄存器的“SMS111”时计数器在选定输入端的每个上升沿或下降沿计数。按照TIM1_SMCR寄存器TS[20]位域的设置不同可以用来自其他定时器的内部触发信号ITRx、定时器输入通道TI1的边沿检测信号TI1_ED、经滤波后的输入通道TI1/TI2信号TI1PF1、TI2PF2以及外部触发引脚TIM1_ETR信号驱动计数器计数。在外部时钟模式1中TI1FPx和TI2FPx信号是电平输出它是TI1和TI2输入端经滤波和采样整形后的完整信号而TI1F_ED是脉冲信号它只有在每次TI1F变化时输出一个短脉冲只要变化就会有脉冲产生。使用TI2信号的外部时钟模式1的原理如图14-11所示。编程向导 配置计数器在TI2输入端的上升沿向上计数1编程TIM1_CCMR1寄存器CC2S[10]01配置通道2检测TI2输入的上升沿。2编程TIM1_CCMR1寄存器的IC2F[30]选择输入滤波器带宽。3编程TIM1_CCER寄存器的CC2P0选定上升沿极性。4编程TIM1_SMCR寄存器的SMS[20]111选择定时器为外部时钟模式1。5编程TIM1_SMCR寄存器中的TS[20]110选定TI2作为触发输入源。6编程TIM1_CR1寄存器的CEN1启动计数器。这里需要注意的是输入捕捉预分频器不用作触发或内部时钟功能所以不需要对TIM1_CCMR1寄存器的IC2PSC[10]进行配置。当TI2上升沿出现时计数器计数一次相应的TIF标志会置位软件对TIF位写0可以清除此标志。3.外部时钟模式2外部时钟模式2等同于外部时钟模式1并将ETRF信号连接至TRGI。当TIM1_SMCR寄存器的ECE1时外部时钟模式2被使能计数器在外部触发引脚ETR的每个上升或下降沿进行计数。外部时钟模式2的原理如图14-12所示。编程向导 配置计数器在ETR的每两个上升沿向上计数一次1编程TIM1_SMCR寄存器的ETF[30]0000禁用滤波器。2编程TIM1_SMCR寄存器的ETPS[10]01设置预分频比为2。3编程TIM1_SMCR寄存器的ETP0选择检测ETR的上升沿有效。4编程TIM1_SMCR寄存器中的ECE1开启外部时钟模式2。5编程TIM1_CR1寄存器中的CEN1启动计数器。