[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初始化哪里有什么问题?球大神讲解下。这个问题网上很多人都在问,一直没人解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我用JTAG看了下,没有输出中断源,,检测了STM32的外部中断没有问题,肯定是初始化配置的问题。不知道初始化那里哪里没有配置对???
---------------------------------
有波形,现在能进中断了。不过,我把阈值设置成5g,只要给一个冲击还没有到5g,也能进中断,即使很小的冲击都能进中断,不知道这是怎么回事,阈值完全失效了?
---------------------------------
这就得慢慢查配置了,呵呵
---------------------------------
原子哥,也许我可能已经调出来了?我在中断中读取一次加速度值,这个加速度值偏小,是不是因为冲击的时候是瞬间发生的,近中段读数据的时候已经错过了最大值。会不会是这个原因呢?
还有,战舰开发板和桌子是直接接触碰撞,刚性碰撞,所以产生的加速度值比我想象的要大很多。
上面两个解释你觉得有没有道理呢?请原子哥明示。。。。。。。
一周热门 更多>