STM32的C++类成员函数做中断函数的三个主要步骤
1.在类中声明ISP() class SystemObj { public: //................ //类成员函数做中断函数 static void SysTickHandler(void);//必须声明为静态函数!!! public: volatile unsigned int RamTest; union { volatile unsigned char WorkFlag; struct { unsigned char Watchdog: 1;//允许喂狗 unsigned char SysTickFlag: 1;//节拍中断 unsigned char MainLoopFlag: 1;//主循环运行 unsigned char MainWatchdog: 1;//主循环喂狗 }; }; }; 2.构造类成员函数 //节拍中断服务程序(类成员函数做中断函数) //static//此处不能加static!!! //类成员变量必须指明实际的类!!!(System.SysTickFlag 不能写成SysTickFlag ) void SystemObj::SysTickHandler(void) { Keyboard.Exec();//"零耗时键盘"消抖及运行命令 System.SysTickFlag = true;//通知主循环节拍中断正常工作 } 3.在stm32f10x_vector.c内的中断向量表内填写需要中断的类成员函数地址 const __root intvec_elem __vector_table[] = { { .__ptr = __sfe( "CSTACK" ) }, __program_start, NMIException, HardFaultException, MemManageException, BusFaultException, UsageFaultException, 0, 0, 0, 0, /* Reserved */ SVCHandler, DebugMonitor, 0, /* Reserved */ PendSVC, // SysTickHandler, &SystemObj::SysTickHandler, //不能用下列写法 // &System.SysTickHandler, WWDG_IRQHandler, PVD_IRQHandler, //.......................... }; 注意: &SystemObj::SysTickHandler替换了原先的SysTickHandler 即饶过了stm32f10x_it.c内的空函数SysTickHandler() 用SystemObj::SysTickHandler()替代为新的节拍中断函数