分享
发布时间:2017-10-18 15:52 电子爱好者网

stm32通用定时器

分享

                                              STM32 的守时器功用非常强壮,有TIME1 和TIME8 等高档守时器,也有 TIME2~TIME5 等通用守时器,还有 TIME6 和TIME7 等根本守时器和看门狗守时器以及体系时基守时器。

                                              根本守时器(TIM6,TIM7)的主要功用: 只要最根本的守时功用,根本守时器TIM6和TIM7各包含一个16位主动装载计数器,由各自的可编程预分频器驱动。

                                              通用守时器(TIM2~TIM5)的主要功用: 除了根本的守时器的功用外,还具有丈量输入信号的脉冲长度( 输入捕获) 或许发作输出波形( 输出比较和PWM)。

                                              高档守时器(TIM1,TIM8)的主要功用: 高档守时器不光具有根本,通用守时器的一切的功用,还具有操控交直流电动机一切的功用,你比方它能够输出6路互补带死区的信号,刹车功用等等。

                                              两个看门狗守时器:独立看门狗、窗口看门狗。

                                              体系时基守时器:SysTick,24位递减计数器,主动重加载,常用于发作延时ms级、us级。

                                              stm32通用守时器

                                              1、 STM32 通用守时器简介 STM32 的通用守时器是一个经过可编程预分频器(PSC)驱动的 16 位主动装载计数器(CNT)构成。STM32 的通用守时器能够被用于:丈量输入信号的脉冲长度(输入捕获)或许发作输出波形(输出比较和 PWM)等。STM32 的每个通用守时器都是彻底独立的,没有相互同享的任何资源。

                                              STM32 的通用守时器 TIMx (TIM2、TIM3、TIM4 和 TIM5) 功用包含:

                                              1)16 位向上、向下、向上/向下主动装载计数器(TIMx_CNT)。

                                              2)16 位可编程(能够实时修正)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的恣意数值。

                                              3)4 个独立通道(TIMx_CH1~4),这些通道能够用来作为:

                                              A.输入捕获

                                              B.输出比较

                                              C.PWM 生成(边际或中心对齐形式)

                                              D.单脉冲形式输出

                                              4)可运用外部信号(TIMx_ETR)操控守时器和守时器互连(能够用 1 个守时器操控别的一个守时器)的同步电路。

                                              5)如下事情发作时发作中止/DMA:

                                              A.更新:计数器向上溢出/向下溢出,计数器初始化(经过软件或许内部/外部触发)

                                              B.触发事情(计数器发动、中止、初始化或许由内部/外部触发计数)

                                              C.输入捕获

                                              D.输出比较

                                              E.支撑针对定位的增量(正交)编码器和霍尔传感器电路

                                              F.触发输入作为外部时钟或许按周期的电流办理

                                              stm32通用守时器

                                              2、stm32通用守时器的存放器 1)主动重装载存放器(TIMx_ARR),该存放器在物理上实践对应着 2 个存放器。

                                              一个是程序员能够直接操作的,别的一个是程序员看不到的,这个看不到的存放器在《STM32参考手册》里边被叫做影子存放器。事实上真实起作用的是影子存放器。依据 TIMx_CR1 存放器中 APRE 位的设置:APRE=0 时,预装载存放器的内容能够随时传送到影子存放器,此刻 2者是连通的;而 APRE=1 时,在每一次更新事情(UEV)时,才把预装在存放器的内容传送到影子存放器。

                                              2)预分频存放器(TIMx_PSC),该存放器用设置对时钟进行分频,然后供给给计数器,作为计数器的时钟。

                                              守时器的时钟来历有 4 个:

                                              a )内部时钟(CK_INT)

                                              b )外部时钟形式 1:外部输入脚(TIx)

                                              c )外部时钟形式 2:外部触发输入(ETR)

                                              d )内部触发输入(ITRx):运用 A 守时器作为 B 守时器的预分频器(A 为 B 供给时钟)。

                                              这些时钟,详细挑选哪个能够经过 TIMx_SMCR 存放器的相关位来设置。这儿的 CK_INT时钟是从 APB1 倍频的来的,除非 APB1 的时钟分频数设置为 1, 不然通用守时器 TIMx 的时钟是 APB1 时钟的 2 倍,当 APB1 的时钟不分频的时分,通用守时器 TIMx 的时钟就等于 APB1的时钟。这儿还要留意的就是高档守时器的时钟不是来自 APB1,而是来自 APB2 的。

                                              3)计数器当时值存放器(TIMx_CNT),该存放器是守时器的计数器,该存放器存储了当时守时器的计数值。

                                              4)状况存放器(TIMx_SR),该存放器用来符号当时与守时器相关的各种事情/中止是否发作。

                                              5 )DMA/ 中止使能存放器(TIMx_DIER)

                                              3、stm32通用守时器常用库函数 守时器参数初始化:

                                              void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

                                              守时器使能函数:

                                              void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalStateNewState)

                                              守时器中止使能函数:

                                              void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalStateNewState);

                                              状况标志位获取和铲除

                                              FlagStatusTIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

                                              void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

                                              ITStatusTIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);

                                              void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)

                                                                责任编辑:fatee

                                                                (sinaere = window.sinaere || []).push({});
                                                                0