主程序
tim.c
#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"
void TIM4_IRQHandler(void)
{if(TIM4->SR&0X0001)
{
LED0=!LED0;}
TIM4->SR&=~(1<<0);
}
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2; //TIM3时钟使能
TIM4->ARR=arr; //自动重装载值
TIM4-> SC=psc; //预分频值
TIM4->DIER|=1<<0;//允许更新中断
TIM4->DIER|=1<<6; //允许触发中断
TIM4->CR1|=0X01;//使能计数器
MY_NVIC_Init(2,3,TIM3_IRQChannel,2);
}
void PWM_Init(u16 arr,u16 psc)
{RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRH&=0XFFFFFFF0; //PA8输出
GPIOA->CRH|=0X00000004; //浮空输入
GPIOA->CRL&=0X0FFFFFFF;
GPIOA->CRL|=0XB0000000;
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;
TIM3-> SC=psc;
TIM3->CCMR1|=6<<12;//PWM1模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4;
TIM3->CR1=0x0080;//ARPE使能
TIM3->CR1|=0x01; //定时器3使能
}
tim.h
#ifndef _TIMER_H
#define _TIMER_H
#include "sys.h"
#define LED0_PWM_VAL TIM3->CCR2
void Timerx_Init(u16 arr,u16 psc);
void PWM_Init(u16 arr,u16 psc);
#endif
求助原子哥,程序中用到TIM3和TIM4,一个按键中断和定时中断,TIM3用于产生脉冲,PA7输出脉冲控制舵机转动,TIM4用于定时中断。
结果:按键中断使用正常,定时中断进不去,原子哥帮我看看是不是哪里配置出了问题。
|