stm32的启动文件--startup_stm32f10x_hd.s
2016-12-12 11:32
351 查看
在学习stm32 定时器中断时,发现我写的程序进入不了中断服务程序,而且我也没找到定时器服务程序的注册入口,上网查了一下,大家都使用的都是下面这个函数:void TIM3_IRQHandler(void),那为什么其他人的中断程序可以执行,而我的却执行不了呢。
经过请教得知,我的工程中没有包含该一个叫做startup_stm32f10x_hd.s的文件,而我所谓的中断服务程序的注册入口就是包含在这里。startup_stm32f10x_hd.s是用汇编语言编写的STM32处理器的初始化程序,它规定了系统的堆栈大小等系统信息,也包含了一个向量表,这个向量表中对所有的中断入口函数都进行了分配,如TIM3的中断入口是:
只有包含了startup_stm32f10x_hd.s文件,系统才可以知道我们所需要的中断处理函数是哪一个,进而可以进行调用。
如果你想使用其他的函数名作为中断处理函数,需要在以上几处同时改变函数名才可以,当然为了改函数名而改函数名是没有必要的。
由于我之前搭建工程的时候不认真缺了这个文件,导致中断调不通,走了弯路。
我的TIM3中断的相关代码如下:
经过请教得知,我的工程中没有包含该一个叫做startup_stm32f10x_hd.s的文件,而我所谓的中断服务程序的注册入口就是包含在这里。startup_stm32f10x_hd.s是用汇编语言编写的STM32处理器的初始化程序,它规定了系统的堆栈大小等系统信息,也包含了一个向量表,这个向量表中对所有的中断入口函数都进行了分配,如TIM3的中断入口是:
…………………………………………
DCD TIM3_IRQHandler ; TIM3 DCD TIM4_IRQHandler ; TIM4 DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_ER_IRQHandler ; I2C1 Error
……………………………………………
TIM2_IRQHandler B TIM2_IRQHandler PUBWEAK TIM3_IRQHandler SECTION .text:CODE:REORDER(1) TIM3_IRQHandler B TIM3_IRQHandler PUBWEAK TIM4_IRQHandler SECTION .text:CODE:REORDER(1) TIM4_IRQHandler B TIM4_IRQHandler
只有包含了startup_stm32f10x_hd.s文件,系统才可以知道我们所需要的中断处理函数是哪一个,进而可以进行调用。
如果你想使用其他的函数名作为中断处理函数,需要在以上几处同时改变函数名才可以,当然为了改函数名而改函数名是没有必要的。
由于我之前搭建工程的时候不认真缺了这个文件,导致中断调不通,走了弯路。
我的TIM3中断的相关代码如下:
void Do_Timer_Init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_DeInit(TIM3); TIM_Cmd(TIM3, DISABLE); TIM_ClearITPendingBit(TIM3, TIM_IT_Update); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //选择中断线0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级为 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //响应优先级为 0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能 NVIC_Init(&NVIC_InitStructure); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); //将结构体赋初值 TIM_TimeBaseStructure.TIM_Period = 2000*5 - 1; //计数为9999 时产生中断 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_Prescaler = 36000-1; //分配为36000 则时钟变为72MHz / 36000 = 2KHz 结合前面的10000次产生中断得到 5s产生一次中断 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //该元素表示多少次溢出后会产生一次中断,这个中断与每次溢出的中断不冲突 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //中断使能 TIM_Cmd(TIM3,ENABLE); // 计数器使能 } extern int Timer_flag; void TIM3_IRQHandler() { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//检查是不是TIM3中断 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIM3中断待处理位 if(Timer_flag != 1) { Timer_flag = 1; } } }
相关文章推荐
- startup_stm32f10x_hd.s分析--stm32启动文件
- STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数)
- STM32启动文件——startup_stm32f10x_hd.s
- STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例
- STM32启动文件——startup_stm32f10x_hd.s
- STM32启动文件——startup_stm32f10x_hd.s
- STM32启动文件详解——startup_stm32f10x_xx.s
- ST意法半导体官方库启动文件 startup_stm32f10x_hd.s的分析
- stm32笔记:启动代码startup_stm32f10x_hd.s注解
- MDK + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- MDK + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- IAR + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
- STM32F107启动文件分析(startup_stm32f10x_hd.s)
- stm32 启动代码startup_stm32f10x_hd.s注解
- 移植FreeRTOS一定要修改startup_stm32f10x_hd.s的启动文件吗?
- startup_stm32f10x_xx.s 启动代码文件选择
- startup_stm32f10x_xx.s 启动代码文件选择
- startup_stm32f10x_xx.s 启动代码文件选择
- startup_stm32f10x_xx.s 启动代码文件选择
- stm32 StartUp启动代码文件选择