文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

Apache Bench学习笔记

使用apache bench测试并发请求 ab -H "X-IMATRIX-ACCESS-TOKEN:1234567" -c 1000 -n 1000 http://localhost:8080/portfolioes/1/performance...

OSC_fly
28分钟前
2
0
Oracle推出轻量级Java微服务框架Helidon

近日,Oracle 推出 了一个新的开源框架 Helidon ,该项目是一个用于创建基于微服务的应用程序的Java库集合。和 Payara Micro 、 Thorntail (之前的 WildFly Swarm )、 OpenLiberty 、TomEE...

小刀爱编程
29分钟前
5
0
mysql 按周统计

方法一 : 使用 DATE_FORMAT 格式化时间,格式化参数参考 -- 参考地址 SELECTDATE_FORMAT( create_time, '%Y%u' ) weeks,DATE_FORMAT( date_sub( create_time, INTERVAL WEEKDAY( cre...

小鸟00
33分钟前
3
0
深入理解JAVA锁的机制

1. synchronized实现原理 在java代码中使用synchronized可是使用在代码块和方法中,根据Synchronized用的位置可以有这些使用场景: 如图,synchronized可以用在方法上也可以使用在代码块中,...

laigous
34分钟前
2
0
Mysql几种索引类型的区别及适用情况

如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyISAM引擎支持。其可以...

ZhangLG
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部