Unite Embed CTR https://bbs.21ic.com/?601464 [收藏] [复制] [RSS] 在生活中寻找自己的快乐!不停地发现自我!

日志

eclipse向导建立的STM32工程中使用中断

已有 734 次阅读2017-10-25 18:06 |个人分类:网络杂谈|系统分类:嵌入式系统| eclipse, stm32, Interrupts

使用eclipse向导建立的工程,已经没有*.s启动文件了,它的启动文件是:system\src\newlib\_startup.c
中断向量表则在system\src\cmsis\vectors_stm32f10x.c文件中。因此不同于使用*.s启动文件的方式。
举个例子,如要使用TIM3的update中断,要修改的代码:
1、注释掉vectors_stm32f10x.c中,TIM3_IRQHandler的函数定义
void __attribute__ ((weak, alias ("Default_Handler")))
TIM3_IRQHandler(void);

2、在vectors_stm32f10x.c文件中,它包含了cortexm/ExceptionHandlers.h头文件,因此在include/cortexm/ExceptionHandlers.h头文件中重新定义TIM3_IRQHander函数:
extern void TIM3_IRQHandler(void); //这里的定义,主要还是为了声明,是外部函数

3、在要写中断程序的文件中,实现void TIM3_IRQHandler(void)实体,需要再说明一下,这个文件需要包含ExceptionHandlers.h,这样就能与vectors_stm32f10x.c中的向量表链接起来了。如在main.cpp中实现,则在main.cpp中需要做的事情:
1、#include "ExceptionHandlers.h"
2、初始化TIM3及中断
        PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = 800;
        TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        TIM_ARRPreloadConfig(TIM3, ENABLE);

        /* TIM3 enable counter */
        TIM_Cmd(TIM3, ENABLE);

        TIM_ClearFlag(TIM3,TIM_FLAG_Update);
        TIM_ITConfig(TIM3 , TIM_IT_Update , ENABLE);
        NVIC_Configuration();

3、实现void TIM3_IRQHandler(void)代码功能
void TIM3_IRQHandler(void)
{

        TIM_ClearFlag(TIM3,TIM_FLAG_Update); //在中断中,必需清除中断标志,否则会重复中断,将CPU资源占用光,使其它程序无法运行

        if(iostate == 0)
        {
                iostate =1;
                GPIOB->BSRR = GPIO_BSRR_BS2 | GPIO_BSRR_BS0;
        }
        else
        {
                iostate =0;
                GPIOB->BSRR = GPIO_BSRR_BR2 | GPIO_BSRR_BR0;
        }
}

如果不使用工程建立的向导建工程,那么向量表在*.s文件中,如果在KEIL环境下,直接定义中断向量表相同名字的函数即可链接起来,但是在eclipse环境下,本应该也是这样,但现在还没成功,也许方法不对。
还在测试找问题中,待成功后,接着完成这个日志。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)