1 #include "time.h"
2 #include "led.h"
3 #include "beep.h"
4 //¶¨Ê±Æ÷ÖжÏ3³õʼ»¯
5 void TIME3_Ini_Init(u16 arr,u16 psc)
6 {
7 NVIC_InitTypeDef NVIC_InitStructure;
8 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
9 //中断使能TIM3
10 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
11
12 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分割
13 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
14 TIM_TimeBaseInitStructure.TIM_Period = arr;//时钟周期
15 TIM_TimeBaseInitStructure.TIM_Prescaler = psc;//预分频系数16 //TIM_TimeBaseInitStructure.TIM_RepetitionCounter = ;
17 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
18 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );//TIM3使能
19
20 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;//时间中断通道3
21 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
22 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//其优先级0
23 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;//抢占优先级3
24
25 NVIC_Init(&NVIC_InitStructure);
26 TIM_Cmd(TIM3,ENABLE);
27
28 }
29 //定时器中断3服务函数
30 void TIM3_IRQHandler(void)
31 {
32 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //判断是否又中断发生
33 {
34 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除跟新中断标志位
35 LED1=!LED1;// 点灯
36 //Beep =1;
37 }
38
39 }

一:定时器的时钟来源有 4 个:
1)内部时钟(CK_INT)
2)外部时钟模式 1:外部输入脚(TIx)
3)外部时钟模式 2:外部触发输入(ETR)
4)内部触发输入(ITRx):使用 A 定时器作为 B 定时器的预分频器(A 为 B 提供时钟)。

二:定时器3中断初始化过程:

编写定时器中断初始函数:void TIM3_Int_Init(u16 arr,u16 psc);其中arr为:自动重装值,psc:预分频系数

1,时钟TIM3使能

2,TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化 TIM3

3,TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //允许更新中断

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

第一个参数是选择定时器号,这个容易理解,取值为 TIM1~TIM17。
第二个参数非常关键,是用来指明我们使能的定时器中断的类型,定时器中断的类型有很
多种,包括更新中断 TIM_IT_Update,触发中断 TIM_IT_Trigger,以及输入捕获中断等等。
第三个参数就很简单了,就是失能还是使能。

4,进行中断优先级设置

5,使能TIM_Cmd(TIM3, ENABLE);

代码如下:

三,编写TIM3_IRQHandler()定时器3中断服务函数中断

第一步:判断定时器中断3是否发生

第二步:清除中断更新中断标志位

第三步:编写逻辑函数

第四步:编写主函数

其中:TIME3_Ini_Init();溢出时间计算为:

溢出时间为 500ms,即 Tout= ((4999+1)*( 7199+1))/72=500000us=500ms。

注意:启用中断切记不要忘了在主函数中设置中断优先级分组;NVIC_PriorityGroupConfig(); 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组2 

TIM3_Int_Init()该函数的 2 个参数用来设置 TIM3 的溢出时间。系统
初始化的时候在默认的系统初始化函数 SystemInit 函数里面已经初始化 APB1 的时钟为 2 分频,
所以 APB1 的时钟为 36M,而从 STM32 的内部时钟树图得知:当 APB1 的时钟分频数为 1 的
时候,TIM2~7 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频数不为 1,那么 TIM2~7 的时
钟频率将为 APB1 时钟的两倍。因此,TIM3 的时钟为 72M,再根据我们设计的 arr 和 psc 的值,
就可以计算中断时间了。计算公式如下:
Tout= ((arr+1)*(psc+1))/Tclk;
其中:
Tclk:TIM3 的输入时钟频率(单位为 Mhz)。
Tout:TIM3 溢出时间(单位为 us)。
timer.h 文件的代码非常简单,一些函数申明,这里就不讲解。

基于霸道秉火的STM32F103ZET6嵌入式开发之------定时器中断3的更多相关文章

  1. 基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验

    1:PWM脉冲宽度调制 STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定 ...

  2. 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南

    昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...

  3. 基于Vivado的嵌入式开发 ——PS+PL实践

    基于Vivado的嵌入式开发 ——PS走起 硬件平台:ZedBoard 开发工具:Vivado 2014.2 1.规划 废话不多说,依然是流水灯,这次是采用PS+PL实现. 功能依旧简单,目标是为了学 ...

  4. Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)

    PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...

  5. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  6. linux交叉环境的搭建以及嵌入式开发概述

    嵌入式开发概述 由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发3大部分 在系统总体开发中,由于嵌入式系统与硬件依 ...

  7. 转:Qt 嵌入式开发环境搭建

    地址: http://www.cnblogs.com/lishixian/articles/3013897.html         作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...

  8. 与一线Linux嵌入式开发project师的对话

    转:与一线Linux嵌入式开发project师的对话 陈project师一直做Linux的嵌入式开发.作为在开发一线的project师.他对非常多问题的看法可能更切合实际需求,于是,通过邮件.就嵌入式 ...

  9. 【嵌入式开发】写入开发板Linux系统-模型S3C6410

    笔者 : 万境绝尘 转载请著名出处 最终拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

随机推荐

  1. Loj#6247-九个太阳【单位根反演】

    正题 题目链接:https://loj.ac/p/6247 题目大意 给出\(n,k\)求 \[\sum_{0\leq i\leq n,i|k}\binom{n}{i} \] 对\(998244353 ...

  2. Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互

    Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...

  3. xshell连接VMware中的Linux

    [前言]最近想压测一下ITOO的考试系统,所以想在自己电脑上安装一下linux,然后安装一下jmeter进行压测一下. 不过为什么要连接xshell呢,因为在虚拟机上总是会和主机切换鼠标,而且也不能粘 ...

  4. sprintboot整合mybatis查询不出数据

    数据库有数据,程序没有任何报错,但是查询结果没有数据,list显示[null,nul]. 检查了sql语句,以及controller.service.mapper,检查没发现问题,怀疑是字段映射问题. ...

  5. 试题 算法训练 区间k大数查询 java题解

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正 ...

  6. 【Python】 第三周:基本数据类型

    整数 python整数无限制 二进制:以0b或者0B开头,例如: 0b010,-0B101 八进制:以0o或者0O开头,例如:0o123,-0O456 浮点数 浮点数间运算存在不确定尾数,不是bug ...

  7. Hive SQL的底层编译过程详解

    本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理.第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程, ...

  8. flask 之 请求钩子

    请求钩子 什么是请求钩子? 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. f ...

  9. nsq - 一条消息的生命周期(一)

    经过前面几篇的学习,相信大家对nsq已经有了一个大概的了解,我在写这篇文章的时候也看了很多其他人写的教程,发现大家对于分析系统每个点写的很不错,但是都很少有整体串起来一起走一遍,所以,我打算分成2-3 ...

  10. Java:TreeMap类小记

    Java:TreeMap类小记 对 Java 中的 TreeMap类,做一个微不足道的小小小小记 概述 前言:之前已经小小分析了一波 HashMap类.HashTable类.ConcurrentHas ...