【STM32】知识点介绍六:外设定时器
文章目录一、外设定时器二、定时计算三、库函数四、代码思路一、外设定时器1.定义设置定时时间定时周期超时后则执行指定操作的硬件。2.STM32F407定时器特征具有基本的定时功能也有 PWM 输出灯光亮度控制、电机的转速、脉冲捕获功能红外捕捉。2个高级控制定时器、10 个通用定时器 和 2 个基本定时器。高级控制定时器TIM1 和 TIM8挂载到APB2。具有 16 位定时器功能也具有 PWM 输出高级控制功能包括捕获和比较功能。通用定时器TIM2 到 TIM5挂载到APB1。具有 16 或 32位定时功能也具有 PWM 输出控制功能。通用定时器TIM9 到 TIM14挂载到APB1或APB2。具有 16 位定时功能也具有 PWM 输出控制功能基本定时器TIM6 和 TIM7挂载到APB1。具有 16 位定时功能。3.定时器区别1通用定时器和购机定时器二、定时计算1.定时器时钟频率由硬件自动设置STM32F405xx/07xx 和 STM32F415xx/17xx 的定时器时钟频率由硬件自动设置。分为两种情况1如果 APB 预分频器为 1定时器时钟频率等于 APB 域APB1和APB2的频率。2等于 APB 域APB1和APB2的频率的两倍 (×2)。关于APB1与APB2预分频值的说明在system_stm32f4xx.c文件的头部详细描述如下*5.This file configures the system clock as follows:***Supported STM32F40xxx/41xxx devices*-----------------------------------------------------------------------------*System Clock source|PLL(HSE)*-----------------------------------------------------------------------------*SYSCLK(Hz)|168000000*-----------------------------------------------------------------------------*HCLK(Hz)|168000000*-----------------------------------------------------------------------------*AHB Prescaler|1*-----------------------------------------------------------------------------*APB1 Prescaler|4*-----------------------------------------------------------------------------*APB2 Prescaler|2*-----------------------------------------------------------------------------*HSEFrequency(Hz)|25000000关于APB1与APB2预分频值设置在system_stm32f4xx.c文件详细代码如下/** * brief Configures the System clock source, PLL Multiplier and Divider factors, * AHB/APBx prescalers and Flash settings * Note This function should be called only once the RCC clock configuration * is reset to the default reset state (done in SystemInit() function). * param None * retval None */staticvoidSetSysClock(void){............/* HCLK SYSCLK / 1*/RCC-CFGR|RCC_CFGR_HPRE_DIV1;#ifdefined(STM32F40_41xxx)||defined(STM32F427_437xx)||defined(STM32F429_439xx)/* PCLK2 HCLK / 2*/RCC-CFGR|RCC_CFGR_PPRE2_DIV2;/* PCLK1 HCLK / 4*/RCC-CFGR|RCC_CFGR_PPRE1_DIV4;#endif/* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx */............}2.定时器3硬件时钟3.定时500msTIM_TimeBaseStructure.TIM_Period(10000/2)-1;//定时时间的配置也就是配置重载值而重载值会传递给计数值TIM_TimeBaseStructure.TIM_Prescaler8400-1;//配置分频值确定定时器的时钟频率TIM_TimeBaseStructure.TIM_CounterModeTIM_CounterMode_Up;//向上计数0-TIM_Period就会触发中断请求TIM_TimeBaseInit(TIM3,TIM_TimeBaseStructure);疑点为什么预分频填写参数时要减1答因为参数传递给寄存器时默认帮忙加1。拓展1若定时器3的硬件时钟频率为10000Hz最大的定时时间1000ms Tmax--------------1000065536Tmax6553.6ms6.5536s拓展2下图STM32F407无时钟分频。4.TIM时基单元1定时器定时时长计算公式定时器的定时时长T由以下公式决定其中PSC预分频器值0~65535ARR自动重装载值0~65535TIM_CLK定时器时钟频率Hz2PWM特性计算在时基单元的配置中我们已经推导出频率占空比×定时时长PWM输出高/低电平时间则三、库函数1.定时器基本初始化/** * brief Initializes the TIMx Time Base Unit peripheral according to * the specified parameters in the TIM_TimeBaseInitStruct. * param TIMx: where x can be 1 to 14 to select the TIM peripheral. * param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef structure * that contains the configuration information for the specified TIM peripheral. * retval None */voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct)2.定时器中断配置/** * brief Enables or disables the specified TIM interrupts. * param TIMx: where x can be 1 to 14 to select the TIMx peripheral. * param TIM_IT: specifies the TIM interrupts sources to be enabled or disabled. * This parameter can be any combination of the following values: * arg TIM_IT_Update: TIM update Interrupt source * arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source * arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source * arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source * arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source * arg TIM_IT_COM: TIM Commutation Interrupt source * arg TIM_IT_Trigger: TIM Trigger Interrupt source * arg TIM_IT_Break: TIM Break Interrupt source * * note For TIM6 and TIM7 only the parameter TIM_IT_Update can be used * note For TIM9 and TIM12 only one of the following parameters can be used: TIM_IT_Update, * TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. * note For TIM10, TIM11, TIM13 and TIM14 only one of the following parameters can * be used: TIM_IT_Update or TIM_IT_CC1 * note TIM_IT_COM and TIM_IT_Break can be used only with TIM1 and TIM8 * * param NewState: new state of the TIM interrupts. * This parameter can be: ENABLE or DISABLE. * retval None */voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalState NewState)递增计数模式在递增计数模式下计数器从 0 计数到自动重载值TIMx_ARR 寄存器的内容然后重新从 0 开始计数并生成计数器上溢事件。每次发生计数器上溢时会生成更新事件。TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);3.定时器工作使能/** * brief Enables or disables the specified TIM peripheral. * param TIMx: where x can be 1 to 14 to select the TIMx peripheral. * param NewState: new state of the TIMx peripheral. * This parameter can be: ENABLE or DISABLE. * retval None */voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalState NewState)四、代码思路使能定时器硬件时钟设置定时器分频值确定定时器计数值使能定时器工作使能定时器更新中断触发配置定时器中断优先级编写定时器中断服务函数
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2426871.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!