stm32 基本定时器最简单定时配置

发布者:Coboro最新更新时间:2018-12-10 来源: eefocus关键字:stm32  基本定时器  定时配置 手机看文章 扫描二维码
随时随地手机看文章

最近用到了定时器的定时功能,了解了下,stm32的定时器功能很强大,东西也挺多的,datasheet里也说了一大段,这个我就不详说了,这儿只说明下如何配置最简单的定时功能配置。


环境说明:MCU:stm32F4系列,用的是通用定时器TIM3


首先要知道的是TIM3 是挂载到APB1总线上的,这点详见STM32F417xx_datasheet-P.19,有个框图叫Device overview,算了,还是截个图 


这里写图片描述


而APB1 的时钟是多少呢?这个得看你自己配置的多少了,一般是在SetSysClock()函数里,我这儿是系统时钟的4分频,系统时钟这儿为168MHz,所以APB1上的时钟为42MHz,这儿不要以为TIM3的时钟就是42MHz了,因为APB1到TIM3还要经过一个倍频器,这个倍频器只有当前面系统时钟到APB1的分频系数不为1时才起作用,而我们前面说了APB1是系统时钟4分频得到的,故这儿倍频器生效,所以TIM3的时钟为APB1的倍频,即84MHz。


ok,得到了定时器的输入时钟,我们配置定时器的简单功能其实就只需要两个参数:预分频数和自动重载值


Tout = ((arr+1)*(psc+1))/Tclk;


其中arr就是自动重装值,psc为预分频值,Tclk就是定时器的时钟。 


比如我想要1s钟的定时器,就可以设定:arr =9999;psc=8399; 


这儿要注意下arr和psc的取值范围,前者是u32 的,后者是u16的。


  NVIC_InitTypeDef NVIC_InitStructure;


  // TIM3 clock enable 

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);


  // Enable the TIM3 gloabal Interrupt 

  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);


  TIM_TimeBaseStructure.TIM_Period          = arr;

  TIM_TimeBaseStructure.TIM_Prescaler       = psc;

  TIM_TimeBaseStructure.TIM_ClockDivision   = 0;

  TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;

  //向上计数模式,就是从0计数到arr,计数到arr时,产生一个TIM_IT_Update中断,还有其他中断可选


  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


  /* TIM Interrupts enable */

  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);


  /* TIM3 enable counter */

  TIM_Cmd(TIM3, ENABLE);


这样定时器就开始工作了,然后再写上中断处理函数,


void TIM3_IRQHandler(void)

{

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)

    {

        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

        //your code

    }

}


至此,TIM3的定时功能就完成了,由psc和arr值,我们可以设定想要的定时时间。 


当然,这只是定时的一个很简单的功能,还有很多酷炫的东西,如有错误,还请指正!


关键字:stm32  基本定时器  定时配置 引用地址:stm32 基本定时器最简单定时配置

上一篇:STM32F107的通用定时器中断实验总结
下一篇:STM32学习之通用定时器中断

推荐阅读最新更新时间:2024-03-16 16:19

STM32自带PWM输出实验
#include stm32f10x_lib.h #include sys.h #include delay.h #include usart.h #define LED0_val TIM3- CCR2 void PWM_init(u16 arr,u16 psc) { RCC- APB1ENR|=1 1; //TIM3时钟使能 GPIOA- CRH&=0xfffffff0; //PA8 GPIOA- CRH|=0x00000004; //PA8 浮空输入 GPIOA- CRL&=0x0fffffff; GPIOA- CRL|=0xB00000
[单片机]
<font color='red'>STM32</font>自带PWM输出实验
STM32标准库和HAL库的区别
大体看了下,标准库移植起来没有HAL库方便。 用HAL库移植起来不需要改动,怪不得ST推HAL库 好像标准库后面的芯片就不支持了 怪不得华清现在讲课,STM32的课还有freertos的课都是用的STM32CUBE https://blog.csdn.net/ice_masters/article/details/105644704 https://blog.csdn.net/bornpride/article/details/94601754 怪不得这里说没有可移植性,我最开始看到这句的时候很吃惊,标准库怎么没有可移植性了。
[单片机]
<font color='red'>STM32</font>标准库和HAL库的区别
STM32-(35):DMA传输控制(实验)
实验内容: 通过DMA 进行数据传输,实现两块内存空间的拷贝,如果两块内存中的数据一致,蜂鸣器会响起,否则不响。 代码 /*********************************************************************** * 文件 : main.c * 说明 :存储器与存储器之间的DMA传输 * 说明 :通过DMA进行数据传输,实现两块内存空间的拷贝,如果两块内存中的数据一致,蜂鸣器会响起,否则不响 ************************************************************************/ /* Includes -------
[单片机]
STM32重定向C库printf/scanf
参考例程 ///重定向c库函数printf到串口,重定向后可使用printf函数 int fputc(int ch, FILE *f) { /* 发送一个字节数据到串口 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待发送完毕 */ while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return (ch); } ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数 int fgetc(FILE *f) { /* 等待串口输入数据
[单片机]
嵌入式STM32的GPIO口工作模式的介绍
  一。输入模式   1. 浮空输入   浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值。   2. 输入上拉模式   上拉电阻开关连上,上拉电阻的阻值为30k-50k。   3. 输入下拉模式   下拉电阻开关连上。   4. 模拟输入模式   模拟输入方式时外部信号为模拟量,不是高低电平。   注意信号没有经过施密特触发器。   另外上拉下拉都无效。
[单片机]
踏踏实实搞清 stm32 SPI总线 基础和编程
SPI应用是相当的广了,同步串行总线,同步同步当然需要时钟信号来统一了,这样通讯双方通讯时就比较默契没那么延迟(呆呆)了。应用于中低速场合。 学起来从哪些地方入手呢?如下: SPI概念与特点 关键的时序接受 编程时重点 STM32内部的SPI使用(介绍、功能、中断) SPI概念与特点:不多说,串行,需要同步信号 主从结构的 CS(片选) SCK SDI SDO 全双工 一主控多从 8或16位数据通信 其它特点:8个主模式波特率预分频系数 fpcll/2 主模式和从模式下快速通行 并支持切换 编程MSB 或LSB在前 专用发送和接受标志可促发中断 有
[单片机]
STM32开发板上实现按键驱动(定时扫描去抖方式)
在万利STM32学习板的USB摇杆例程中,摇杆的按键处理并没有消抖处理,因此重新修改了摇杆的驱动,顺便还增加了两个按键以及摇杆中键下压的驱动,以方便直接使用。只要定时调用(几ms)KyeScan函数,就会将当前按键的改变情况和按住情况保存在对应的变量中。 当某个键按下时,在KeyDown中对应的位被设置为1;某个键被释放时,KeyUp中对应的位为1;KeyPress中保存的是当前按键的按住情况,某位为1时表示对应的键被按住。 KeyDown和KeyUp中的值使用后要手动清除,表示已经处理了这个事件,而KeyPress不用手动清除,它一直反映按键的按住情况。 万利的板子上有两个按键KEY_2和KEY_3,另外还有一个摇杆:K
[单片机]
全面掌握stm32的GPIO知识
1 初学者重要提示 本文主要是以stm32H7系列为主。 对于不使用的引脚,推荐设置为模拟模式,悬空即可。 GPIO的速度等级高的时候,最好使能IO补偿单元。 2 GPIO功能简介 STM32H7的GPIO特性如下: 输出状态:开漏/推挽 + 上拉/下拉电阻。 通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。 GPIO速度等级设置。 输入状态:浮空,上拉/下拉,模拟。 通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。 通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。 通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。 每两
[单片机]
全面掌握<font color='red'>stm32</font>的GPIO知识
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved