stm32—通用定时器实验设计

2023-11-08

stm32定时器编写

在现有的实验模板中修改成定时器代码:
在这里插入图片描述

1、打开项目:

添加文件:
在这里插入图片描述
在这里插入图片描述

2、在timer.h中完成定时器中断实现步骤:

在这里插入图片描述
在timer.h中完成定时器中断实现的前4个步骤:
在这里插入图片描述
初始化定时器:主要配置arr,和psc文件
在这里插入图片描述
初始化完成后,需要到timer.c中编写初始化函数:
在这里插入图片描述

a.使能定时器函数:

在这里插入图片描述
使能定时器3的时钟:
拿到函数:
在这里插入图片描述

在这里插入图片描述

b.初始化定时器:

拿到定时器初始化函数:
在这里插入图片描述
配置文件路径:
在这里插入图片描述
并且加入定时器的库:
在这里插入图片描述
此时就可以通过右击,查看文件中的具体函数:
在这里插入图片描述
如下所示:就是 TIM_TimeBaseInit 的具体函数:
在这里插入图片描述
代码解读:

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)

第一个参数为定时器的选择,此处我们选择定时器3;
第二个参数是一个结构体,通常通过定义一个变量去取地址,以获取结构体参数;类似gpio,串口的配置;

实例代码如下:
在这里插入图片描述

//timer.c

#include "timer.h"

void TIM3_Iint(u16 arr,u16 psc)
{
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;
	
	TIM_TimeBaseInitStrue.TIM_Period =  arr;  //×Ô¶¯ÖØ×°ÔØÖµ
	TIM_TimeBaseInitStrue.TIM_Prescaler = psc;  //Ô¤·ÖƵϵÊý
	TIM_TimeBaseInitStrue.TIM_CounterMode = TIM_CounterMode_Up; //¼ÆÊýģʽ£¨ÏòÉÏ£©
	TIM_TimeBaseInitStrue.TIM_ClockDivision = TIM_CKD_DIV1;
	
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue);
	
	
}

备注:

计数有效性的参数设置方法:
TIM_TimeBaseInitStrue.TIM_CounterMode = TIM_CounterMode_Up;
在这里插入图片描述

c、开启定时器中断,配置NVIC。

在tim.h中找到中断函数:
在这里插入图片描述
在tim.c库中找到中断函数,查看具体使用方法。
在这里插入图片描述
将函数放入timer.c文件中,配置使用:
在这里插入图片描述

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

TIM_ITConfig 需要三个参数:
第一个参数:TIMx: 中断号(TIM3)。
第二个参数:TIM_IT: 中断有效性类型(选择更新中断)。
第三个参数:NewState: 是否使能(ENABLE)。

实例:含义就是使能中断器3的更新功能;
在这里插入图片描述

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

还需配置中断优先级设置:
在这里插入图片描述

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

通过 NVIC_Init 函数设置中断优先级:
参数是一个结构体,通常通过定义一个变量去取地址,以获取结构体参数;类似gpio,串口的配置;

实例:

//定时器3 的优先级设置:
NVIC_InitTypeDef NVIC_InitTypeStrue;

NVIC_InitTypeStrue.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitTypeStrue.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitTypeStrue.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitTypeStrue.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitTypeStrue);
	

在这里插入图片描述

d、使能定时器

//使能定时器3
TIM_Cmd(TIM3,ENABLE);

此时定时器的初始化就完成了:
在这里插入图片描述

3、写入中断服务函数:

中断服务函数通过启动文件中找到:
在这里插入图片描述
标志位:
在这里插入图片描述
两个参数:
在这里插入图片描述

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)

入口参数:
第一个是:定时器3;
第二个是:哪个中断标志位,我们选择,更新中断标志;

实例:

在这里插入图片描述

在这里插入图片描述
具体函数:
在这里插入图片描述
最终完成timer.c;
在这里插入图片描述
此处中断3不断计数,达到固定值后,进入函数中实现 led1 的翻转。

中断函数完成后,开始写main.c函数:

a、设置中断优先级分组

在这里插入图片描述

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

b、初始化延时函数:

delay_init(168);	

c、初始化定时器3;

为了防止定时器函数名称冲突,更改一下函数:
在这里插入图片描述
改为如下:
在这里插入图片描述

在这里插入图片描述
main.c中的代码:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"

int main(void)
{ 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init(168);		
	LED_Init();		      
	TIM3_Int_Init(4999,8399);
	while(1)
	{
	LED0 =! LED0;
	delay_ms(500);                 
	}
}

编译烧写就可以实现两led灯闪烁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32—通用定时器实验设计 的相关文章

  • 蓝牙简单配对(Simple Pairing)协议及代码流程简述

    DESCRIPTION 在BT2 1及之后版本 蓝牙协议有在传统的密码配对 PIN Code Pairing 之外 新增一种简单配对 Simple Pairing 的方式 这种新的配对方式操作更为简单 安全性也更强 目前市面上大部分蓝牙设备
  • 《算法笔记》01

    1 比较交换3个实数值 并按序输出 从键盘输入3个实数a b c 通过比较交换 将最小值存储在变量a中 最大值存储在变量c中 中间值存储在变量b中 并按照从小到大的顺序输出这三个数a b c 末尾输出换行 include
  • kafka客户端连接测试

    客户端代码 package main import fmt github com Shopify sarama kafka 示例代码 func main 配置 config sarama NewConfig 等待服务器所有副本都保存成功后的
  • 【Qt多线程之线程的等待和唤醒】

    QWatiCondition的成员函数 QWaitCondition QWaitCondition bool wait QMutex mutex unsigned long time ULONG MAX void wakeOne void
  • 哪些你朝思暮想的动漫网站-搜嗖工具箱

    AcFun是国内首家弹幕视频网站 这里有全网独家动漫新番 友好的弹幕氛围 有趣的UP主 好玩有科技感的虚拟偶像 年轻人都在用www acfun cn 哔哩哔哩是国内知名的视频弹幕网站 这里有及时的动漫新番 活跃的ACG氛围 有创意的Up主
  • docker pull 设置代理

    简介 你在终端设置代理的时候docker pull的时候是不会走代理的 下面是docker pull设置代理的正确方式 操作 环境是在centos下 如果没有新建下面这个文件夹 sudo mkdir p etc systemd system
  • 毕业设计-基于大数据的新闻推荐系统-python

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • 组件的生命周期

    一 组件的生命周期 1 组件的生命周期 至一个组件从 创建 gt 运行 gt 销毁的过程 2 声明周期函数 由Vue提供的内置函数 伴随组件生命周期按次序自动运行 gt 钩子函数 3 生命周期的阶段划分 1 创建阶段 beforeCreat
  • Flutter从入门到放弃之坑的神奇之处?

    坑一 关于环境变量的配置 这里要注意几点 不然你将会在这里卡死 这里只说Mac OS环境变量的配置 因为我是Mac 首先 command shift 打开隐藏文件 如果你是用的是自带的终端 请在这个文件中配置 如果你使用的是zsh请在 这个
  • Pytorch nn.Module的基本使用

    文章目录 nn Module的基本用法 nn Module的其他常用方法 参考资料 nn Module的基本用法 nn Module是所有神经网络的基类 所以你的神经网络类也应该要继承这个基类 当使用时 主要需要实现其两个方法 init 初
  • SPSS问卷数据处理步骤

    SPSS问卷数据处理步骤 一 准备 界面与数据准备工作 1 先处理显示界面问题 改成中文输出 优化操作过程 编辑 选项 2 数据字典 定义变量属性 几个代表性的 复制数据属性 数据 定义变量属性 设好以后 数据 复制数据属性 把几个代表性的
  • SQL 左连接 右表多条数据处理方式

    前言 多表连接经常使用 而一对多的数据处理比较麻烦 用于记录 便于以后使用 正文 SQL server语句 select a t from table1 a left join select from select b ROW NUMBER

随机推荐

  • STL模板库 常用函数 vector向量容器

    STL模板库 STL是Standard Template Library缩写 中文名字叫标准模板库 由惠普实验室提供 共有三类内容 算法 以函数模板形式实现的常用算法 如 max min swap find sort 容器 以类模板形式实现
  • 做一个 加减运算 利用JavaScript

    首先做个运算需要用到三个文本框 显示数字 这里我用input做了3个框 并且赋值他们的属性值 id 并且做了一个button按钮来调动 接着调用button这个函数 接着我们需要获取第一个和第第二个input的值 为什么用 parseInt
  • 【Linux专题_05】Linux统计行数命令

    Linux统计行数几种常用命令 wc l 这是最常用的命令 用于统计文件中的行数 它会输出文件的行数以及文件名 示例 wc l filename txt nl 该命令会给文件中的每一行添加行号 并将结果输出到标准输出 通过查看行号的最后一个
  • LeetCode 220. 存在重复元素 III

    题目链接 点击这里 class Solution public boolean containsNearbyAlmostDuplicate int nums int k int t TreeSet
  • Android Studio解除全局搜索100条限制

    1 点击Help gt Find Action选项 2 输入Registry 并选中进入 3 将ide usages page size的value设置为自己想要的数值即可
  • 修改块的方法+AcGeMatrix3d+AcGeScale3d+两点之间的距离

    开发过程中 当从外部获取了一个 需要修改块中的实体时 有以下几种方法 1 第一个通过explode函数炸开AcDbBlockReference 获取块参照中的实体对象 然后遍历对象 找到修改的实体 完成修改后将所有的实体插入到模型空间 注意
  • 第四章CSS基础

    文章目录 学习CSS的目的 引入的三种方式 内部样式表 行内样式表 外部样式表 选择器的分类 基础选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 盒子模型 不同浏览器下盒子模
  • 深度学习 从零开始 —— 神经网络(四),二分类问题,IMDB数据集使用

    IMDB数据集 互联网电影数据 包含50000条严重两极分化的评论 正面和负面评论各占50 而该数据集也同样被内置于Keras库中了 其中的评论数据已经经过了预处理 评论 单词 被转化为了整数序列 每个整数都对应词典里面的一个单词 加载数据
  • HTML页面基本结构

    本文简要介绍HTML中的各种元素及其相关属性 读者需要有一个概念 HTML页面都是由基本元素及属性组成的 HTML页面的结构如下 doctype 声明 HTML 源文件中 首先出现的是 doctype 声明 该声明告诉浏览器 本页面使用何种
  • [hive]hive中查找表或者查看表的信息

    一 查找表 查看数据库中所有表 SHOW TABLES IN db name 使用正则表达式过滤表 USE db name SHOW TABLES employ 二 查看已创建的表信息 DESCRIBE EXTENDED db name t
  • C++ vector向量的查找和删除

    一 在vector中查找元素 1 代码 include
  • 枚举电脑上的终结点设备

    STDAPI CoCreateInstance REFCLSID rclsid 创建的Com对象的类标识符 CLSID LPUNKNOWN pUnkOuter 指向接口IUnknown的指针 DWORD dwClsContext 运行可执行
  • win下使用git-bash工具进行ssh免密登录服务器

    1 ssh keygen exe 生成公钥私钥 pub 2 ssh agent exe bash 指定工具 3 ssh add exe 添加私钥 OK
  • nacos注册中心的配置

    将nacos作为注册中心使用 使用的步骤 导入nacos依赖 这么导
  • 选路算法(计算机网络)

    目的 决定从源到目的地通过网络的 好的路径 一般指最小费用的路径 根据算法是静态的还是动态的进行分类 静态 路由随时间缓慢变化 手工配置 动态 路由更快地变化 周期的更新 适应链路费用和网络拓扑变化 根据算法是全局式的还是分散式的来加以区分
  • Python入门指南:从零开始学习Python编程

    文章目录 前言 安装Python 变量以及数据类型 总结 前言 Python是一种简单而又强大的编程语言 它在全球范围内广受欢迎 适用于各种应用场景 包括Web开发 数据分析 人工智能和科学计算等 本篇博客将为初学者提供一份Python入门
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • 背景图片设置透明度

    div position relative background color eee background moz linear gradient 30deg eff8fd 0 f0f9fe 40 c4e2fe 80 9cbee6 100
  • 计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

    Date 2020 05 19 Author CW 前言 EAST 的损失函数由三部分构成 对应预测输出的三个map score map loc map 以及 angle map 即分类损失 位置 点到文本框边界上下左右的距离 损失以及角度
  • stm32—通用定时器实验设计

    stm32定时器编写 stm32定时器编写 1 打开项目 2 在timer h中完成定时器中断实现步骤 a 使能定时器函数 b 初始化定时器 备注 c 开启定时器中断 配置NVIC d 使能定时器 3 写入中断服务函数 中断函数完成后 开始