文档章节

STM32F1xx时钟中断配置

老张他爹945
 老张他爹945
发布于 2017/03/28 09:53
字数 418
阅读 11
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

混合模型---logistic模型的混合

专家混合

中国龙-扬科
9分钟前
1
0
自定义参数校验注解 (实现ConstraintValidator方法)

Hibernate Validator常用注解(图网上找的) 2.自定义校验器 a.注解类 @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})@Retention(RUNTIME)@Documented@Constraint(validatedB......

INSISTQIAO
13分钟前
1
0
Integer 实现

Integer 封装类型,参数传递传的是值,不是引用 内带缓存,-128 到127 -128 到127 直接数值 IntegerCache 如果不在这个范围,才会new Integer () public static Integer valueOf(int ...

Java搬砖工程师
13分钟前
1
0
数字IT基础-数据采集总线

数字化运营基础 在如今“双十一”不再是线上活动的代名词,而逐步变为一场线上线下同时进行的消费者盛宴。销售、运营、物流、生产商等都在开足马力在各大渠道备战,据统计: 消费者在期间被平...

阿里云官方博客
21分钟前
0
0
三次握手四次挥手

背景 和女朋友异地恋,为了保持感情我提议每天晚上视频聊天一次。 从好上开始,到现在,一年多也算坚持下来了。 问题: 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,...

瑞查德-Jack
24分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部