Nucleo-F411RE (STM32F411)LL库体验 5 - 通用定时器TIM2的使用

news2024/10/7 16:22:24

Nucleo-F411RE (STM32F411)LL库体验 5 - 通用定时器TIM2的使用

1、简述

设定TIM2,计数周期为10KHZ,即计时1s需要10000次,通过shell命令动态修改reload值,来更改定时器的频率。
假定设定TIM2 counter clock = 10K,那么TIM2 prescaler = (SystemCoreClock /10 KHz) - 1,代码中通过
__LL_TIM_CALC_PSC(SystemCoreClock, 10000)来计算得到。
假定 100ms进入一次中断,即freq=10HZ,那么tim2的autoreload的值通过下面的函数得到。
InitialAutoreload = __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM2), 10);
(InitialAutoreload即是hal库的period值)

2、TIM2的初始化

a、时钟初始化

在这里插入图片描述

b、TIM初始化

// 初始化TIM2 控制LED灯的闪烁,默认100ms一次
static void BOARD_Tim2Init(void)
{
	uint32_t InitialAutoreload = 0;
	/* Set counter mode */
	/* Reset value is LL_TIM_COUNTERMODE_UP */
	//LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP);

	/* Set the pre-scaler value to have TIM2 counter clock equal to 10 kHz      */
	/*
		In this example TIM2 input clock (TIM2CLK)  is set to APB1 clock (PCLK1),
		since APB1 prescaler is equal to 1.
		TIM2CLK = PCLK1
		PCLK1 = HCLK
		=> TIM2CLK = HCLK = SystemCoreClock
		To get TIM2 counter clock at 10 KHz, the Prescaler is computed as following:
		Prescaler = (TIM2CLK / TIM2 counter clock) - 1
		Prescaler = (SystemCoreClock /10 KHz) - 1
		设置TIM2 counter clock at 10 KHz,即1s需要10000次,那么100ms需要计数1000次。
		所以autoReload=1000-1时,100ms进中断一次。
	*/
	LL_TIM_SetPrescaler(TIM2, __LL_TIM_CALC_PSC(SystemCoreClock, 10000));
	
	/* Set the auto-reload value to have an initial update event frequency of 10 Hz */
		/* TIM2CLK = SystemCoreClock / (APB prescaler & multiplier)                 */
	
	InitialAutoreload = __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM2), 10);
	
	LL_TIM_SetAutoReload(TIM2, InitialAutoreload);
	
	/* Enable the update interrupt */
	LL_TIM_EnableIT_UPDATE(TIM2);
	
	/* Configure the NVIC to handle TIM2 update interrupt */
	NVIC_SetPriority(TIM2_IRQn, 0);
	NVIC_EnableIRQ(TIM2_IRQn);
	
	/* Enable counter */
	LL_TIM_EnableCounter(TIM2);
	
	/* Force update generation */
	LL_TIM_GenerateEvent_UPDATE(TIM2);
}

c、中断处理函数

在这里插入图片描述

3、shell的调试

a、shell命令添加

volatile static uint32_t InitialAutoreload = 0;
volatile static uint32_t Freq = 10;

int Tim_Control(int argc,char *argv[])
{
	if (argc == 2)
	{
		if (!strncmp(argv[1],"On",2))
		{	
			LL_TIM_EnableCounter(TIM2);
		}
		else if (!strncmp(argv[1],"Off",3))
		{	
			LL_TIM_DisableCounter(TIM2);
		}
		else
		{
			printf("error,please use / TIM On/TIM Off\r\n");
			return -1;
		}
	}
	else if (argc == 3)
	{
		if (!strncmp(argv[1],"Freq",4))
		{	
			Freq = strtol(argv[2],NULL,10);
			if (Freq > 0)
			{
				LL_TIM_DisableCounter(TIM2);
				InitialAutoreload = __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM2), Freq);
				LL_TIM_SetAutoReload(TIM2, InitialAutoreload);
				LL_TIM_EnableCounter(TIM2);
				LL_TIM_GenerateEvent_UPDATE(TIM2);
			}
			else
			{
				printf("please use TIM Freq 10 \r\n");
				LL_TIM_DisableCounter(TIM2);
				return -1;
			}
		}
		else
		{
			printf("error,please use / TIM On/TIM Off\r\n");
		}
	}
	else
	{
		printf("error,please use / TIM On/TIM Off\r\n");
		return -1;
	}
    return 0;
}

SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), TIM, Tim_Control, Tim_Control);

TIM On 打开定时器
TIM Off 关闭定时器
TIM Freq xx 更改定时器的频率,1-10K之间.
在这里插入图片描述

4、代码

代码下载

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

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

相关文章

第五章 部署PKI与证书服务

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 前言 PKI(公钥加密基础结构):通…

【C++】list的使用和模拟实现

目录 1.什么是list2.list的一些接口3.list的模拟实现3.1 迭代器3.2 list主体3.2.1 构造函数3.2.2 拷贝构造、赋值重载3.2.3 主体内引入迭代器3.2.4 insert和erase3.2.5 clear和析构函数 3.3 const迭代器的实现3.4 实现迭代器的operator-> 4.总结list迭代器的实现 1.什么是li…

领域驱动应用架构实践

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。 DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。 架构分层 首先在架构层次方面,在遵循DDD的分层架构模式的同时&…

STM32单片机(六)TIM定时器 -> 第五节:TIM输入捕获

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

Nucleo-F411RE (STM32F411)LL库体验 4 -Letter Shell移植与调试

Nucleo-F411RE (STM32F411)LL库体验 4 -Letter Shell移植与使用 1、串口的初始化 Nucleo-F411RE自带st-link,并支持虚拟串口的功能,根据原理图,st-link的rx tx接到了Nucleo-F411RE的PA2 PA3,所以我们要初…

以太网MII、RMII、GMII、RGMII(三)

目录 一、MII 二、RMII 三、GMII 四、RGMII 以太网硬件主要包括OSI的最下面两层,物理层和数据链路层,前者的芯片为PHY,后者的芯片为MAC控制器。而MAC与PHY之间的常用的数据传输接口有MII、RMII、GMII、RGMII。 模式 时钟 位宽 速率 M…

pytorch笔记:transformer 源码

来自B站视频,API查阅,TORCH.NN seq2seq 可以是 CNN,RNN,transformer nn.Transformer 关键源码: encoder_layer TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout,activation, layer_norm_eps, ba…

5.vue3医疗在线问诊项目 - _极速问诊-前置准备 ==> 需求分析、枚举类型、pinia仓库的初始化

5.vue3医疗在线问诊项目 - _极速问诊-前置准备 > 需求分析、枚举类型、pinia仓库的初始化 极速问诊-需求分析{#consult-product} 极速问诊阶段流程分析 线下看病流程: 选择医院(三甲、普通)》挂号》选择科室 》选择医生(专家…

牛客网专项练习——C语言错题集(5)

文章目录 指针的值指针与数组、函数的组合空结构体* 和 的优先级 指针的值 指针的值是一个地址,题目中的字符串 “girl” 应该是 *p 的值,即指针 p 所指地址存储的数据的值。 指针与数组、函数的组合 int *p[n] 等价于 int (*)p[n],是一个…

xinput1_3.dll丢失怎么办?xinput1_3.dll丢失的修复方法

xinput1_3.dll是电脑文件中的dll文件(动态链接库文件)。如果计算机中丢失了某个dll文件,可能会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错。 在我们打开软件或者游戏的时候,电脑提示xinput1_…

STM32 Proteus仿真自动刹车系统超声波测距电机控制-0042

STM32 Proteus仿真自动刹车系统超声波测距电机控制-0042 Proteus仿真小实验: STM32 Proteus仿真自动刹车系统超声波测距电机控制-0042 功能: 硬件组成:STM32F103C6单片机 LCD1602显示器HCSR04超声波传感器按键(加 减)电机蜂鸣器 1.单片机…

学习Angular的编程之旅

目录 1、简介 2、特点 2.1 横跨多种平台 2.2 速度与性能 2.3 美妙的工具 3、Angular 应用:知识要点 3.1 组件 3.2 模板 3.3 依赖注入 4、与其他框架的对比 1、简介 Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用。 A…

Java(二):Spring Boot 项目-文件的增删改查下载

Spring Boot 项目-文件的增删改查下载 准备docker运行mysql设置MySQL时区查看当前MySQL使用的时区MySQL建库建表 定义两个实体类数据表实体类查询条件实体类 工具类com/example/user/utils/FileUtil.java 用到的SQL语句mapper user/src/main/resources/mapper/FileTableDao.xml…

基于SSM框架的Java的医院管理系统的设计与实现+文档

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于SSM框架的Java的医院管理系统的设计与实现文档 视频演示 视频去哪了呢?_哔哩哔哩_bilibili 系统介绍 摘 要 随着互联网技术的快速进…

ARM-驱动

字符设备驱动的内部实现: 文件存在文件系统中,会有一个标识inode号,基于这个标识找到了struct_inode结构体(保存当前文件信息),struct_inode结构体中有一个struct cdev *i_cdev类型的字符设备指针&#x…

糖基化修饰1240252-34-9,Fmoc-Thr((Ac4Galβ1-3)Ac3GlcNAcβ1-6AcGalNAcα)-OH,反应特点及性质研究

文章关键词:糖化学试剂,多肽合成,Fmoc-保护氨基酸,糖基化修饰 Fmoc-Thr((Ac4Galβ1-3)Ac3GlcNAcβ1-6AcGalNAcα)-OH (文章编辑来源于:西安凯新生物科技有限公司小编WMJ)​ 一、Product stru…

Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏

目录 289. 生命游戏 Game Of Life 292. Nim 游戏 Nim Game 299. 猜数字游戏 Bulls and Cows 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 289. 生命游戏 Game Of L…

牛客小白月赛56

今天无聊vp了一下 A.省略 B.最优肯定是全部都是1 C.直接统计每个余数下可以填多少个数&#xff0c;然后排序从小到大的排序输出即可 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> #inc…

Linux yum常用命令

Linux服务器安装成功后&#xff0c;我们会经常使用yum安装rpm包以满足使用的需要。使用yum源安装rpm包有两种方式&#xff1a; 方式一&#xff1a; 搭建本地yum源环境&#xff0c;进行rpm包的安装&#xff0c;具体搭建方式&#xff0c;参考(chapter-5)&#xff1a; Linux常规…

Android12之如何查看hidl服务(一百五十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…