这个是根据不完全手册上的教程提供的代码写的定时器3的程序,在板子上调试过可以,当我把定时器3改为定时器2和定时器4时,在板子上也是运行正确的
然而,当我把定时器3改为定时器5的时候,在板子上却出错了,LED1一直都是不亮的状态,另外LED0也是一直熄灭,没有闪烁
为什么会这样子呢??小弟是新手啊。
#include "timer.h"
#include "led.h"
//Mini STM32开发板
//通用定时器驱动代码
//正点原子@ALIENTEK
//2010/6/1
//定时器3中断服务程序
//2ms中断1次
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
LED1=!LED1;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
//通用定时器中断初始化
//这里始终选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能
TIM3->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM3-> SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<6; //允许触发中断
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
主函数的程序如下:
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
Timerx_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms
while(1)
{
LED0=!LED0;
delay_ms(250);
}
}
改为定时器5后的定时器初始化程序:
#include "timer.h"
#include "led.h"
//Mini STM32开发板
//通用定时器驱动代码
//正点原子@ALIENTEK
//2010/6/1
//定时器5中断服务程序
//2ms中断1次
void TIM5_IRQHandler(void)
{
if(TIM5->SR&0X0001)//溢出中断
{
LED1=!LED1;
}
TIM5->SR&=~(1<<0);//清除中断标志位
}
//通用定时器中断初始化
//这里始终选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器5!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<3;//TIM5时钟使能
TIM5->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM5-> SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM5->DIER|=1<<0; //允许更新中断
TIM5->DIER|=1<<6; //允许触发中断
TIM5->CR1|=0x01; //使能定时器5
MY_NVIC_Init(1,3,TIM5_IRQChannel,2);//抢占1,子优先级3,组2
}
|