本帖最后由 littleshrimp 于 2019-9-27 10:07 编辑
LPS22HH除了可以实时读取气压数据外还可以通过内部的阈值中断来减少CPU的负荷
阈值中断可以是正、负或正负都触发
设定好相应的参数后当气压达到指定值时就会通过INT引脚产生中断
单片可通过读取INT_SOURCE (24h)寄存器来判断中断类型
具体如下:
参考LPS22HH的STM32L452工程,在原有的基础上做出相应修改
https://bbs.eeworld.com.cn/thread-1091709-1-1.html
首先确定IKS01S3中的LPS22HH的INT引脚连接到NUCLEO-L452的哪个引脚
看原理图LPS22HH_INT引脚通过电平转换器输出LPS22HH_INTO,然后连接到CN9的7脚
与之相对应的是NUCLEO-L452的D6对应单片机的PB10脚
打开工程中的stm32l452 lps22hh.ioc,找到PB10引脚,将其设置为GPIO_EXTI10,为了方便可以User Label设置为LPS22HH_INT
在NVIC模块中将 EXTI line[15:10]interrupts使能
生成代码并打开工程
为了测试方便手里的环境不容易产生负压,所以阈值设置为大于指定阈值时产生中断
这样可以将开发板放在密闭的塑料袋里,通过给塑料袋施压来达到增加传感器环境压力的目的
打开LPS22HH的数据手册,找到寄存器介绍,找到INTERRUPT_CFG
可以看到第0位为PHE,为1时使能高压中断
再找到THS_P_x,THS_P_L是低压中断,THS_P_H是高压中断,对应的数值乘16就是对应的压力
再找到CTRL_REG3,INT_S是决定将哪个中断源连接到芯片的INT引脚
如果是高压报警需要将INT_S设置为1
INT_SOURCE (24h)是只读寄存器,在检测到中断后可以通过读取INT_SOURCE (24h)的数据来判断中断类型
了解寄存器的设置后开始改代码
首先是设置中断源,设置高压阈值,使能高压中断
再设置单片机的中断回调函数,判断如果是LPS22HH_INT引脚则将lps22hh_int_flag置1
中主循环中检测lps22hh_int_flag状态,如果为1时清标志,再读取INT_SOURCE (24h)寄存器,判断PH是否为1
为1时说明为高压中断,发送中断类型到电脑
读取当前气压和温度,并通过串口发送到电脑
按下塑料袋后的效果
视频:
https://training.eeworld.com.cn/course/3962/learn#lesson/22057
|