当前位置: 首页 > news >正文

进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板捕获频率和占空比)

单通道捕获频率

  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
  HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{

if(htim->Instance==TIM2)
{
    cap1=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
	TIM2->CNT=0;
	R40_frq=80000000/80/cap1;
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
}
if(htim->Instance==TIM3)
{
    cap2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
	TIM3->CNT=0;
	R39_frq=80000000/80/cap2;
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
}

}

双通道捕获下降沿

uint32_t cap1_2,cap2_2,R39_duty,R40_duty;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{   if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
    {
	cap1=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
	cap1_2=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
	TIM2->CNT=0;
	R40_frq=80000000/80/cap1;
	R40_duty=(1.0*cap1_2)/(1.0*cap1)*100;
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
	}
}
if(htim->Instance==TIM3)
{   if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
	{
    cap2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
	cap2_2=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
	TIM3->CNT=0;
	R39_frq=80000000/80/cap2;
	R39_duty=(1.0*cap2_2)/(1.0*cap2)*100;
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
	}
}
}

为什么要使用 (1.0 * cap2_2) / (1.0 * cap2) * 100;

不使用 1.0 时,由于 cap2_2 / cap2 是整数除法,结果为 0,最终得到的占空比也是 0;

当使用 1.0 时,计算表达式变为 (1.0 * cap2_2) / (1.0 * cap2) * 1001.0 是一个浮点数常量,在 C 语言里,当一个整数和一个浮点数进行运算时,整数会被隐式地转换为浮点数类型,然后进行浮点数运算。

在 1.0 * cap2_2 中,cap2_2 是整数,1.0 是浮点数,所以 cap2_2 会被转换为浮点数,运算结果是一个浮点数;同理,1.0 * cap2 的结果也是浮点数。这样一来,(1.0 * cap2_2) / (1.0 * cap2) 就变成了浮点数除法。

浮点数除法会保留小数部分,对于 cap2 = 10 和 cap2_2 = 3 的情况,(1.0 * 3) / (1.0 * 10) 就是 3.0 / 10.0,结果是 0.3。最后再将这个结果乘以 100,就得到了准确的占空比 30.00%

相关文章:

  • 【云原生】最新版Kubernetes集群基于Containerd部署
  • VMware 17 安装 VMTools(win 7旗舰 X64)
  • 使用redis分布式锁来解决高并发场景
  • MySQL中的事务隔离级别有哪些?
  • 基于STM32、HAL库、FM24CL64(I2C接口)驱动程序设计
  • 达梦数据库针对慢SQL,收集统计信息清除执行计划缓存
  • VScode内接入deepseek包过程(本地部署版包会)
  • 【网络编程】之数据链路层
  • 使用卷积神经网络(CNN)对颜色失真情况下进行数字识别
  • 【全栈】SprintBoot+vue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量
  • 请谈谈 em、px、rem、vh、vw 的区别,如何使用?
  • ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入
  • 打造智能语料库:通过Coco AI Server 实现 Notion 笔记 RAG 检索功能
  • vue3项目实践心得-寻找未被使用的最小编号
  • LVGL图形界面编程(基础篇): 一.LVGL入门
  • 单表数据文件坏块检查及恢复
  • 计算光学基础
  • 移动通信发展史
  • Django创建一个非前后端分离平台
  • 基于 Redisson 分布式锁 实现报名人数限制功能
  • 长沙网站建设哪家公司好/营销的方法手段有哪些
  • 中国神鹰网站建设/怎么推广网站链接
  • 晚上正能量免费下载软件安全/如何提高网站排名seo
  • qq整人网站怎么做/长沙网络推广外包
  • 3dmax建模/夫唯seo教程
  • 网站域名怎么做变更/太原互联网推广公司