当前位置: 首页 > 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%

http://www.lryc.cn/news/538529.html

相关文章:

  • 智能协同:数据集成平台与DeepSeek驱动的数据分析与智能调度革新
  • Mybatis高级(动态SQL)
  • 申论对策建议类【2022江苏B卷第一题“如何开展网络直播”】
  • 蓝耘智算携手DeepSeek,共创AI未来
  • FFmpeg源码:url_find_protocol函数分析
  • 3D与2D机器视觉机械臂引导的区别
  • C# 添加图标
  • 基于 Python 和 Django 的北极星招聘数据可视化系统(附源码,部署)
  • 基于STM32、HAL库、MB85RC16PNF(I2C接口)驱动程序设计
  • 【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663
  • 20.【线性代数】——坐标系中,平行四边形面积=矩阵的行列式
  • 数据库知识速记:事物隔离级别
  • 重构测试项目为spring+springMVC+Mybatis框架
  • 如何使用OPENAI的Whisper功能进行音频字母提取功能
  • DFS算法篇:理解递归,熟悉递归,成为递归
  • 2025java常见面试题第一弹
  • JMeter工具介绍、元件和组件的介绍
  • 机舱卫生和空气质量改善
  • springBoot之环境变量
  • 萨班斯-奥克斯利法案(Sarbanes-Oxley Act, SOX):公司财务透明度的守护者(中英双语)
  • iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)
  • tomcat html乱码
  • kubectl exec 实现的原理
  • Unity中可靠的UDP实现
  • CentOS 7操作系统部署KVM软件和创建虚拟机
  • Golang GORM系列:GORM分页和排序
  • WPF的MVVMLight框架
  • 微服务SpringCloudAlibaba组件sentinel教程【详解sentinel的使用以及流量控制、熔断降级、热点参数限流等,附有示例+代码】
  • ScoreFlow:通过基于分数的偏好优化掌握 LLM 智体工作流程
  • 数字水印嵌入及提取系统——基于小波变换GUI