void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)==SET)
{
g_mode.mode();
}
TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
}
这是一个函数定时访问
void EXTI1_IRQHandler(void)
{
g_exti.exti_flag ++;
g_mode.MODE_data.exti_count = g_exti.exti_flag;
EXTI_ClearITPendingBit(EXTI_Line1);
}
这是一个外部中断 记下访问次数赋给 g_mode.MODE_data.exti_count
void Mode(void)
{
if(g_mode.MODE_data.timer1_flag == 0)
{
g_mode.MODE_data.timer1_flag = 1; //ÅD¶Ï±êÖ¾ÖÃ1
if(g_mode.MODE_data.exti_count--)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_7); //下面是另一个定时器写的定时函数
SoftwareTimers.Register_fun(g_motor.motor_left, 1, 0);
SoftwareTimers.Register_fun(g_camera.camera_on, 5, 0);
SoftwareTimers.Register_fun(g_camera.camera_off, 10, 0);
SoftwareTimers.Register_fun(g_motor.motor_mid, 15, 0);
SoftwareTimers.Register_fun(g_camera.camera_on, 20, 0);
SoftwareTimers.Register_fun(g_camera.camera_off, 25, 0);
SoftwareTimers.Register_fun(g_motor.motor_right, 30, 0);
SoftwareTimers.Register_fun(g_camera.camera_on, 35, 0);
SoftwareTimers.Register_fun(g_camera.camera_off, 40, 0);
SoftwareTimers.Register_fun(g_motor.motor_mid, 45, 0);
SoftwareTimers.Register_fun(g_mode.clear_flag, 46, 0);
}
}
}
void Clear_Flag(void)
{
g_mode.MODE_data.timer1_flag = 0;
}
这是那个定时触发的函数,标志最后清除
#ifndef __EXTI_H
#define __EXTI_H
#include "user_conf.h"
#define pulse_mode_rising 1
#define capture_pulse 1
typedef struct
{
u32 exti_flag;
void(*exti_init)(void);
}Exti_Fun;
void Exti_Init_Fun(void);
extern Exti_Fun g_exti;
#endif
头文件exti.h
#ifndef __MODE_H
#define __MODE_H
#include "user_conf.h"
typedef struct
{
u8 timer1_flag;
u32 exti_count;
}modedata;
typedef struct
{
modedata MODE_data;
void(*mode)(void);
void(*clear_flag)(void);
}Mode_Fun;
void Mode(void);
void Clear_Flag(void);
extern Mode_Fun g_mode;
#endif
头文件 mode.h
现在的BUG是 外部中断来了之后 函数在if(g_mode.MODE_data.exti_count--) 判断不过,实时调试g_mode.MODE_data.exti_count为5为6仍进不去
我如果我把if(g_mode.MODE_data.exti_count--) 去掉
会定时触发
请各位看一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
再回复楼上,f(g_mode.MODE_data.exti_count--) 这写法是可以的,如果 这都不行的话,那程序都不用写了
一周热门 更多>