- A+
项目上要用到LIS3DH的int中断管脚去唤醒MCU,从而达到MCU低功耗的目的,研究了几天,今天终于成功的用ST的官方驱动产生了“久违”的中断信号,心里确实是爽的一匹。
官方发布的文件,号称是写了有关于LIS3DH传感器的例程,但是仔细一看,仅仅只是配置中断阈值,中断模式,然而,当我按照步骤移植到STM32F103上的时候,发现INT1管脚怎么也出不了中断信号,检查了N久,都没发现问题,心里想,是不是传感器有问题,顿时,心里觉得有无数个大妈在跳广场舞。但是不能放弃,只能继续找原因。
问度娘,看到一篇名为“LIS3DH在睡眠模式唤醒产生中断的例程”的帖子,链接为:http://bbs.eeworld.com.cn/thread-524483-1-1.html,发现是裸操寄存器来完成的,心里想,还能有这种操作?为啥不调用官方的驱动程序?没多想,直接把代码贴到工程上调试一番,果然INT1管脚是出现了中断信号的(上升沿中断),证明传感器没有问题。
我也用此种方法读出我工程中的寄存器的值,最后一对比,发现了问题,废话不多BB,多说无益,直接上解决过程。
调用官方库函数产生中断的初始化步骤如图,函数的详细功能就不详细说明,看图就知道功能。
第一个初始化:
第二个初始化:
值得说明有几点:
1. LIS3DH_SetInt1Pin函数不能像官方那样库函数调用,应该:LIS3DH_SetInt1Pin(LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE),多加参数产生不了中断,而且INT1中断管脚是高电平,这种是不正常的;
2. LIS3DH_SetInt1Threshold函数的参数,如果因为阈值设置过大,产生不了中断,因为模拟的加速度值有限;
3. LIS3DH_SetInt1Duration函数的参数,不能设置过大,否则也产生不了中断,初步调试,暂时设置0或者是1比较靠谱;
按照上面的方法,就产生了中断信号。
如下是打印出来的调试信息:
经验教训:
1. 不能一味的相信官方给的驱动例程,发现问题,要详细的读芯片的资料;
2. 不能蛮干,多问度娘,尽管度娘的解决方案可能不是最好的,但至少能提供一种思路供参考;
3. 多单步调试,要善于用print打出调试信息。
2019年10月21日 下午1:50 沙发
能分享一下驱动程序吗
2019年10月25日 下午9:56 1层
@等风来
发我你的联系方式。
2021年1月19日 下午2:24 板凳
老哥功耗问题有解决吗?958731351 qq有问题咨询下
2021年1月24日 上午11:23 1层
@阿斯达是
功耗的问题看你是解决stm的问题还是传感器的问题?