STM32入门学习之定时器中断

1.STM32的通用定时器是可编程预分频驱动的16位自动装载计数器。

STM32 的通用定时器可以被用于:测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波
( 输出比较和 PWM) 等。
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形
周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相
共享的任何资源。
2.相关寄存器:
(1)控制寄存器TIMx_CR1:本次实验中只使用到了最低位,即计数器使能位。
(2) DMA/ 中断使能寄存器( TIMx_DIER ):本次实验中只使用到了最低位,允许更新中断。

 (3)预分频寄存器(TIMx_PSC):该寄存器用来设置对时钟的分频。

 (4)自动重装载寄存器(TIMx_ARR):

(5) 状态寄存器(TIMx_SR):

3.设计思路:通过设置设置通用定时器的中断,并在定时器中断服务函数中反转LED灯。首先,使能定时器的时钟。然后,配置定时器的相关信息 和中断管理的相关信息。最后,编写定时器中断的中断服务函数。

4.代码:

(1)LED:

#ifndef __LED_H
#define	__LED_H#include "stm32f10x.h"void LED_Init(void);#endif
#include "led.h"void LED_Init(void)
{//¶¨Òå¶Ë¿ÚµÄ½á¹¹Ìå:GPIO_InitTypeDef GPIO_InitStruct;//1.ʹÄÜʱÖÓ£ºRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA,ENABLE);//2.ÅäÖö˿ڽṹÌåµÄÏà¹ØÐÅÏ¢£º£¨LED1£©GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStruct);//ÅäÖÃLED0£ºGPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_Init(GPIOA,&GPIO_InitStruct);//³õʼʱ½«LEDµÄ¶Ë¿Ú¶¼ÖÃΪ1£¬¼´Ï¨ÃðGPIO_SetBits(GPIOA,GPIO_Pin_8);GPIO_SetBits(GPIOD,GPIO_Pin_2);
}

(2)TIME:

#ifndef __TIME_H
#define __TIME_H#include "stm32f10x.h"void TIME_Init(u16 arr,u16 psc);#endif
#include "time.h"void TIME_Init(u16 arr,u16 psc)
{//¶¨Ò嶨ʱÆ÷ºÍÖжϽṹÌ壺TIM_TimeBaseInitTypeDef TIM_TimBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;//1.ʹÄܶ¨Ê±Æ÷ʱÖÓ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//2.³õʼ»¯time3£ºTIM_TimBaseStructure.TIM_Period = arr;						//ÉèÖÃ×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµTIM_TimBaseStructure.TIM_Prescaler = psc;TIM_TimBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;TIM_TimeBaseInit(TIM3,&TIM_TimBaseStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);								//ÔÊÐí¸üÐÂÖжÏ//3.ÖжÏÅäÖãºNVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//4.ʹÄܶ¨Ê±Æ÷£ºTIM_Cmd(TIM3,ENABLE);
}
//ÖØдtime3µÄÖжϷþÎñº¯Êý£º
void TIM3_IRQHandler(void)
{static int i = 0;//¼ì²éÊÇ·ñ·¢ÉúÖжϣºif(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET){//Çå³ýtimeµÄ¸üÐÂÖжϱê־λTIM_ClearITPendingBit(TIM3,TIM_IT_Update);if(i){GPIO_SetBits(GPIOA,GPIO_Pin_8);i = !i;}else{GPIO_ResetBits(GPIOA,GPIO_Pin_8);i = !i;}}
}

(3)main:

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "time.h"int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();TIME_Init(4999,7199);while(1){delay_ms(1000);}}

5.运行结果:

 

 6.总结:本次实验是通过STM32的通用定时器反转LED灯。在实验库函数编程的时候,是比较方便的。但是,为了打好基础,应该去大概的了解一下相关寄存器的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BabysqliV3.0]phar反序列化

文章目录 [BabysqliV3.0]phar反序列化 [BabysqliV3.0]phar反序列化 开始以为是sql注入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ST1jvadM-1691302941344)(https://raw.githubusercontent.com/leekosss/photoBed/master/202308032140269.png)…

LabVIEW开发3D颈动脉图像边缘检测

LabVIEW开发3D颈动脉图像边缘检测 近年来,超声图像在医学领域对疾病诊断具有重要意义。边缘检测是图像处理技术的重要组成部分。边缘包含图像信息。边缘检测的主要目的是根据强度和纹理等属性识别图像中均匀区域的边界。超声(US)图像存在视觉…

应急响应-勒索病毒的处理思路

0x00 关于勒索病毒的描述 勒索病毒入侵方式:服务弱口令,未授权,邮件钓鱼,程序木马植入,系统漏洞等 勒索病毒的危害:主机文件被加密,且几乎难以解密,对主机上的文件信息以及重要资产…

java并行流的介绍

什么是并行流? 在介绍并行流之前,我们首先需要了解Stream API是什么。Stream API允许我们以声明性的方式对数据进行操作,例如过滤、映射、排序等,而无需编写繁琐的迭代和循环代码。这不仅提高了代码的可读性,还可以帮…

在政策+市场双轮驱动下,深眸科技助力机器视觉行业走向成熟

近年来,随着人工智能发展的不断提速,机器视觉作为其重要的前沿分支,凭借着机器代替人眼来做测量和判断的能力,广泛应用于工业领域的制造生产环节,用来保证产品质量、控制生产流程、感知环境等,并迸发出强劲…

【SOP】最佳实践之 TiDB 业务写变慢分析

作者: 李文杰_Jellybean 原文来源: https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中,每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循,…

leetcode算法题--圆圈中最后剩下的数字

原题链接:https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/description/?envTypestudy-plan-v2&envIdcoding-interviews 模拟,会超时 func lastRemaining(n int, m int) int {cnt : make([]int, n)for i : range…

RabbitMQ 事务

事务简介 就像我们了解的MySQL中的事务一样,RabbiMQ的事务也具备原子性和一致性,并且RabbiMQ的事务是针对消息从生产者发送到RabbitMQ中提供的支持,因此不同事务可以同时给同一个队列发送信息。   可通过channel.txSelect,chann…

ES6基础知识十:你是怎么理解ES6中 Decorator 的?使用场景?

一、介绍 Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式 简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。 ES6中Decorator功能亦如此,其本质也不是什么高大…

使用正则表达式设置强密码

文章目录 例子和解析测试工具Java中的应用 例子和解析 强密码需要同时含有大写字母、小写字母、数字、特殊符号。 这边先展示我自己写的。 ^(?.*[a-z])(?.*[A-Z])(?.*[0-9])(?.*[!#$%?])[a-zA-Z0-9!#$%?_]{8,}$以上代8位以上的强密码。 下面是具体解析: ^代…

eclipse was unable to locate its companion shared library

当转移或者Copy工程时, eclipse was unable to locate its companion shared library eclipse.ini 里面的路径配置错误导致 --launcher.library C:/Users/**/.p2/pool/plugins/org.eclipse.equinox. launcher.win32.win32.x86_64_1.2.700.v20221108-1024 -product …

6.kubeadm高可用

文章目录 kubeadm高可用环境初始化所有节点安装Docker所有节点安装kubeadm,kubelet和kubectl高可用组件安装、配置部署k8s集群 kubeadm高可用 ##节点设置master01:192.168.242.66 master02:192.168.242.67 master03:192.168.242.68 node01:192.168.242.69 node02:1…

Tomcat的介绍和安装配置、eclipse中动态web项目的创建和运行、使用IDEA创建web项目并运行

一、Tomcat的介绍和安装配置 安装tomcat: 环境变量的配置: 配置之后重启cmd,执行startup命令,启动tomcat 在localhost:8080,能进入tomcat主界面,说明配置成功 二、eclipse中动态web项目的创建和运行 tomca…

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

标定(内参、外参)

在计算机视觉中,特别是在相机标定和立体视觉领域,内参(intrinsic parameters)和外参(extrinsic parameters)是非常重要的概念。它们与相机的几何属性和姿态有关。 内参(Intrinsic Parameters&am…

Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比

1、gdb和pdb分别是什么? 1.1、gdb GDB(GNU Debugger)是一个功能强大的命令行调试工具,由GNU项目开发,用于调试C、C等编程语言的程序。它在多个操作系统中都可以使用,包括Linux、MacOS和Windows&#xff0…

【Spring Boot】Spring Boot 集成 RocketMQ 实现简单的消息发送和消费

文章目录 前言基本概念消息和主题相关发送普通消息 发送顺序消息RocketMQTemplate的API介绍参考资料: 前言 本文主要有以下内容: 简单消息的发送顺序消息的发送RocketMQTemplate的API介绍 环境搭建: RocketMQ的安装教程:在官网…

Qt下载慢/无法下载解决方式

文章目录 一. Qt在线安装下载二. 安装方式 一. Qt在线安装下载 官网下载:https://www.qt.io/download清华源下载:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 二. 安装方式 进入下载好的目录 在目录栏输入CMD&…

常州同和采购益高观光车提升服务品质

同和纺织机械制造有限公司坐落于江苏省常州市戚墅堰经济开发区,是中国纺织工业联合会常务理事单位、国家高新技术企业。公司占地面积30万平方米,现代化厂房建筑面积20万平方米。 随着公司发展,企业意识到通过提供高品质的客户接待服务来增强竞争力。为了满足这一需求,常州同和…

MyBatis 查询数据库之二(增、删、改、查操作)

目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper(interface)里面添加增加方法的声…