STM32通用定时器库函数设置心得——新手必看

合集下载

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时。。。

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时。。。

STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)⾼级定时。

⽂章结构:——> ⼀、定时器基本介绍——> ⼆、普通定时器详细介绍TIM2-TIM5——> 三、定时器代码实例⼀、定时器基本介绍之前有⽤过野⽕的学习板上⾯讲解很详细,所以直接上野⽕官⽅的资料吧,作为学习参考笔记发出来⼆、普通定时器详细介绍TIM2-TIM52.1 时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)·外部时钟模式1:外部输⼊脚(TIx)·外部时钟模式2:外部触发输⼊(ETR)·内部触发输⼊(ITRx):使⽤⼀个定时器作为另⼀个定时器的预分频器,如可以配置⼀个定时器Timer1⽽作为另⼀个定时器Timer2的预分频器。

由于今天的学习是最基本的定时功能,所以采⽤内部时钟。

TIM2-TIM5的时钟不是直接来⾃于APB1,⽽是来⾃于输⼊为APB1的⼀个倍频器。

这个倍频器的作⽤是:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率(36MHZ);当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作⽤,定时器的时钟频率等于APB1的频率的2倍。

{假如APB1预分频为2(变成36MHZ),则定时器TIM2-5的时钟倍频器起作⽤,将变成2倍的APB1(2x36MHZ)将为72MHZ给定时器提供时钟脉冲。

⼀般APB1和APB2的RCC时钟配置放在初始化函数中例如下⾯的void RCC_Configuration(void)配置函数所⽰,将APB1进⾏2分频,导致TIM2时钟变为72MHZ输⼊。

如果是1分频则会是36MHZ输⼊,如果4分频:CKINT=72MHZ/4x2=36MHZ; 8分频:CKINT=72MHZ/8x2=18MHZ;16分频:CKINT=72MHZ/16x2=9MHZ}1//系统时钟初始化配置2void RCC_Configuration(void)3 {4//定义错误状态变量5 ErrorStatus HSEStartUpStatus;6//将RCC寄存器重新设置为默认值7 RCC_DeInit();8//打开外部⾼速时钟晶振9 RCC_HSEConfig(RCC_HSE_ON);10//等待外部⾼速时钟晶振⼯作11 HSEStartUpStatus = RCC_WaitForHSEStartUp();12if(HSEStartUpStatus == SUCCESS)13 {14//设置AHB时钟(HCLK)为系统时钟15 RCC_HCLKConfig(RCC_SYSCLK_Div1);16//设置⾼速AHB时钟(APB2)为HCLK时钟17 RCC_PCLK2Config(RCC_HCLK_Div1);18 //设置低速AHB时钟(APB1)为HCLK的2分频(TIM2-TIM5输⼊TIMxCLK频率将为72MHZ/2x2=72MHZ输⼊)19 RCC_PCLK1Config(RCC_HCLK_Div2);20//设置FLASH代码延时21 FLASH_SetLatency(FLASH_Latency_2);22//使能预取指缓存23 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);24//设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz25 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);26//使能PLL27 RCC_PLLCmd(ENABLE);28//等待PLL准备就绪29while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);30//设置PLL为系统时钟源31 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);32//判断PLL是否是系统时钟33while(RCC_GetSYSCLKSource() != 0x08);34 }35//允许TIM2的时钟36 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);37//允许GPIO的时钟38 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);39 }APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。

单片机STM32开发中常用库函数分析

单片机STM32开发中常用库函数分析

单片机STM32开发中常用库函数分析在STM32开发中,使用库函数可以帮助开发人员更快速、更便捷地实现目标功能。

下面是一些常用的STM32库函数的分析:1. GPIO库函数:GPIO库函数用于对STM32的通用输入输出引脚进行配置和控制。

通过这些函数可以实现引脚的初始化、读取和设置等操作。

例如,GPIO_Pin_Init(函数可以对引脚进行初始化配置,GPIO_Pin_Read(函数用于读取引脚的电平,GPIO_Pin_Write(函数用于设置引脚的输出电平。

这些函数的使用可以方便地对外设进行控制。

2. NVIC库函数:NVIC库函数用于对中断向量表进行操作和配置。

通过这些函数可以实现中断的使能、优先级的设置等操作。

例如,NVIC_EnableIRQ(函数可以使能指定的中断,NVIC_SetPriority(函数可设置中断的优先级。

这些函数的使用可以方便地管理中断响应。

3. RCC库函数:RCC库函数用于对STM32的时钟系统进行配置和管理。

通过这些函数可以实现外部时钟源的配置、APB总线时钟的配置等操作。

例如,RCC_OscConfig(函数可进行时钟源的配置,RCC_APBPeriphClockCmd(函数可使能相应的外设时钟。

这些函数的使用可以方便地进行时钟管理。

4. UART库函数:UART库函数用于对STM32的串行通讯端口进行操作和配置。

通过这些函数可以实现串口的初始化、发送和接收等操作。

例如,UART_Init(函数用于串口的初始化设置,UART_SendData(函数用于发送数据,UART_ReceiveData(函数用于接收数据。

这些函数的使用可以方便地进行串口通讯。

5. SPI库函数:SPI库函数用于对STM32的串行外设接口进行操作和配置。

通过这些函数可以实现SPI通讯的初始化、发送和接收等操作。

例如,SPI_Init(函数用于SPI的初始化设置,SPI_SendData(函数用于发送数据,SPI_ReceiveData(函数用于接收数据。

STM32之TIM通用定时器

STM32之TIM通用定时器

STM32之TIM通⽤定时器本⽂介绍如何使⽤STM32标准外设库配置并使⽤定时器,定时器就是设置⼀个计时器,待计时时间到之后产⽣⼀个中断,程序接收到中断之后可以执⾏特定的程序,跟现实中的闹钟功能类似。

与延时功能不同,定时器计时过程中程序可以执⾏其他程序。

最简单直观的应⽤为定时翻转指定IO引脚。

本例程使⽤通⽤定时器TIM3,每100ms翻转GPIOB的Pin5输出,如果该引脚外接有LED灯,可以看到LED灯周期性的闪烁。

STM32F103VE系列共有8个定时器,分为基本定时器、通⽤定时器和⾼级定时器,其中通⽤定时器包括TIM2/3/4/5共4个,如果⼀个定时器不够⽤,可以启动其他⼏个定时器。

本⽂适合对单⽚机及C语⾔有⼀定基础的开发⼈员阅读,MCU使⽤STM32F103VE系列。

TIM通⽤定时器分为两部分,初始化和控制。

1. 初始化分两步:通⽤中断、TIM。

1.1. 通⽤中断:优先级分组、中断源、优先级、使能优先级分组:设定合适的优先级分组中断源:选择指定的TIM中断源:TIM3_IRQn优先级:设定合适的优先级使能:调⽤库函数即可1.2. TIM:时钟、预分频器、定时器周期、分频因⼦、计数模式、初始化定时器、开启定时器中断、使能计数器。

结构体:typedef struct{uint16_t TIM_Prescaler;uint16_t TIM_CounterMode;uint16_t TIM_Period;uint16_t TIM_ClockDivision;uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;时钟:需要使能定时器时钟//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);预分频器:默认定时器时钟频率为72M,那么预分频器设置为71,那么⼀次计数为1us//时钟预分频数为71,则计数器计数⼀次时间为1usTIM_TimeBaseStructure.TIM_Prescaler = 71;定时器周期:设置为999,那么产⽣⼀次定时器中断的时间为1ms//⾃动重装载寄存器为999,则产⽣⼀次中断时间为1msTIM_TimeBaseStructure.TIM_Period = 1000 - 1;计数模式:⼀般选择向上计数模式// 计数器计数模式,选择向上计数模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;时钟分频因⼦:⼀般选择1分频// 时钟分频因⼦,选择1分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;重复计数器的值:仅对⾼级定时器有效,⽆需设置初始化定时器:调⽤库函数即可//初始化定时器TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);开启定时器中断//开启计数器中断TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);使能计数器//使能计数器TIM_Cmd(TIM3, ENABLE);2. 处理2.1. 中断服务函数定时器TIM3的中断服务函数名称为TIM3_IRQHandler ()。

STM32入门篇之通用定时器彻底研究

STM32入门篇之通用定时器彻底研究

STM32入门篇之通用定时器彻底研究STM32的定时器功能很强大,学习起来也很费劲儿,本人在这卡了5天才算看明白。

写下下面的文字送给后来者,希望能带给你点启发。

在此声明,本人也是刚入门,接触STM32不足10天,所以有失误的地方请以手册为准,欢迎大家拍砖。

其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册…}才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。

实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用……TIMER主要是由三部分组成:1、时基单元。

2、输入捕获。

3、输出比较。

还有两种模式控制功能:从模式控制和主模式控制。

一、框图让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了…为了方便的看图,我对里面出现的名词和符号做个注解:TIMx_ETR:TIMER外部触发引脚 ETR:外部触发输入ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入ITRx:内部触发x(由另外的定时器触发)TI1F_ED:TI1的边沿检测器。

TI1FP1/2:滤波后定时器1/2的输入TRGI:触发输入 TRGO:触发输出CK_PSC:应该叫分频器时钟输入CK_CNT:定时器时钟。

(定时周期的计算就靠它)TIMx_CHx:TIMER的输入脚 TIx:应该叫做定时器输入信号xICx:输入比较x ICxPS:分频后的ICxOCx:输出捕获x OCxREF:输出参考信号关于框图还有以下几点要注意:1、影子寄存器。

有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);(详细请参考版主博客/STM32/401461/message.aspx)2、输入滤波机制在ETR何TIx输入端有个输入滤波器,它的作用是以采样频率Fdts来采样N次进行滤波的。

STM32F051R8T6的通用定时器配置

STM32F051R8T6的通用定时器配置

STM32F051R8T6的通用定时器配置将系统时钟24 分频,计数频率为48MHz/24 = 2MHz,则计一个数的时间为0.5us。

计满1000 个数的时间为0.5ms。

这就是TIM3 的定时周期。

voidTIM3_Configuration(void) //每0.5ms 发生一次更新事件(进入中断服务程序). {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);TIM_DeInit(TIM3); //重新将Timer 设置为缺省值TIM_InternalClockConfig(TIM3); //采用内部时钟给TIM3 提供时钟源TIM_ARRPreloadConfig(TIM3, DISABLE); //禁止ARR 预装载缓冲器预装载寄存器的内容被立即传送到影子寄存器TIM_TimeBaseStructure.TIM_Prescaler = 24-1; //预分频系数为24-1,这样计数器计数频率为48MHz/24 = 2MHzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式TIM_TimeBaseStructure.TIM_Period = 1000; //设置计数溢出大小,每计1000 个数就产生一个更新事件TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //将配置应用到TIM3 中TIM_ClearFlag(TIM3, TIM_FLAG_Update); //清除溢出中断标志TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能TIM3 的更新中断TIM_Cmd(TIM3, ENABLE); //开启定时器3//Enable the TIM3 InterruptNVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}stm32f0xx_it.c 文件中//---------------------------------0.5ms 中断一次-----------------。

stm32标准库函数说明

stm32标准库函数说明

stm32标准库函数说明
STM32标准库函数是为了方便开发者使用STM32微控制器而提供的一系列函数和库。

这些库函数提供了许多常用的功能,如GPIO操作、定时器操作、串口通信、ADC转换等。

以下是一些常见的STM32标准库函数及其说明:
GPIO 初始化函数:用于配置GPIO(General-Purpose Input/Output)的引脚模式(输入、输出、复用等)和参数(输出类型、输出速度、上拉/下拉等)。

定时器初始化函数:用于配置定时器的模式(计数器模式、PWM模式等)和参数(时钟源、自动重载值等)。

串口初始化函数:用于配置串口通信的参数(波特率、数据位、停止位、奇偶校验等)。

ADC 初始化函数:用于配置ADC(Analog-to-Digital Converter)的参数(转换模式、分辨率等)。

中断初始化函数:用于配置中断的优先级和触发方式。

延时函数:用于产生一定的延时。

睡眠函数:用于使微控制器进入低功耗模式,降低功耗。

串口发送和接收函数:用于串口通信的发送和接收数据。

ADC 读取函数:用于读取ADC转换的结果。

GPIO 操作函数:用于控制GPIO引脚的电平高低或读取引脚的电平状态。

STM32设置定时器TIM2

STM32设置定时器TIM2

STM32如何设置定时器STM32如何设置定时器下面以stm32的TIM2作为实例一步步配置成为定时器:第一种对定时器的基本配置TIM_TimeBaseStructure.TIM_Period = 1000;//设置自动装载寄存器TIM_TimeBaseStructure.TIM_Prescaler = 35999; //分频计数TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//选择向上计数TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE); //是能定时器始能定时器的中断:TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);在开启时钟里一定要打开TIM2的时钟,函数表达式如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);4:中断向量函数的编写:void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM //如果程序在ram中调试那么定义中断向量表在Ram 中否则在Flash中NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH *//* Set the Vector Table base location at 0x08000000 */NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif/* Enable the TIM2 global Interrupt */NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}5:中断函数的编写:当有TIM2的无论哪个中断触发中断发生那么就会进入这个函数TIM2_IRQHandler(void)所以这个更新事件的中断判断要依靠以下语句:if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)按照以上步骤配置可以顺利进行定时器的基本定时应用第二种方法:/* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/ TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);中断中的设置为:if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)。

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结STM32系列微控制器内置了多个定时器模块,它们可以用于各种定时功能,如延时、周期性触发、脉冲计数等。

在使用STM32定时器之前,我们需要进行定时时间配置,本文将总结一下STM32定时器定时时间配置的相关知识,包括定时器工作模式、定时器时钟源选择、定时器时钟分频、定时器计数器重载值以及定时器中断配置等内容。

首先,我们需要选择定时器的工作模式。

STM32定时器支持多种工作模式,包括基本定时器模式、高级定时器模式、输入捕获模式和输出比较模式等。

基本定时器模式适用于简单的定时和延时操作,输入捕获模式适用于捕获外部事件的时间参数,输出比较模式适用于产生精确的PWM波形。

根据具体的应用需求,选择合适的工作模式。

其次,我们需要选择定时器的时钟源。

STM32定时器的时钟源可以选择内部时钟源(如系统时钟、HCLK等)或外部时钟源(如外部晶体)。

内部时钟源的稳定性较差,适用于简单的定时操作,而外部时钟源的稳定性较好,适用于要求较高的定时操作。

然后,我们需要选择定时器的时钟分频系数。

定时器的时钟分频系数决定了定时器的时钟频率,从而影响了定时器的计数速度。

我们可以通过改变时钟分频系数来调整定时器的计数速度,从而实现不同的定时时间。

时钟分频系数的选择需要考虑定时器的最大计数周期和所需的定时精度。

接着,我们需要配置定时器的计数器重载值。

定时器的计数器从0开始计数,当计数器达到重载值时,定时器将重新开始计数。

通过改变计数器重载值,可以实现不同的定时时间。

计数器重载值的选择需要考虑定时器的时钟频率和所需的定时时间。

最后,我们需要配置定时器的中断。

定时器中断可以在定时器计数达到重载值时触发,用于通知CPU定时器已经计数完成。

在定时器中断中,我们可以执行相应的中断服务程序,比如改变一些IO口的状态,实现定时操作。

通过配置定时器的中断使能和中断优先级,可以实现不同的中断操作。

需要注意的是,不同型号的STM32微控制器的定时器模块可能略有不同,具体的配置方法和寄存器设置也可能不同,请参考相应的数据手册和参考手册进行具体操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32通用定时器库函数设置心得——新手必看
STM32通用定时器是STM32微控制器系列中很重要的一个组件,它具有多种功能,包括定时器、PWM生成器、输入捕获和输出比较等。

在STM32中,定时器的使用非常广泛,常用于各种定时操作、计数操作和脉冲宽度调制等应用。

本文将对STM32通用定时器的库函数进行介绍,帮助新手快速掌握并应用。

首先,在使用STM32通用定时器之前,需要了解一些基本概念。

STM32通用定时器包括TIM2、TIM3、TIM4和TIM5等,它们具有相似的特性和功能,可以根据实际需求选择使用。

在使用定时器之前,需要开启其时钟,并进行相应的初始化设置。

1.定时器时钟的开启和初始化
开启定时器的时钟,需要在RCC时钟控制寄存器中设置相应的位。

具体来说,需要设置APB1或APB2总线上的定时器时钟使能位,开启相应定时器的时钟。

初始化定时器,需要对定时器的模式、预分频值、计数模式、自动重装载寄存器和定时器中断进行设置。

其中,预分频值决定了定时器的时钟频率,计数模式决定了定时器的工作方式,自动重装载寄存器决定了定时器的溢出时间。

2.定时器中断的设置
定时器中断用于定时触发一些操作,可以是定时执行一些函数、改变一些变量或者触发其中一种事件。

定时器的中断分为溢出中断和比较中断两种,可以根据实际需求选择使用。

在使用定时器中断之前,需要设置定时器的中断使能位,并在中断处
理函数中编写相应的中断处理代码。

在中断处理函数中,可以根据具体需
求进行相应的操作,比如改变一些标志位、执行一些函数或者发送一些数据。

3.定时器的计数和计时
定时器的计数和计时是定时器的核心功能,它决定了定时器的工作方
式和定时器值的变化规律。

定时器的计数可以根据实际需要进行设置,可
以是向上计数、向下计数或者上下计数。

定时器的计时功能需要根据预分频值和自动重装载寄存器进行计算,
以确定定时器的溢出时间和定时时间。

通过改变预分频值和自动重装载寄
存器,可以实现不同的定时功能。

4.定时器的输入捕获和输出比较
除了定时功能,定时器还可以用于输入捕获和输出比较。

输入捕获用
于测量外部信号的频率或脉宽,输出比较用于产生PWM信号。

通过设置定
时器的捕获/比较模式和捕获/比较寄存器,可以实现相应的功能。

在使用输入捕获和输出比较功能之前,需要设置相应的模式和寄存器,并根据实际需要读取或写入相应的值。

同时,还可以根据需要选择触发源
和输出模式,以满足不同的应用需求。

总结起来,STM32通用定时器具有多种功能,包括定时器、PWM生成器、输入捕获和输出比较等。

在利用定时器进行应用开发之前,需要了解
定时器的基本概念和工作原理,并进行相应的配置和设置。

同时,还需要
根据实际需求选择合适的定时器和相应的配置参数。

通过熟练掌握STM32
通用定时器的库函数,可以更加灵活地使用定时器,并实现各种定时操作和计数功能。

相关文档
最新文档