初级会员

- 积分
- 161
- 金钱
- 161
- 注册时间
- 2012-7-5
- 在线时间
- 6 小时
|
void TIM1_CC_IRQHandler(void) 关键是中断服务函数感觉不对,怎么改都不对呀
{
if(TIM8->SR&0X0001)//溢出中断
{
LED1=!LED1;
LED0=!LED0;
}
TIM8->SR&=~(1<<0);//清除中断标志位
}
//arr:自动重装值。
//psc:时钟预分频数
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<13; //TIM8时钟使能
TIM8->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM8-> SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM8->DIER|=1<<0; //允许更新中断
TIM8->DIER|=1<<6; //允许触发中断
TIM8->CR1|=0x01; //使能定时器8
MY_NVIC_Init(1,3,TIM1_CC_IRQChannel,2);//抢占1,子优先级3,组2
}
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB2ENR|=1<<13; //TIM8时钟使能
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
GPIOC->CRL&=0XF0FFFFFF;//PC6输出
GPIOC->CRL|=0X0B000000;//复用功能输出
GPIOC->ODR|=1<<6;//PC6上拉
GPIOC->CRL&=0X0FFFFFFF;//PC7输出
GPIOC->CRL|=0XB0000000;//复用功能输出
GPIOC->ODR|=1<<7;//PC7上拉
GPIOC->CRH&=0XFFFFFFF0;//PC8输出
GPIOC->CRH|=0X0000000B;//复用功能输出
GPIOC->ODR|=1<<8;//PC8上拉
GPIOC->CRH&=0XFFFFFF0F;//PC9输出
GPIOC->CRH|=0X000000B0;//复用功能输出
GPIOC->ODR|=1<<9;//PC9上拉
TIM8->ARR=arr;//设定计数器自动重装值
TIM8-> SC=psc;//预分频器不分频
TIM8->CCMR1|=7<<12; //CH2 PWM2模式
TIM8->CCMR1|=1<<11; //CH2预装载使能
TIM8->CCER|=1<<4; //OC2 输出使能
TIM8->BDTR=0X8000; //设置PMW主输出
TIM8->CR1|=0x01; //使能定时器8
}
其实就是一个简单的PWM,用的是TIM8而已,然后设置定时器中断服务函数,使LED灯能产生PWM效果,很奇怪,怎么弄都有问题,LED灯接口是PD8,PD9,现在PC7已经可以产生PWM,就是中断那里有问题,望大神帮忙看看,谢谢啦
|
|