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

news/2024/11/30 18:46:19/

简介

初始化 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.ppmy.cn/news/1290564.html

相关文章

AI的突破与融合:2024年中国智能技术的新纪元_光点科技

随着人工智能领域的不断突破,2024年注定将成为中国智能技术发展的一个新纪元。当下,AI技术不仅在理论研究上取得了重大进展,其在商业应用、社会服务等领域的融合也日益深入。本文将结合近期网络上的AI热点,展望中国在AI技术方面的…

Vue3地图选点组件

Vue3地图选点组件 <template><div style"width: 100%; height: 500px"><div class"search-container"><el-autocompletev-model"suggestionKeyWord"class"search-container__input"clearable:fetch-suggestion…

对偶问题的基本性质

写于&#xff1a;2024年1月3日晚 修改于&#xff1a; 原规划与对偶规划 原规划对偶规划 max ⁡ z C T X s.t. { A X ≤ b , 其中 X ( m ∗ 1 ) X ≥ 0 \begin{aligned} & \max \mathrm{z}\mathbf{C}^T \mathbf{X} \\ & \text { s.t. }\left\{\begin{array}{l}\mat…

迅为RK3588开发板使用 FFMpeg 进行推流

Debian/Ubuntu 系统使用以下命令安装 FFMpeg &#xff0c;如下图所示&#xff1a; apt-get install ffmpeg 使用 ifconfig 查看开发板 ip 为 192.168.1.245 如下图所示&#xff1a; 使用 FFMpeg 推流一个 mp4 视频进行测试&#xff0c;作者将测试视频 test.mp4 放在了根目录下…

人工智能教程(四):概率论入门

目录 前言 TensorFlow 入门 SymPy 入门 概率论入门 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站 在本系列的 上一篇文章 中&#xff0c;我们进一步讨论了矩阵和线性代数&#…

c++IO库详细介绍

文章目录 前言c IO 类简介1. iostream库iostream 类标准IO对象 2. fstream库fstream 类 3. stringstream库stringstream 类 格式化和控制错误处理 IO对象无拷贝或赋值IO条件状态主要的状态标志检查流状态控制流状态示例 管理输出缓冲主要操作示例 文件输入输出使用文件流对象示…

Mysql的四大引擎,账号管理,数据库的建立

数据库存储引擎查看 Support字段说明 default的为默认引擎 YES表示可以使用 NO表示不能使用 命令 SHOW ENGINES 四大引擎 MEMORY 使用场景&#xff1a;由于易失性&#xff0c;可以用于存储在分析中产生的中间表 特点 所有的数据都保存在内存中&#xff0c;一旦服务器重启&…

修改 Ubuntu 的配置

目录 一、修改地址 1. 修改本机IP 二、修改网关 1. 查看网关地址 2. 设置默认网关 三、重启网络 1. 重启网络 2. 刷新网络 四、修改主机名 1. 查看主机名 2. 修改主机名 一、修改地址 1. 修改本机IP sudo ifconfig en…