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

这篇具有很好参考价值的文章主要介绍了普中STM32-PZ6806L开发板(HAL库函数实现-TIM5 设置 PWM input, 获取频率跟占空比)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

初始化 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通道使一个采集上升沿一个采集下降沿
hal库获取tim的频率,普中STM32-PZ6806L,stm32,嵌入式硬件,单片机
主从模式开启, 先启动会等待另外一个同步启动
hal库获取tim的频率,普中STM32-PZ6806L,stm32,嵌入式硬件,单片机

添加用户代码

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捕获上升沿, 获取输入频率)文章来源地址https://www.toymoban.com/news/detail-828006.html

到了这里,关于普中STM32-PZ6806L开发板(HAL库函数实现-TIM5 设置 PWM input, 获取频率跟占空比)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 HAL库函数——HAL_TIM_Base_Start_IT()详解

    以STM32G030C8T6中的HAL_TIM_Base_Start_IT()函数为例,进行解释; 函数原型: 函数原型: 该函数用于 启动定时器的中断模式 。在使用该函数之前,需要先初始化好定时器的配置,并将相关的中断处理函数注册到对应的中断向量中。 htim:指向TIM_HandleTypeDef结构体的指针,包含了定时

    2024年02月04日
    浏览(37)
  • STM32f103,TIM1,TIM2,TIM3,TIM4,TIM5,TIM8,4路PWM输出配置(保姆级)

    没什么可说的,想说的都写在注释里了,重要的事情说三遍:看注释,看注释,看注释 定时器的.c文件: /***************************************************************************** TIM1,TIM2,TIM3,TIM4,TIM5,TIM8输出4路PWM配置 要用TIM2-TIM5记得注销TIM1,TIM8 要用TIM1,TIM8记得注销TIM2-TIM5 默认:TIM2-TIM5 注

    2023年04月08日
    浏览(41)
  • STM32定时器(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,配置使用

    2.1 时钟来源 计数器时钟可以由下列时钟源提供: ·内部时钟(CK_INT) ·外部时钟模式1:外部输入脚(TIx) ·外部时钟模式2:外部触发输入(ETR) ·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

    2024年02月02日
    浏览(55)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器中断)

    STM32F1 系列中,除了一些特殊的型号,大部分F1有8 个定时器,分为 基本定时器,通用定时器和高级定时器 。 基本定时器TIM6 和TIM7 是一个16 位的只能向上计数的定时器,只能定时,没有外部IO。 通用定时器TIM2/3/4/5 是一个16 位的可以向上/下计数的定时器,可以定时,可以输出

    2024年02月16日
    浏览(78)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器输入捕获)

    输入捕获可以对 输入的信号的上升沿、下降沿或者双边沿进行捕获 ,常用的有 测量输入信号的脉宽 和 测量PWM 输入信号的频率 和 占空比 这两种。 输入捕获的原理 就是,当捕获到信号的跳变沿的时候,把计数器CNT 的值锁存到捕获寄存器CCR 中,把前后两次捕获到的CCR 寄存

    2023年04月14日
    浏览(104)
  • STM32的HAL库开发各函数意义、笔记

    快速查阅相关函数,请从目录查找 在STM32F103中, GPIOB-BSRR |= GPIO_PIN_7  的作用是将GPIOB的第7位引脚设置为高电平(将引脚置1),而 GPIOB-BRR |= GPIO_PIN_7  的作用是将GPIOB的第7位引脚设置为低电平(将引脚置0)。下面是对这两个语句的详细说明: GPIOB-BSRR |= GPIO_PIN_7 : GPIOB 是ST

    2024年02月05日
    浏览(45)
  • STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存。 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相关文章: STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx(二) STM32cubemx ADC+TIM+DMA超频采样 ADC+TIM+DMA采集交流信号是电赛中使用范围最为广泛的一个技术。这个模

    2024年02月03日
    浏览(53)
  • 【STM32】--PZ6860L,STM32F4,ARM3.0开发板

    (1)各种外设和主板原理图 (2)主板供电部分5V和3.3V兼容设计 注意跳线帽 STM32和51的IO对应关系 下载电路 其实启动2次。 一次从系统区启动,一次从用户Flash启动。 第一步:先设置BOOT1和BOOT0从系统区【系统存储器】启动,执行系统中预设的程序 第二步:主机(电脑)通过

    2024年02月07日
    浏览(85)
  • STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

    STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 通过定时器TIM的输出比较模式得到预定频率与占空比的PWM波形;其中定时器输出比较模式与PWM模式的区别在于!!! PWM模式在同一个TIM下所有输出口的频率一致不能单独控制单个的频率 ,而输出比较模式

    2024年02月03日
    浏览(64)
  • STM32(HAL)--使用定时器TIM的Encoder Mode来读取旋钮编码器的脉冲数

    目录 一 旋钮编码器相关知识 二 STM32CubeMx配置 三 程序编写 3.1 相关函数介绍 3.2 程序编写 四 实验结果 旋转编码器是一种位置传感器,输出脉冲信号可以用来确定编码器的旋转角度和旋转方向。 编码器中有两个开关,当旋钮旋转后,开关会依次导通,开关结构图如下图所示

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包