为什么ADXL345加速度传感器活动中断无法进中断

2019-07-21 07:44发布

[mw_shl_code=c,true]u8 ADXL345_Init(void) { IIC_Init(); //初始化IIC总线 if(ADXL345_RD_Reg(DEVICE_ID)==0XE5) //读取器件ID { ADXL345_WR_Reg(DATA_FORMAT,0X2B); //低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 ADXL345_WR_Reg(BW_RATE,0x0A); //数据输出速度为100Hz ADXL345_WR_Reg(POWER_CTL,0x28); //链接使能,测量模式 /* ADXL345_WR_Reg(THRESH_TAP,0x10); //设置冲击阈值 1g ADXL345_WR_Reg(DUR,0xFF); //时间范围 ADXL345_WR_Reg(Latent,0x00); //禁止双击功能 ADXL345_WR_Reg(TAP_AXES,0x01); //使能Z轴敲击 ADXL345_WR_Reg(INT_ENABLE,0x40); //使用单次冲击中断 ADXL345_WR_Reg(INT_MAP,0x00); //中断映射到INT1 */ ADXL345_WR_Reg(THRESH_ACK,0x10); // 设置活动阈值 1g ADXL345_WR_Reg(ACT_INACT_CTL,0x10); // 使能活动Z轴直流耦合 ADXL345_WR_Reg(INT_MAP,0xEF); //中断映射到INT1 ADXL345_WR_Reg(INT_ENABLE,0x10); //使用活动中断 ADXL345_WR_Reg(OFSX,0x00); ADXL345_WR_Reg(OFSY,0x00); ADXL345_WR_Reg(OFSZ,0x00); return 0; } return 1; } void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//使能PORTF时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PF11 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入 GPIO_Init(GPIOF, &GPIO_InitStructure); KEY_Init(); // 按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟 GPIO_EXTILineConfig(GPIO_PortSourceGPIOF,GPIO_PinSource11); EXTI_InitStructure.EXTI_Line=EXTI_Line11; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); } //外部中断0服务程序 void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line11)==SET)//是11线的中断 { LED1=!LED1; LCD_ShowString(60,290,200,16,16,"ZhongDuan"); } EXTI_ClearITPendingBit(EXTI_Line11); } [/mw_shl_code] 在战舰开发版基础上改的活动中断,为什么触发不了呢?是不是ADXL345初始化哪里有什么问题?球大神讲解下。这个问题网上很多人都在问,一直没人解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
正点原子
1楼-- · 2019-07-21 09:57
你先测试下ADXL345的中断引脚有没有输出中断信号?
名侦探
2楼-- · 2019-07-21 14:33
回复【2楼】正点原子:
---------------------------------
我用JTAG看了下,没有输出中断源,,检测了STM32的外部中断没有问题,肯定是初始化配置的问题。不知道初始化那里哪里没有配置对???
正点原子
3楼-- · 2019-07-21 14:49
 精彩回答 2  元偷偷看……
名侦探
4楼-- · 2019-07-21 15:32
回复【4楼】正点原子:
---------------------------------
有波形,现在能进中断了。不过,我把阈值设置成5g,只要给一个冲击还没有到5g,也能进中断,即使很小的冲击都能进中断,不知道这是怎么回事,阈值完全失效了?
正点原子
5楼-- · 2019-07-21 17:04
回复【5楼】名侦探:
---------------------------------
这就得慢慢查配置了,呵呵
名侦探
6楼-- · 2019-07-21 19:49
回复【6楼】正点原子:
---------------------------------
原子哥,也许我可能已经调出来了?我在中断中读取一次加速度值,这个加速度值偏小,是不是因为冲击的时候是瞬间发生的,近中段读数据的时候已经错过了最大值。会不会是这个原因呢?
还有,战舰开发板和桌子是直接接触碰撞,刚性碰撞,所以产生的加速度值比我想象的要大很多。
上面两个解释你觉得有没有道理呢?请原子哥明示。。。。。。。

一周热门 更多>