本来想弄个输入捕获高电平时间,而后弄不出来,就一步一步来。现在只是想做个,当捕获到下降沿的时候取反led1,上升沿的时候取反led0,为什么还不行?用的是TIM3->CH2通道,用信号源给的方波
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72, 9600);
LCD_Init();
Capture_Init(65535, 71);
while(1)
{
}
/*********************************
捕获输入初始化
*********************************/
void Capture_Init(u16 arr, u16 psc)
{
RCC->APB1ENR|=1<<1; //使能定时器3时钟
RCC->APB2ENR|=1<<2; //便能GPIOA时钟
GPIOA->CRL&=0X0FFFFFFF;
GPIOA->CRL|=0X40000000; //PA7设为浮空输入
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300; //led0 PA8设为推挽输出
GPIOD->ODR|=1<<2;
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003; //led1 PD2设为推挽输出
GPIOA->ODR|=1<<8;
TIM3->ARR=arr;
TIM3-> SC=psc;
TIM3->CCMR1|=2<<8; //CH2为输入,IC2映射到TI2上,无滤波器
TIM3->CCER&=0<<5; //设为上升沿触发
TIM3->CCER|=1<<4; //捕获使能
//中断开关
// TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<2; //允许捕获比较中断
TIM3->CR1|=1<<7; //允许自动预重装载值
MY_NVIC_Init(1,1,TIM3_IRQChannel,2);
TIM3->CR1|=1<<0; //使能计数器
}
/*********************************
基本定时中断与捕获中断
*********************************/
void TIM3_IRQHandler(void)
{
if(TIM3->SR&(1<<2))//捕获中断
{
if(TIM3->CCER&(1<<5))
{
led1=~led1;
TIM3->CCER&=0<<5; //设为上升沿触发
}else
{
led0=!led0;
TIM3->CCER|=1<<5; //设为下降沿触发
}
TIM3->SR&=(0<<2); //清捕获中断标志位
}
}
|