高级会员

- 积分
- 842
- 金钱
- 842
- 注册时间
- 2012-2-8
- 在线时间
- 19 小时
|
不是定时器的问题。而是,我在初始化ADXL345之前会先读ID,如果ID错误则不初始化传感器。 也就是StatusDetec = Acc_init未被执行。所以定时器没有在10次中断后关闭。
最近使用定时器4,发现一个奇怪的问题。我使用定时器4,在程序初始化是读取ADXL345的三轴加速度。取10个值在求平均,作为初始加速度。是中断10次关闭定时器
可是,几乎每两次复位后,就有一次程序异常
程序是这样子的
其中 #define DisabletheTimer TIM4->CR1&=0XFE;//失能定时器
在初始化ADXL345时,有 StatusDetec = Acc_init;
void Status_Init(void) //采样用
{
u8 i;
s16 Acceler_init[3];//当前加速度
static u8 counter = 0;
if(counter<10){
counter++;
Multi_Read(DATAX0,6);
for(i=0;i<3;i++){
Acceler_init = data_reg[2*i+1];
Acceler_init = (Acceler_init<<8)|data_reg[2*i];//单轴加速度
InitialStatus += Acceler_init;//Δ
}
}
else{
for(i=0;i<3;i++){
InitialStatus /= 10;
}
StatusDetec = Start; //初始状态
counter = 0;
DisabletheTimer //关闭定时器4
}
}
void TIM4_IRQHandler(void)//中断服务
{
if(TIM4->SR&0X0001){
  Aout(8) = !PAout(8);
if(StatusDetec == Acc_init){//获取初始坐标
Status_Init();
}
else{
Counter_detec();
}
}
TIM4->SR&=~(1<<0);
}
所谓的异常就是PAout(8)取反次数超过10次后依旧不停的取反。似乎没有停下来的意思 |
|