STM32学习笔记——高级定时器TIM1更新中断配置

发布者:影子猎人最新更新时间:2018-04-23 来源: eefocus关键字:STM32  高级定时器  中断配置 手机看文章 扫描二维码
随时随地手机看文章

stm32高级定时器TIM1,更新中断初始化配置和普通定时器差别不大,需要注意的是结构IM_TimeBaseInitTypeDef中TIM_RepetitionCounter配置问题。TIM_RepetitionCounte是用来配置重复计数,就是重复溢出多少次才给你来一个溢出中断,只有高级定时器需要配置。下面是官方库中对它的注释:




它对应的寄存器叫TIM1_RCR.如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成N 秒中断一次。下图是stm32参考手册中对该寄存器的详细解释:



总结一下高级定时器溢出中断配置的步骤:

1,时钟使能

2,配置预分频、自动重装值和重复计数值

3,清除中断标志位(否则会先进一次中断)

4,使能TIM中断,选择中断源

5,设置中断优先级

6,使能TIMx外设

下面附上我用库函数写的TIM1溢出中断配置程序代码:

//arr:自动重装值。  

//psc:时钟预分频数  

void Timer1_Init(u16 arr,u16 psc)  

{  

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

  NVIC_InitTypeDef NVIC_InitStructure;  

  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能  

  

  TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期值  

  TIM_TimeBaseStructure.TIM_Prescaler =(psc-1);//设置预分频值  

  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割  

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式  

  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置  

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //参数初始化  

  TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中断标志位  

  

  TIM_ITConfig(      //使能或者失能指定的TIM中断  

    TIM1,            //TIM1  

    TIM_IT_Update  | //TIM 更新中断源  

    TIM_IT_Trigger,  //TIM 触发中断源   

    ENABLE           //使能  

    );  

      

  //设置优先级  

  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;    

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       //从优先级0级  

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  NVIC_Init(&NVIC_InitStructure);   

  

  TIM_Cmd(TIM1, ENABLE);  //使能TIMx外设  

}  

void TIM1_UP_IRQHandler(void)   

{                      

    if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)//检查指定的TIM中断发生与否:TIM 中断源   

    {  

        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源   

/***************在此处添加中断执行内容******************/  

  

    }          

}  


关键字:STM32  高级定时器  中断配置 引用地址:STM32学习笔记——高级定时器TIM1更新中断配置

上一篇:stm32F4 时基定时器(2)
下一篇:STM32硬件调试过程遇中到Delay_ms()函数卡死的问题

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

STM32串口设定流程总结
STM32配置串口需要配置的寄存器包括: 1、时钟配置,开启相应IO端口的时钟,以及串口模块的时钟。 串口1模块时钟寄存器:RCC_APB2Periph_USART1; 串口1的端口是PA9,PA10,对应的时钟寄存器:RCC_APB2Periph_GPIOA; 开启的函数是:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); 串口2的模块时钟寄存器:RCC_APB1Periph_USART2; 串口2的端口是PA2,PA3;对应的时钟寄存器是:RCC_APB2Periph_GPIOA; 开启的函
[单片机]
基于STM32定时器的PWM音乐播放功能的实现
基于32位的STM32F103,利用 PWM 产生的音频信号驱动蜂鸣器演奏乐曲,实现了音乐播放器的应用设计。该播放器能实现从低音到高音的21个音阶,并能根据乐谱演奏完整的曲目。测试结果表明,PWM的输出信号与各音阶对应的声音频率基本一致,方案切实可行。这一方法也可用于电机控制、电子琴设计等方面,具有较好的实用性。 在科研项目开发中,有时会遇到需要播放电话铃声、音乐等情况。简单的做法是购买专用音乐芯片,但该方法的缺点是播放的内容不可变,不能很好地满足项目需求。一般地,可采用89C51等单片机实现音乐播放,其播放内容及歌曲数量都可以随时修改,使用上相对方便。随着STM32系列微处理器的出现,其基于ARM Cortex—M内核的
[单片机]
基于<font color='red'>STM32</font><font color='red'>定时器</font>的PWM音乐播放功能的实现
浅谈STM32的启动过程
浅谈STM32的启动过程 分享这篇文章,谈一下STM32启动流程。如果读者朋友已经有过汇编相关基础,能够更好理解本文内容。汇编语言是比C语言更接近机器底层的编程语言,能让我们更好的理解和操纵硬件底层。 STM32三种启动模式 下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存,这就是所谓的启动过程。 STM32上电或者复位后,代码区始终从0x00000000开始,其实就是将存储空间的地址映射到0x00000000中。三种启动模式如下: 从 主闪存存储器 启动,将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始。主闪存存储器是STM32内
[单片机]
如何基于Keil、STM32用C++编写流水灯程序?
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案肯定是可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。 1 为什么很少用C++开发单片机 不知道大家对面向过程和面向对象的理解有多少? C语言是面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。 所以,C语言相比C++具有更小代码量(bin文件)、更快的运行速度。 当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不
[单片机]
stm32 adc计算
用STM32自带的ADC读取引脚电压值,读回来的数据怎么转换成单位为V的数值??? V(ADC) = Value(ADC) * V(ref)/4096 (stm32的ADC是12位的,所以ad字的最大值是4096) 其中V(ADC)为算出的电压值;Value(ADC)为采集的AD值;V(ref)为参考电压,一般为3.3V。 比如你STM32的参考电压为3.3v,采集的AD值为1024,那么转换为电压V(ADC) = 1024×3.3/4096 = 0.825V
[单片机]
Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发
概述 Windows下使用Keil MDK5进行 STM32F407VET6 的开发和编译, 配合ST-LINK工具进行烧录, 使用标准外设库SPL. STM32F407硬件环境 主要参数 STM32F407VET6 Arm Cortex-M4 168MHz Max Clock Speed 512k flash 192k ram LQFP 100 pins Backup SRAM 4k STM32F407VET6 Black Board 开发板 具体说明可以查看 https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0.html ST-Link 编程器 使用
[单片机]
Keil MDK <font color='red'>STM32</font>系列(三) 基于标准外设库SPL的STM32F407开发
关于STM32定时器问题集锦
1、定时器外部计数功能 问:STM32处理器的定时器可以配置为对外部脉冲计数方式,其中一种方式是通过TIM的ETR引脚(外部触发引脚),另外一种方式是通过TIM的CH1或者CH2引脚来输入。现在我不明白这两种方式有什么区别,两种方式都能对外部脉冲计数,那么设置外部触发方式的目的指什么? 答:根据设计电路来使用不同的方法,他们最大的区别就是引脚不同,但是实现的功能是一样的。 2、TIM2用于捕获,如何调整TIM2的时钟? 问:TIM2用于捕获,如何调整TIM2的时钟?想调低TIM2的时钟频率,以减小计数器的值,避免溢出。 答:可在中断函数里修改配置。不过我想知道你的具体目的是什么 答:因被捕获脉冲频率很宽,有
[单片机]
ST提升STM32开发速度,推出快捷应用开发平台
全球领先的微控制器厂商意法半导体(纽约证券交易所代码:STM)发布一款U盘版的开发平台STM32-comStick。这个低价的全功能开发平台有助于提高基于STM32互联系列微控制器的应用开发速度。STM32互联系列微控制器包括STM32F105和STM32F107两个子系列,于2009年6月投产,以先进的ARM® Cortex™-M3为内核,内置以太网、USB Device/Host/OTG、CAN和音频级I2S外设接口,为需要网络和通信功能的嵌入式应用提供低功耗的32位处理性能和实时特性。 STM32-comStick包括代码量无限制的Hitex HiTOP5 IDE/调试器和TASKING C编译器,可
[手机便携]
ST提升<font color='red'>STM32</font>开发速度,推出快捷应用开发平台
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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