普中STM32-PZ6806L开发板(HAL库函数实现-TIM5 设置 PWM input, 获取频率跟占空比)

news2024/10/7 12:23:41

简介

初始化 TIM5 为 PWM input CH1, 获取输入PWM的频率和占空比

电路原理图

连线

将 PC7 与 PA0使用跳线进行连接 

其他知识

APIs

/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获开启
HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获停止
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); // 中断捕获开启
HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); // 中断捕获停止
/* Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t 				Channel, uint32_t *pData, uint16_t Length); //DMA捕获开启
HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); // DMA捕获停止
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); // 捕获时中断回调函数



实现步骤

创建项目

参考 普中STM32-PZ6806L开发板(HAL库函数实现-PWM呼吸灯), 使用同一个GPIO口PC7产生PWM,然后PA0引脚进行捕获

初始化TIM5 CH1

合并通道, 选项为PWM输入到CH1, 这里其实就是合并1和2通道使一个采集上升沿一个采集下降沿
在这里插入图片描述
主从模式开启, 先启动会等待另外一个同步启动
在这里插入图片描述

添加用户代码

main.c

float frequency = 0;
float dutyCycle = 0;
int capture_index = 0;
uint16_t ic_vals[2];
uint32_t difference = 0;

uint32_t ic_val = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if ( htim->Instance == TIM5 )
	{
		if ( htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1 )
		{
			ic_vals[1] = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1) + 1; // 周期计数值
			++capture_index;
//			printf("channel1: %d\r\n", capture_index);
		}
		else if ( htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) 
		{
			ic_vals[0] = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2) + 1; // 高电平计数值
			++capture_index;
//			printf("channel2: %d\r\n", capture_index);
		}
		
		if (2 > capture_index) // PWM数据采集完整才能计算频率
			return;
		
//		printf("vals: %d %d\r\n", ic_vals[0], ic_vals[1]);
		
		frequency = (72000000/72)/(ic_vals[1]); // (主频/预分频)/周期计数
		dutyCycle = ((float)ic_vals[0])/((float)ic_vals[1]) * 100.0; // (高电平计数值/周期计数值) * 100 
		
		capture_index = 0;
	}
}

int main(void)
{
	...
	printf("Very Welcome!\r\n");
	
	__HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_2, 300); // 改变占空比
	HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_2); // 启动PWM输出 

	HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2);
	
  while (1)
  {
		HAL_Delay(2000);
		printf ("frequency : %f, duty: %f\r\n", frequency, dutyCycle);
  }
}

共赏在这里插入图片描述

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)
普中STM32-PZ6806L开发板(HAL库函数实现-TIM5捕获上升沿, 获取输入频率)

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

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

相关文章

微信好友添加频繁的原因

01 微信好友添加频繁的原因 1. 添加好友的频率太高:短时间内添加多个好友,系统会认为账号被盗,从而限制用户添加好友; 2. 频繁的发送好友请求:在短时间内连续发送好友请求,也会导致微信限制操作&#xff0…

2021-01-03 excel实现列递增,行保持不变

需求:excel文档数据操作的时候发现自动递增只能实现列不变行号递增 我这里里需要的是列递增行不变 解决方式:通过一些函数的组合使用 INDIRECT("驻场明细!"&CHAR(ROW()62)&ROW(驻场明细!A$28)) INDIRECT()函数的使用: INDI…

Android studio ViewPager2应用设计

一、ViewPager2应用场景: ViewPager2是一个功能强大的滑动容器,提供灵活的页面切换和布局定制功能,使得应用程序界面更加丰富和交互性强,主要应用于以下场景: 1)、实现引导页或欢迎页:ViewPag…

妙手ERP功能更新:优化各平台描述设置、Ozon去除会员价设置、对接速虎速运.......

为了给卖家朋友带来更好的使用体验,更高效地运营跨境店铺,妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 优化各平台认领配置中的描述设置:具体优化见各平台描述设置 - 采集亚马逊产品到公用采集箱时,简易描述默…

助力成长的开源项目 —— 筑梦之路

闯关式 SQL 自学:sql-mother 免费的闯关式 SQL 自学教程网站,从 0 到 1 带大家掌握常用 SQL 语法,目前一共有 30 多个关卡,希望你在通关的时候,变身为一个 SQL 高手。除了闯关模式之外,这个项目支持自由选…

基于ssm的校友录的设计与实现+jsp论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

声明式管理方(yaml)文件

声明式管理方(yaml)文件: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件,所有的内容都在yaml文件当中。 3、编辑好的yaml文件需要依靠陈述是还是要依靠陈述式的命令发布到k8s集群当中 create只能创建,不能更新。从指定yaml文件中读取配置&#…

深度确定性策略梯度 DDPG

深度确定性策略梯度 DDPG 深度确定性策略梯度 DDPG模型结构目标函数算法步骤适合场景 深度确定性策略梯度 DDPG A2C、A3C 都是在线策略,在与环境交互时,样本参数更新效率低,所以主要是应用在离散空间,计算量没那么大。 DDPG 专用…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称:弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述:脆弱的SSL加密算法,是一种常见的漏洞,且至今仍有大量软件支持低强度的加密协议,包括部分版本的openssl。其实&#xf…

x-cmd pkg | lazygit - git 命令的终端 UI

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 lazygit 由 Jesse Duffield 于 2018 年使用 Go 语言构建的 git 终端交互式命令行工具,旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x lazygit 即可自动下载并使用 在终端运行 eval "$(curl …

栈的经典算法问题(算法村第四关白银挑战)

括号匹配问题 有效的括号 20. 有效的括号 - 力扣(LeetCode) 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类…

包围盒体积-体积计算

文章目录 环境:1.1 包围盒法介绍:2.1 python代码3.1 可视化4.1 体积Calculation 环境: Open3D 1.1 包围盒法介绍: 求解离散点最优包围空间 常用的凸包算法: AABB OOB 2.1 python代码 conda activete deeplabv3plus(…

一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 大小端字节序

关注 点赞 不错过精彩内容 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! Hello,大家好我是硬核王同学,是一名刚刚工作一年多的Linux工程师&#xff0…

【hyperledger-fabric】将智能合约部署到通道

简介 本文主要来自于B站视频教学视频,也主要参看了官方文档中下图这一章节。针对自己开发的代码做出相应的总结。 1.启动网络 # 跳转到指定的目录 cd /root/fabric/fabric-samples/test-network# 启动docker容器并且创建通道 ./network.sh up createChannel2.打…

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具,它支持生成多种类型的项目文件,覆盖了广泛的开发环境和编译器。在这篇博…

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法 #修改数据库yz_options

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/88682033 一,概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法,用于预测时间序列数据的趋势和未来值。 在使用这种方法之前,需要将时间序…

Nacos设置账号密码

1、控制台设置 # 开启账号密码验证 nacos.core.auth.enabledtrue# 设置账号密码 nacos.core.auth.usernamenacos nacos.core.auth.passwordnacos1232、数据库设置 密码为:nacos,对应加密信息是: $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2k…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

图像分割-漫水填充法 floodFill (C#)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-漫水填充法 floodFill-CSDN博客 FloodFill方法是一种图像处理算法,它的目的是…