IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32笔记-定时器TIM中断 -> 正文阅读

[嵌入式]STM32笔记-定时器TIM中断

STM32笔记-定时器TIM中断

一、开发环境

开发板:STM32F407ZE

二、功能:

TIM3中断每1秒亮1次LED1
TIM2中断每1秒亮2次LED2
TIM5中断每1秒亮3次LED3
TIM1中断每1秒亮4次LED4

三、源码

#include "tim.h"
#include "led.h"
#include "stm32f4xx_tim.h"
#include "misc.h"

void tim_init()
{
	//0.定义结构体
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	//1.初始化时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
	
	//2.定时器外设初始化	
	//APB1预分频为4 168/4=42MHz 作为外设时钟时翻倍,故TIM2-5为84MHz
	//APB2预分频为2 168/2=84MHz 作为外设时钟时翻倍,故TIM1为168MHz
	//TIM3
	TIM_TimeBaseInitStruct.TIM_Prescaler = 8400-1;	//预分频  1-65535 84MHZ/8400 = 10000Hz
	TIM_TimeBaseInitStruct.TIM_Period =	5000-1;	//计数值 0.5s触发一次
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;	//向上计数
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;	//不分频
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
	//TIM2
	TIM_TimeBaseInitStruct.TIM_Prescaler = 8400-1;	//预分频  1-65535 84MHZ/8400 = 10000Hz
	TIM_TimeBaseInitStruct.TIM_Period =	2500-1;	//计数值 0.25s触发一次
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
	//TIM5
	TIM_TimeBaseInitStruct.TIM_Prescaler = 8400-1;	//预分频  1-65535 84MHZ/8400 = 10000Hz
	TIM_TimeBaseInitStruct.TIM_Period =	1666-1;	//计数值 0.16s触发一次
	TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStruct);
	//TIM1
	TIM_TimeBaseInitStruct.TIM_Prescaler = 16800-1;	//预分频  1-65535 168MHZ/16800 = 10000Hz
	TIM_TimeBaseInitStruct.TIM_Period =	1250-1;	//计数值 0.125s触发一次
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
	
	//3.定时器中断使能
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
	TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
	
	//4.定时器本身使能
	TIM_Cmd(TIM3, ENABLE);
	TIM_Cmd(TIM2, ENABLE);
	TIM_Cmd(TIM5, ENABLE);
	TIM_Cmd(TIM1, ENABLE);
	
	//5.嵌套向量中断控制器NVIC使能,启用TIM的中断请求通道,并设置其优先级
	//TIM3
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
	NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;	//指定TIM3_IRQn的中断请求通道
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;	//抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;	//响应优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;	//打开通道
	NVIC_Init(&NVIC_InitStruct);
	//TIM2
	NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;	//指定TIM2_IRQn的中断请求通道
	NVIC_Init(&NVIC_InitStruct);
	//TIM5
	NVIC_InitStruct.NVIC_IRQChannel = TIM5_IRQn;	//指定TIM5_IRQn的中断请求通道
	NVIC_Init(&NVIC_InitStruct);
	//TIM1
	NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;	//指定TIM1_UP_TIM10_IRQn的中断请求通道
	NVIC_Init(&NVIC_InitStruct);
}

//TIM3中断 led1 1秒亮1次
void TIM3_IRQHandler(void)
{
	//判断是否发生中断
	if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
	{
		PFOUT(9) ^= 1;	//切换D1灯亮灭
		//清除EXTI线路挂起位
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
	}
}

//TIM2中断 led2 1秒亮2次
void TIM2_IRQHandler(void)
{
	//判断是否发生中断
	if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		PFOUT(10) ^= 1;	//切换D2灯亮灭
		//清除EXTI线路挂起位
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
	}
}

//TIM5中断 led3 1秒亮3次
void TIM5_IRQHandler(void)
{
	//判断是否发生中断
	if(TIM_GetITStatus(TIM5, TIM_IT_Update) == SET)
	{
		PEOUT(13) ^= 1;	//切换D3灯亮灭
		//清除EXTI线路挂起位
		TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
	}
}

//TIM1中断 led4 1秒亮4次
void TIM1_UP_TIM10_IRQHandler(void)
{
	//判断是否发生中断
	if(TIM_GetITStatus(TIM1, TIM_IT_Update) == SET)
	{
		PEOUT(14) ^= 1;	//切换D4灯亮灭
		//清除EXTI线路挂起位
		TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
	}
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:31:05  更:2021-08-05 17:31:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 22:13:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码