请教各位关于输入捕获的问题。TIM3,PWM产生1KHZ的方波,TIM2的CH2进行捕获,捕获过后进入中断,中断中LED1取反。感觉是进了中断的,LED1灯微亮。用示波器测得LED1的频率为666.66KHZ,但是改变了PWM的频率,LED1的频率还是666.66KHZ,请教各位了。程序如下:
配置程序如下:
#include<stm32f10x_lib.h>
#include"time.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRH&=0XF0FF0FFF;
GPIOB->CRH|=0X03003000;
GPIOB->ODR|=1<<11;
GPIOB->ODR|=1<<14;
}
void PWM_Init(u16 arr,u16 psc)//PWM,TIM3,1KHZ
{
RCC->APB1ENR|=1<<1;
RCC->APB2ENR|=1<<0;
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0X0FFFFFFF;
GPIOA->CRL|=0XB0000000;
GPIOA->ODR|=1<<7;
TIM3->ARR=arr;
TIM3-> SC=psc;
TIM3->CCMR1|=7<<12;
TIM3->CCMR1|=1<<11;
TIM3->CCER|=1<<4;
TIM3->CR1=0X8000;
TIM3->CR1|=0X01;
TIM3->CCR2=450;
}
void Capture_Init(u16 arr,u16 psc) //TIM2定时器捕获配置
{
RCC->APB2ENR|=1<<0;
RCC->APB2ENR|=1<<2;
RCC->APB1ENR|=1<<0;
GPIOA->CRH&=0XFFFF0FFF;
GPIOA->CRH|=0X0000B000;
GPIOA->ODR|=1<<11;
TIM2->ARR=arr;
TIM2-> SC=psc;
TIM2->CCMR1|=1<<0;
TIM2->CCMR1|=0<<1;
TIM2->CCMR1|=3<<4;
TIM2->CCER|=0<<1;
TIM2->CCMR1|=0<<2;
TIM2->CCMR1|=0<<3;
TIM2->CCER|=0<<0;
TIM2->DIER|=1<<1;
TIM2->DIER|=1<<6;
TIM2->SMCR|=0x00D4;
TIM2->CR1|=0x01; //使能定时器2
MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2
}
void TIM2_IRQHandler(void)
{
LED1=!LED1;
TIM2->SR&=~(1<<1);
}
主程序如下:
#include<stm32f10x_lib.h>
#include"sys.h"
#include"usart.h"
#include"delay.h"
#include"time.h"
u16 DutyCycle;
u16 Frequency;
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LED_Init();
  WM_Init(1000,72-1);
Capture_Init(2000,72-1);
while(1)
{
LED0=!LED0;
delay_ms(300);
}
}
|