STM32-PWM输入捕获实验

PWM输入捕获模式是输入捕获模式的特例。输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中。你可以开启捕获中断然后在中断处理函数中读出保存的计数值。

与输入捕获不同的是PWM输入模式会将同一个输入信号(TI1或TI2)连接到两个捕获装置(IC1和IC2)。这两个捕获装置一个捕获上升沿一个捕获下降沿。TI1FP1、TI2FP2它们中的一个被选择为触发输入且从模式控制器被配置为复位模式。

即在一个PWM输出的周期内,PWM捕获能读取PWM波的周期、占空比、频率的数据。以IC1读取上升沿为例,当IC1读取到第一个上升沿信号时,则将CNT计数器置零,数值记为CNT1;之后IC读取遇到的下降沿信号后,计入捕获比较寄存器2中,记为CNT2;当IC1读取到新的上升沿信号的时候,则会计入捕获比较寄存器1中,记为CNT3。我们计算高电平的时间则为(CNT2-CNT1)*t,周期为(CNT3-CNT1)*t。

实验要求:通过定时器3通道2输出PWM,将PWM波输入定时器8通道1,测量PWM波的相关讯息。

Tout=(ARR+1)*(PSC+1)/Ft(Ft=72M)。

首先我们编写PWM输出函数头文件gtim.h:

#ifndef __GTIM_H
#define __GTIM_H
 
#include "./SYSTEM/sys/sys.h"
 
extern TIM_HandleTypeDef g_timx_pwm_chy_handle;
 
void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc);
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);
 
#endif

接下来编写PWM输出函数文件gtim.c:

#include "./BSP/GTIM/gtim.h"
#include "./BSP/LED/led.h"
 
TIM_HandleTypeDef g_timx_pwm_chy_handle;
 
void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc){
 
    TIM_OC_InitTypeDef timx_oc_pwm_chy;
 
    g_timx_pwm_chy_handle.Instance = TIM3;
    g_timx_pwm_chy_handel.Init.Prescaler = psc;
    g_timx_pwm_chy_handle.Init.Period = arr;
    g_timx_pwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP;//向上计数模式
    HAL_TIM_PWM_Init(&g_timx_pwm_chy_handle);
 
    timx_oc_pwm_chy.O
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值