龙芯2k按键中断驱动_利用STM32的外部中断和定时器测量频率

本文介绍了如何利用STM32的外部中断和定时器测量PWM波形频率。通过配置TIM1的CH1产生PWM波,连接PA8与PA0,并详细分析了预分频系数72和重装载值0XFFFF的设置原因。通过外部中断捕获上升沿,结合定时器计数,从而精确测量频率。
摘要由CSDN通过智能技术生成
65b8168ca376fe8e94b16a649a372787.png

摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形 硬件:STM32F103C8T6核心板、示波器、串口调试助手 所用到的的引脚为PA8和PA0。

测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。

一、利用TIM1的CH1产生PWM波

pwm.c

#include "pwm.h"void TIM1_PWM_Init(u16 arr,u16 psc){      GPIO_InitTypeDef GPIO_InitStructure;    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    TIM_OCInitTypeDef  TIM_OCInitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能                                                                                //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOA, &GPIO_InitStructure);        TIM_TimeBaseStructure.TIM_Period = arr; //输出PWM的频率为200 000/100=2 000 HZ=2K 实际示波器测量 2.00055K     TIM_TimeBaseStructure.TIM_Prescaler =psc; //驱动(单片机提供给)计数器的时钟是72 000 000/36 0=200kHZ    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值