请请求帮助。正在尝试使用STM32F1 syst_tick中断。我使用的是Atolic truestudio 9.3.0。
我有一个c++文件(tasks.cpp(,我在这个文件中声明了中断处理程序,并希望它能覆盖默认处理程序,因为默认处理程序在启动文件中有一个属性.weak。
但有趣的是,当我编译时,我得到了错误:"SysTick_Handler"的多重定义;我是这样声明的。
extern "C"void SysTick_Handler(void)
{
timeElapsed++;
}
TIM1、2、3、4的其他中断处理程序在同一个中声明文件,它们工作正常,但syst_tick不正常。问题是,为什么?
对于我之前发布的问题,后来对我有效的是编辑默认文件stm32103f10xx_it.c
。
在sysTick
处理程序上,我添加了:
void __attribute__((weak))SysTick_Handler( )
{
}
现在,在我的C++项目中的任何地方,我都可以这样实现SysTick
处理程序:
extern "C" {
void SysTick_Handler( )
{
}
};
现在,这肯定会在编译时覆盖默认的处理程序。
注意:
- 此问题仅在默认中断处理程序中常见
- 我只在TrueStudio IDE中进行了测试;我不确定CUBE IDE中的行为
SysTick_Handler
在STM文件中定义。如果你使用HAL,不要自己定义。如果您想获得计数器值,只需使用HAL函数HAL_GetTick();
,如果您想在处理程序中调试一些代码,请定义回调函数。该定义位于项目中的..._it.c
文件中。