stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒

2024-04-14 02:58

本文主要是介绍stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

stm32f429中基本定时器有两个,通用定时器有十个,高级定时器有两个。其中基本定时器为TIM6和TIM7。

此处通过编写TIM7定时中断控制LED灯亮灭,TIM6与之类似。

首先可以新建一个.c 和.h 文件,在.c文件中进行TIM7函数定义等,如下图所示:

#include "bsp_tim_basic.h"
static void BASIC_TIMx_Mode_Config()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);//开启时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//结构体申明TIM_TimeBaseInitStruct.TIM_Prescaler=8999;//设置时钟周期为10000hz psc 90M/(psc+1)TIM_TimeBaseInitStruct.TIM_Period=9999;//设置ARR 10000次TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);//使能更新TIM_TimeBaseInit(TIM7,&TIM_TimeBaseInitStruct);//定时器初始化TIM_Cmd(TIM7,ENABLE);//定时器使能
}
static void NVIC_TIMBasic_Config()
{NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStruct.NVIC_IRQChannel=TIM7_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);
}
void TIMx_Basic_Config(void)
{NVIC_TIMBasic_Config();BASIC_TIMx_Mode_Config();
}

由于前两个函数前有static修饰,所以写了最后一个函数以便于其他文件对前两个函数的调用。

在.h文件中对所需的头文件以及可被外部调用的函数进行申明。

#ifndef _BSP_TIM_BASIC_H
#define _BSP_TIM_BASIC_H#include "stm32f4xx_tim.h"
#include "stm32f4xx_rcc.h"
#include "misc.h"extern void TIMx_Basic_Config(void);
#endif

这边编写完成后需要记得在stm32f4xx_it.c中进行中断函数的编写,其中控制LED灯亮灭便在此处被执行。

void TIM7_IRQHandler(void)
{if (TIM_GetITStatus(TIM7,TIM_IT_Update)!=RESET) {	GPIO_WriteBit(GPIOC,GPIO_Pin_1,1-(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)));}		 TIM_ClearITPendingBit(TIM7,TIM_IT_Update);  		 }

GPIO_WriteBit用于给LED灯置所想状态,在这里的最后一个参数通过GPIO_ReadOutputDataBit函数读当前的状态,通过1减去当前状态来获得相反的状态。

在main函数中只要进行简单的调用即可。

#include "stm32f4xx.h"
#include "bsp_led.h"
#include "bsp_tim_basic.h"
#include "bsp_usart.h"
int main(void)
{usart1_init();LED_GPIO_Config();TIMx_Basic_Config();while(1){}
}

 

这篇关于stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901909

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和