功能:LED每500ms闪烁一次

步骤
1、结构体的定义
2、使能LED(GPIOC外设)/定时器/中断/定时器中断
3、初始化LED/定时器
4、配置中断分组NVIC
5、编写中断服务函数(重:溢出中断发生函数/清除某中断标志位)

知识点须知:

定时器简介
1)F4中共14个定时器;
2)TIM1/TIM8高级定时器、TIM2到TIM5/TIM9到TIM14通用定时器、TIM6/TIM7基本定时器
通用定时器(本项目):
1)16位或32位自动重载计数器,由可编译预分频器驱动
2)应用场景:测量输入信号的脉冲长度;产生输出波形PWM等
3)每个通用定时器完全独立,没有相互共享的资源
本实验相关寄存器
感兴趣的姐妹可以自己查看数据手册(因为项目直接调用了库,但寄存器部分也很重要)

1、结构体的定义

 GPIO_InitTypeDef GPIO_InitStructure;//LEDNVIC_InitTypeDef  NVIC_InitStructure;//NVICTIM_TimeBaseInitTypeDef TIM_InitStructure;

2、使能LED(GPIOC外设)/定时器/中断/定时器中断

 //使能定时器 及TIM3 外设时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹĜGPIOCʱ֓ 外设时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能 定时器时钟TIM3//设置TIM3_DIER允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//参数2:指明使能的定时器中断类型 更新(该项目为更新)、触发、输入捕获

3、初始化LED/定时器

将所有的参数都配置了一次,主要是方便以后回溯,怕日后遗忘

 //LED 初始化 仅需设置前两个参数即可,后面三个均为默认GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed = GPIO_Low_Speed;GPIO_Init(GPIOC , &GPIO_InitStructure);
 //定时器初始化 通用定时器 四个参数即可
//  TIM_InitStructure.TIM_Prescaler = 8400-1;//分频系数 500msTIM_InitStructure.TIM_Prescaler = 16800-1;//分频系数 用于对比 1000msTIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_InitStructure.TIM_Period = 5000-1;//自动重载计数周期值TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子TIM_TimeBaseInit(TIM3, &TIM_InitStructure);

注意

通用定时器:前四个参数有用,最后一个参数用于高级定时器
定时器时间计算公式Tout=((arr+1)(psc+1))/Tclk* (以本项目中参数设置为例)
1)Tout 定时器溢出时间us
2)Tclk 定时器输入时钟频率 :84MHz
系统主频168 MHz APB1时钟频率位42MHz APB2时钟频率位84MHz
3)psc 分频系数:8400-1
计1个数的时间1/psc
4)arr 自动重载计数周期值:5000-1
当定时器的计数值达到arr时,定时器将重载其他值
例如:定时器设置为向上计数,定时器值等于arr后将被清零重新计数。
5)时钟分频因子:TIM_CKD_DIV1(84MHz/84 = 1M)
定时器输入时钟频率/X = TIM_CKD_DIVx(x=1.2.3….)
6)计算结果
Tout=((arr+1)(psc+1))/Tclk=((5000-1+1)(8400-1+1))/84=500000us=500ms
Tout=((arr+1)(psc+1))/Tclk=((5000-1+1)(16800-1+1))/84=1000000us=1000ms
参考资料:(stm32定时器配置与时间计算公式)https://blog.csdn.net/anhei930/article/details/

4、配置中断分组NVIC

同“实现中断操作”项目,仅需对中断线配置进行修改

//中断优先级设计//配置中断分组NVICNVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;//定义的初始化中断//    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM3,ENABLE);//使能TIM3

5、编写中断服务函数

同“实现中断操作”项目,仅需对部分函数进行修改

void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//计数上溢{if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)//灯不亮{GPIO_ResetBits(GPIOC, GPIO_Pin_13);//灯亮}else{GPIO_SetBits(GPIOC, GPIO_Pin_13);//灯不亮}}TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位
}

6、主函数总代码

#include "stm32f4xx.h"
#include "delay.h"
int main(void)
{GPIO_InitTypeDef GPIO_InitStructure;//LEDNVIC_InitTypeDef  NVIC_InitStructure;//NVICTIM_TimeBaseInitTypeDef TIM_InitStructure;//使能定时器 及TIM3 外设时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ʹĜGPIOCʱ֓ 外设时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能 定时器时钟TIM3//设置TIM3_DIER允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//参数2:指明使能的定时器中断类型 更新(该项目为更新)、触发、输入捕获//LED 初始化 仅需设置前两个参数即可,后面三个均为默认GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed = GPIO_Low_Speed;GPIO_Init(GPIOC , &GPIO_InitStructure);//定时器初始化 通用定时器 四个参数即可
//  TIM_InitStructure.TIM_Prescaler = 8400-1;//分频系数 500msTIM_InitStructure.TIM_Prescaler = 16800-1;//分频系数 用于对比 1000msTIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_InitStructure.TIM_Period = 5000-1;//自动重载计数周期值TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子TIM_TimeBaseInit(TIM3, &TIM_InitStructure);//中断优先级设计//配置中断分组NVICNVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;//定义的初始化中断// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM3,ENABLE);//使能TIM3//设置LED灯初始化熄灭 置高位GPIO_SetBits(GPIOC, GPIO_Pin_13);//灯不亮while(1);
}//6、编写中断服务函数//判断溢出中断是否发生//清除某中断线的中断标志位
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//计数上溢{if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)//灯不亮{GPIO_ResetBits(GPIOC, GPIO_Pin_13);//灯亮}else{GPIO_SetBits(GPIOC, GPIO_Pin_13);//灯不亮}}TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位
}

时间20221031
友友们,后续我要开始利用定时器通过串口发送数据给上位机啦!

STM32F407ZGT6|定时器中断相关推荐

  1. STM32CuBeMX(HAL库)实现定时器中断(STM32F407ZGT6)

    工具: 1.芯片: STM32F407ZET6 2.STM32CubeMx软件 3.IDE: MDK-Keil软件 4.STM32F4xxHAL库  这部分内容源自https://blog.csdn. ...

  2. stm32F4 定时器中断 + 步进电机控制器 控制四线两相步进电机 (初级版本)

    2020-12-07 更新 -------------------------------------------------------------------------------------- ...

  3. [笔记].如何使用Nios II的中断:PIO中断与定时器中断

    引子 定时器中断,我以前在艾米电子论坛发帖讨论过:PIO中断我在博客里也讨论过,最近发现以前的总结有一点小错误.于是结合我最近玩触摸屏的一点点心得,写篇博文. 软硬件环境 硬件:艾米电子EP2C8核心 ...

  4. stm32定时器中断_stm32F4之定时器的基本使用

    概述 上一篇说了stm32F4GPIO的使用,这篇说说定时器的使用 一. stm32F407的定时器资源介绍: ​ STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器 这 ...

  5. STC10F10XE定时器中断输出10KHz的方波程序

    //咱做硬件的也动手做点测试程序,为了测试新做的电机驱动板,找了个51的板子当10K信号发生器测试IGBT开关延时时间. #include <STC_NEW_8051.H> #includ ...

  6. 【STM32】定时器中断实验代码详解

    文章目录 main.c timer.c timer.h STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成. STM32 的通用定时器可以被用于:测 ...

  7. 单片机定时报警C语言程序,51单片机 定时器 中断程序 (C语言)

    EA     是 中断总开关, 不管是定时器,串口还是外部中断,都需要打开 EA 才能触发中断; ET0   是 定时器0 的专用中断开关, 也就是说: 打开了EA.而不打开ET0,定时器0是无法触发 ...

  8. stm32定时器中断类型分析

    一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...

  9. java 定时器 的中断程序,STM32定时器中断

    我试图在STM32L073中使用定时器外设但我有问题 . 我在STM32Cube中生成了设置代码,并且只使用了HAL API提供的函数 . 问题是定时器中断只发生一次,它应该始终发生溢出 . 我不知道 ...

最新文章

  1. 113. Path Sum II
  2. python反转字符串的元音字母_345. 反转字符串中的元音字母-----leetcode刷题(python解题)...
  3. 从外部CorDapp扩展和覆盖流
  4. 人工智能加速期:算法为王还是场景落地优先 ?
  5. 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...
  6. 超声波的四个特性_超声波传感器,超声波的特性
  7. webrtc 渲染_WebRTC 开发(六)摄像头采集与视频渲染分析
  8. 《HTML5和CSS3快速参考》——第1章 走进HTML51.1 概述
  9. 01_机器学习课程概述
  10. SQL server 表数据改变触发发送邮件
  11. apkg格式怎么打开_干货:pdf转换器简单、好用,还能在线互转文件格式!
  12. python课程结课感悟_python听课的感悟与建议
  13. 解决阿里云盘分享文件数量太多而无法分享的问题
  14. zip4j报错Probably not a zip file or a corrupted zip file
  15. 【Docker】安装mysql,redis
  16. 拍拍关闭:C2C模式走向终结?
  17. win11系统下word文档中鼠标指针消失解决方案
  18. css如何让背景上下居中显示,CSS有哪些方式可以实现垂直居中?
  19. 这10个Python项目超有趣!
  20. ibm x201 怎么清理内部_ThinkPad X201拆解,联想Thinkpad X201拆机图解

热门文章

  1. 简谈:如何学习FPGA
  2. Java语言,什么是Java语言?Java的版本。
  3. JS三元表达式动态改变显示内容
  4. GLUT的下载与安装
  5. ARMv8-a架构简介
  6. win10平台下搭建python-pcl环境
  7. Android调用返回键
  8. 计算机二级MS-office题目练习
  9. 王子救公主(DFS)
  10. Cause java.sql.SQLDataException Unsupported conversion from LONG to java.sql.Timestamp