本帖最后由 我又来下资料了 于 2016-7-28 10:37 编辑
配置完成,主函数都能打印printf函数,为什么中断没有反应,以前stm32也是这么配置的都可以。什么情况。
void TIM17_Config(void) //调用此函数就可以启动定时中断
{
TIM17_Configuration();
TIM17_NVIC_Configuration();
TIMER_INTConfig(TIMER17,TIMER_INT_UPDATE,ENABLE);//打开tim中断
}
void TIM17_Configuration(void)
{
TIMER_BaseInitPara TIM_TimeBaseStructure;
/* 设置TIM17CLK 为 48MHZ */
RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER17,ENABLE); //时钟配置
TIMER_DeInit(TIMER17);
TIM_TimeBaseStructure.TIMER_Period=(7200-1); //(为此值时中断)自动重装载寄存器周期的值(0x0000 - 0xFFFF)
TIM_TimeBaseStructure.TIMER_Prescaler= 99; //计数周期预分频值(0x0000 - 0xFFFF)
TIM_TimeBaseStructure.TIMER_ClockDivision=TIMER_CDIV_DIV1;// 对外部时钟进行采样的时钟分频
TIM_TimeBaseStructure.TIMER_CounterMode=TIMER_COUNTER_UP; //计数模式,向上计数
TIMER_BaseInit(TIMER6, &TIM_TimeBaseStructure);
TIMER_Enable( TIMER17, ENABLE ); //打开定时器
}
/// TIM17中断优先级配置
void TIM17_NVIC_Configuration(void)
{
NVIC_InitPara NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQ= TIMER17_IRQn; //中断通道
NVIC_InitStructure.NVIC_IRQPreemptPriority=1; //优先级
NVIC_InitStructure.NVIC_IRQSubPriority=2; //副优先级
NVIC_InitStructure.NVIC_IRQEnable = ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure);
}
/***************************************************************
*函数名:TIM17_IRQhandler
*形参:void
*返回值:void
*函数功能:中断处理函数
****************************************************************/
void TIM17_IRQhandler(void)//中断处理程序
{
if ( TIMER_GetIntBitState(TIMER17,TIMER_INT_UPDATE) == SET )
{
TIMER_ClearIntBitState(TIMER17,TIMER_INT_UPDATE); //清除挂起,要不然一直循环
printf("time17\r\n");
Draw_Text_8_16_Str(0,16,NOBACKGROUND,GREEN,"TIME17 ");
}
}
int main(void)
{
SysTick_Configuration();
USART1_Config();
TIM17_Config();
printf("这是一个串口中断接收回显实验\r\n");
printf("请在超级终端或者串口调试助手输入字符\r\n");
while(1){printf("main");}
return 0;
}
|