终于用ST官方驱动产生了LIS3DH的中断信号

  • 4
  • 8,562 views
  • A+
所属分类:技术杂记

       项目上要用到LIS3DH的int中断管脚去唤醒MCU,从而达到MCU低功耗的目的,研究了几天,今天终于成功的用ST的官方驱动产生了“久违”的中断信号,心里确实是爽的一匹。

      官方发布的文件,号称是写了有关于LIS3DH传感器的例程,但是仔细一看,仅仅只是配置中断阈值,中断模式,然而,当我按照步骤移植到STM32F103上的时候,发现INT1管脚怎么也出不了中断信号,检查了N久,都没发现问题,心里想,是不是传感器有问题,顿时,心里觉得有无数个大妈在跳广场舞。但是不能放弃,只能继续找原因。

      问度娘,看到一篇名为“LIS3DH在睡眠模式唤醒产生中断的例程”的帖子,链接为:http://bbs.eeworld.com.cn/thread-524483-1-1.html,发现是裸操寄存器来完成的,心里想,还能有这种操作?为啥不调用官方的驱动程序?没多想,直接把代码贴到工程上调试一番,果然INT1管脚是出现了中断信号的(上升沿中断),证明传感器没有问题。

      我也用此种方法读出我工程中的寄存器的值,最后一对比,发现了问题,废话不多BB,多说无益,直接上解决过程。

      调用官方库函数产生中断的初始化步骤如图,函数的详细功能就不详细说明,看图就知道功能。

      第一个初始化:            lis3dh_int_1

      第二个初始化:               lis3dh_int_2

      值得说明有几点:

      1. LIS3DH_SetInt1Pin函数不能像官方那样库函数调用,应该:LIS3DH_SetInt1Pin(LIS3DH_I1_INT1_ON_PIN_INT1_ENABLE),多加参数产生不了中断,而且INT1中断管脚是高电平,这种是不正常的;

      2. LIS3DH_SetInt1Threshold函数的参数,如果因为阈值设置过大,产生不了中断,因为模拟的加速度值有限;

      3. LIS3DH_SetInt1Duration函数的参数,不能设置过大,否则也产生不了中断,初步调试,暂时设置0或者是1比较靠谱;

      按照上面的方法,就产生了中断信号。

              lis3dh_int_4       

      如下是打印出来的调试信息:

      lis3dh_int_3

      经验教训:

      1. 不能一味的相信官方给的驱动例程,发现问题,要详细的读芯片的资料;

      2. 不能蛮干,多问度娘,尽管度娘的解决方案可能不是最好的,但至少能提供一种思路供参考;

      3. 多单步调试,要善于用print打出调试信息。

      

      

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  2   博主  2

    • 等风来 等风来 0

      能分享一下驱动程序吗

        • blueswans blueswans Admin

          @等风来

          发我你的联系方式。

        • 阿斯达是 阿斯达是 0

          老哥功耗问题有解决吗?958731351  qq有问题咨询下

            • blueswans blueswans Admin

              @阿斯达是

              功耗的问题看你是解决stm的问题还是传感器的问题?