文档章节

STM32F1xx时钟中断配置

老张他爹945
 老张他爹945
发布于 2017/03/28 09:53
字数 418
阅读 10
收藏 0

设我们要使用TIM3作为计数器使用, 首先配置时钟;

void TIM3_cfg(void)
{
    //首先要使能TIM3;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

    //TIM3时基单元配置;
    {
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        
        /*
        TIM3的主频源自APB1, 即72MHz, 故
            TIM3频率= Perscaler / TIM3主频 = 7200/72000000 = 1/10000 = 10KHz
            即每秒10K次计数;
        Period为10000, 表示时钟计数器累加到(10000-1)后, 再加1时, 产生溢出中断;
        所以, 如此设置后的时钟的中断频率为1Hz, 即1s一次中断;
        
        注意, Period与Prescaler均为16bite寄存器, 即最大值为0xFFFF;
        */
        TIM_DeInit(TIM3);
        TIM_TimeBaseStructure.TIM_Period = 10000-1;        //预装载
        TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;    //预分频
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //0
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    //时钟计数向上溢出
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        
        //使能预装载值
        TIM_ARRPreloadConfig(TIM3,ENABLE);
                
        //使能更新中断
        TIM_ClearFlag(TIM3,TIM_FLAG_Update);  //清除溢出中断标志
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  //开启TIM3中断
        
        //开启时钟
        TIM_Cmd(TIM3, ENABLE);
    }
    
    //中断向量配置
    {
        NVIC_InitTypeDef NVIC_InitStructure;
        
        /*
        中断执行次序判定原则:
            两个中断, 先看抢占等级, 高等级的可以在低等级的中断处理过程中被响应,即中断嵌套;
            若抢占等级相同, 则无嵌套调用关系, 比较各自的响应等级, 高等级的先执行;
            若响应等级也相同, 则根据中断在向量表中的先后次序执行;
        优先级Group2, 2bit表示抢占式中断的等级, 2bit表示响应式中断的等级;
        */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;    //此名称为STM32预先定义好的;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    //抢占等级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    //响应等级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    
        NVIC_Init(&NVIC_InitStructure);
    }
}

//自定义中断函数, 函数名也是标准的;
volatile unsigned short __tms = 0;
void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
    {
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        
        __tms++;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
老张他爹945
粉丝 1
博文 46
码字总数 33029
作品 0
海淀
程序员
STM32CubeMX学习教程之三:GPIO输入之利用SysTick中断给按键去抖

上一篇博文讲述了如何使用GPIO的外部中断检测按键控制LED。但是实际情况是,物理按键通常会有抖动,导致中断多次被触发。较好的设计,应该是在硬件上做去抖设计,比如设计RC电路,或者单端稳...

toopoo
03/27
0
0
【STM32】串口相关配置寄存器(波特率计算方法)

STM32F1xx官方资料: 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 串口相关配置寄存器 状态寄存器(USART_SR) 状态寄存器适用于检测串口此时所处的状态。它能够检测到的状态...

qq_38410730
04/12
0
0
【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)

STM32F1xx官方资料: 《STM32中文参考手册V10》-第16章 实时时钟(RTC) RTC实时时钟 RTC实时时钟简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提...

qq_38410730
04/23
0
0
【STM32】通用定时器的基本原理(实例:定时器中断)

STM32F1xx官方资料: 《STM32中文参考手册V10》-第14章通用定时器 STM32的定时器 STM32F103ZET6一共有8个定时器,其中分别为: 高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、T...

qq_38410730
04/18
0
0
直接通过寄存器地址操作控制LED灯

一、硬件基础 1、开发版:STM32-PZ6806L 2、MCU型号:STM32F103ZET6 3、LED电路 在开发版上有8个LED灯,分别与GPIOC的0-7脚相连。 二、软件基础 1、Keil5 IDE; 2、STM32F1扩展库(STM32芯片...

fanxp66
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jetbrains系产品IDEA:mac上面提示快捷键设置

原因 由于Mac上面的Ctrl+空格变成输入法切换的快捷键,在使用IDEA的过程中,代码提示很不方便,需要使用option+/这种传统eclipse上面的代码提示快捷键作为主要快捷键。 怎么修改? 移除【opt...

亚林瓜子
33分钟前
0
0
Exclipse 输出结果时换行

System.out.println(f1 + "\n" + d1 + "\n" + d2);

笑丶笑
33分钟前
1
0
怎样治疗标签不能触发onblur事件

I realize this was over a year ago, but it showed up for me in Google while trying to solve this same issue. It seems Chrome does not consider some elements, like body and ancho......

Weijuer
37分钟前
0
0
vue常见库安装

移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。 安装fastclick npm insta...

林夏夕
38分钟前
0
0
kafka 教程(三) kafka Java API 编程

下午写

MrPei
39分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部