问题:我写的串口IAP,然后我想在板子上实验一下要生成BIN文件的更新程序的效果,但是发现程序进不了主函数,无法执行LED灯亮的语句,如果使用定时器也是一样无法实现LED灯亮。板子是F407VET6,灯是正常初始化显示灯灭。
int main(void)
{
Delay_Init(); //初始化延时函数
Led_Init(); //初始化LED
//Tim3_Init(); //初始化定时器
SCB->VTOR = FLASH_BASE | 0x10000;//设置偏移量
printf("进入主函数\r\n");
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_6);
GPIO_SetBits(GPIOA, GPIO_Pin_7);
}
}
#include "tim.h"
/**********************************
定时器说明:
TIM3 -- APB1 -- 频率:84MHZ
TIM3 16定时器(65535)
***********************************/
void Tim3_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStructure;
//1、能定时器时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// TIM_TimeBaseInitStruct.TIM_Prescaler = (84-1); //84分频 84MHZ/84 = 1MHZ
// TIM_TimeBaseInitStruct.TIM_Period = (1000-1); //计1000个数,在1MHZ下,用时1ms
// TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
// TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1; //分频因子
// //2、初始化定时器,配置ARR,PSC。
// TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
TIM_TimeBaseInitStruct.TIM_Prescaler = (8400-1); //8400分频 84MHZ/8400 = 10000HZ(1秒可数1000个数)
TIM_TimeBaseInitStruct.TIM_Period = (10000-1); //计10000个数,在10000HZ下,用时1s
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1; //分频因子
//2、初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //中断通道在stm32f4xx.h文件中查找
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//通道使能
//3、启定时器中断,配置NVIC。
NVIC_Init(&NVIC_InitStructure);
//4、设置 TIM3_DIER 允许更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
//5、使能定时器。
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
//判断标志位是否置1
if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET )
{
GPIO_SetBits(GPIOA, GPIO_Pin_6);
GPIO_SetBits(GPIOA, GPIO_Pin_7);
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}