0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(4)----中斷獲取信號(hào)

嵌入式單片機(jī)MCU開(kāi)發(fā) ? 來(lái)源:嵌入式單片機(jī)MCU開(kāi)發(fā) ? 作者:嵌入式單片機(jī)MCU開(kāi) ? 2023-12-01 15:31 ? 次閱讀

概述

HS34PF80的數(shù)據(jù)準(zhǔn)備信號(hào)提供了一種機(jī)制,允許設(shè)備在新的測(cè)量數(shù)據(jù)可讀取時(shí)通知系統(tǒng),并觸發(fā)同步操作,通過(guò)正確配置相關(guān)寄存器,可以確保系統(tǒng)及時(shí)捕獲和處理來(lái)自設(shè)備的新數(shù)據(jù),從而提高整體性能和響應(yīng)能力。
檢測(cè)人體的存在和動(dòng)作,并通過(guò)特定的通信接口發(fā)送檢測(cè)結(jié)果。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請(qǐng):615061293 。
在這里插入圖片描述

樣品申請(qǐng)

https://www.wjx.top/vm/OhcKxJk.aspx#

視頻教程

https://www.bilibili.com/video/BV1NF41117S6/

參考Demo

https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/sths34pf80_STdC/examples/sths34pf80_tmos_data_polling.c

完整代碼下載

https://download.csdn.net/download/qq_24312945/88219177

參考程序中斷

在這里插入圖片描述

中斷生成

STHS34PF80具有一個(gè)可配置的內(nèi)置中斷生成塊,允許基于溫度數(shù)據(jù)樣本和嵌入式智能數(shù)字算法的輸出標(biāo)志生成中斷事件。
STHS34PF80提供了一個(gè)專門的INT引腳,用于通知數(shù)據(jù)是否準(zhǔn)備好。您可以通過(guò)配置相關(guān)寄存器,將數(shù)據(jù)準(zhǔn)備好的信號(hào)(DRDY信號(hào))路由到這個(gè)INT引腳。當(dāng)新的測(cè)量數(shù)據(jù)可讀取時(shí),這個(gè)引腳會(huì)被觸發(fā),從而允許系統(tǒng)知道數(shù)據(jù)已經(jīng)準(zhǔn)備好并可供進(jìn)一步的處理和讀取。
在這里插入圖片描述

設(shè)置中斷

設(shè)置中斷可以通過(guò)CTRL3 (22h)寄存器來(lái)配置。
這個(gè)寄存器為系統(tǒng)提供了有關(guān)設(shè)備當(dāng)前狀態(tài)的關(guān)鍵信息,可以用于驅(qū)動(dòng)其他邏輯或觸發(fā)相應(yīng)的操作,如中斷服務(wù)例程。例如,PRES_FLAG可用于確定是否有人進(jìn)入了一個(gè)區(qū)域,MOT_FLAG可以用于檢測(cè)人體是否運(yùn)動(dòng),TAMB_SHOCK_FLAG可能用于環(huán)境監(jiān)控系統(tǒng)以捕捉突然的溫度變化。
在這里插入圖片描述

通過(guò)查看FUNC_STATUS (25h)可以得知,PRES_FLAG為存在檢測(cè),MOT_FLAG為運(yùn)動(dòng)檢測(cè),TAMB_SHOCK_FLAG為環(huán)境溫度沖擊檢測(cè)標(biāo)志。
在這里插入圖片描述

開(kāi)啟存在檢測(cè)中斷輸出

sths34pf80_tmos_int_or_set 的主要目的是配置STHS34PF80設(shè)備的中斷輸出。它是用于設(shè)置和管理中斷標(biāo)志,其中STHS34PF80_TMOS_INT_PRESENCE為0x4,就是使能INT_MSK2為1,開(kāi)啟PRES_FLAG存在檢測(cè)。

/* Set interrupt */
  sths34pf80_tmos_int_or_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_PRESENCE);

具體操作函數(shù)如下所示。

/**
  * @brief  Selects interrupts output.[set]
  *
  * @param  ctx      read / write interface definitions
  * @param  val      TMOS_INT_NONE, TMOS_INT_TSHOCK, TMOS_INT_MOTION, TMOS_INT_TSHOCK_MOTION, TMOS_INT_PRESENCE, TMOS_INT_TSHOCK_PRESENCE, TMOS_INT_MOTION_PRESENCE, TMOS_INT_ALL,
  * @retval          interface status (MANDATORY: return 0 - > no Error)
  *
  */
uint8_t sths34pf80_tmos_int_or_set(uint8_t add, sths34pf80_tmos_int_or_t val)
{
  sths34pf80_ctrl3_t ctrl3;
  int32_t ret;

  ret = sths34pf80_read_reg(add, STHS34PF80_CTRL3, (uint8_t *)&ctrl3, 1);

  if (ret == HAL_OK)
  {
    ctrl3.int_msk = ((uint8_t)val & 0x7U);
    ret = sths34pf80_write_reg(add, STHS34PF80_CTRL3, (uint8_t *)&ctrl3, 1);
  }

  return ret;
}

配置中斷管腳

通過(guò)配置CTRL3 (22h)寄存器的IEN[1:0] 可以設(shè)置輸出模式。
IEN[1:0]位在CTRL3寄存器中,它定義了應(yīng)該將哪種信號(hào)路由到INT管腳(即中斷輸出):
00:INT管腳處于高阻態(tài)。
01:將DRDY(數(shù)據(jù)已準(zhǔn)備好的信號(hào))路由到INT管腳。
10:將INT_OR信號(hào)路由到INT管腳。
這里通過(guò)將CTRL3(22h)寄存器的IEN[1:0]位范圍設(shè)置為10,可以將STATUS(23h)寄存器的DRDY位的值驅(qū)動(dòng)到INT引腳,操作如下所示。

sths34pf80_tmos_route_int_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_OR);

具體的操作函數(shù)如下所示。這個(gè)函數(shù)基本上對(duì)應(yīng)之前提到的IEN[1:0]位的功能,它允許用戶選擇要路由到中斷輸出管腳的特定中斷信號(hào)。

/**
  * @defgroup Interrupt PINs
  * @brief    Interrupt PINs
  * @{/
  *
  */
/**
  * @brief  Selects interrupts to be routed.[set]
  *
  * @param  ctx      read / write interface definitions
  * @param  val      TMOS_INT_HIZ, TMOS_INT_DRDY, TMOS_INT_OR,
  * @retval          interface status (MANDATORY: return 0 - > no Error)
  *
  */
uint8_t sths34pf80_tmos_route_int_set(uint8_t add,  sths34pf80_tmos_route_int_t val)
{
  sths34pf80_ctrl3_t ctrl3;
  int32_t ret;

  ret = sths34pf80_read_reg(add, STHS34PF80_CTRL3, (uint8_t *)&ctrl3, 1);

  if (ret == HAL_OK)
  {
    ctrl3.ien = ((uint8_t)val & 0x3U);
    if (val == STHS34PF80_TMOS_INT_OR) {
      ctrl3.int_latched = 0; /* guarantee that latched is zero in INT_OR case */
    }
    ret = sths34pf80_write_reg(add, STHS34PF80_CTRL3, (uint8_t *)&ctrl3, 1);
  }

  return ret;
}

主程序

初始化如下。

/* USER CODE BEGIN 2 */
 sths34pf80_lpf_bandwidth_t lpf_m, lpf_p, lpf_p_m, lpf_a_t;	
  sths34pf80_tmos_drdy_status_t status;	
  sths34pf80_tmos_func_status_t func_status;	
	
	
	
	
	HAL_Delay(200);	
	printf("123");
	uint8_t STHS34PF80_ID =STHS34PF80_getChipID(STHS34PF80_ADDRESS);
	printf("STHS34PF80_ID=0x%xn",STHS34PF80_ID);	
	if (STHS34PF80_ID != 0xD3)
    while(1);
/* Set averages (AVG_TAMB = 8, AVG_TMOS = 32) */
  sths34pf80_avg_tobject_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_TMOS_32);
  sths34pf80_avg_tambient_num_set(STHS34PF80_ADDRESS, STHS34PF80_AVG_T_8);

  /* read filters */
  sths34pf80_lpf_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_m);
  sths34pf80_lpf_p_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p);
  sths34pf80_lpf_p_m_bandwidth_get(STHS34PF80_ADDRESS, &lpf_p_m);
  sths34pf80_lpf_a_t_bandwidth_get(STHS34PF80_ADDRESS, &lpf_a_t);

printf("lpf_m: %02d, lpf_p: %02d, lpf_p_m: %02d, lpf_a_t: %02drn", lpf_m, lpf_p, lpf_p_m, lpf_a_t);
	
	  /* Set BDU */
  sths34pf80_block_data_update_set(STHS34PF80_ADDRESS, 1);
	sths34pf80_tmos_route_int_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_OR);

	
	sths34pf80_presence_threshold_set(STHS34PF80_ADDRESS, 20);	//設(shè)置存在閾值。
  sths34pf80_presence_hysteresis_set(STHS34PF80_ADDRESS, 2);//“存在滯后”(Presence Hysteresis)的函數(shù)
  sths34pf80_motion_threshold_set(STHS34PF80_ADDRESS, 30);//設(shè)置動(dòng)作閾值
  sths34pf80_motion_hysteresis_set(STHS34PF80_ADDRESS, 3);	////動(dòng)作滯后”(Motion Hysteresis)的函數(shù)
	
  /* Set interrupt */
  sths34pf80_tmos_int_or_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_PRESENCE);
	sths34pf80_tmos_route_int_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_OR);
	
	
  /* Set ODR */
  sths34pf80_tmos_odr_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_ODR_AT_30Hz);

    int32_t cnt = 0;
  /* USER CODE END 2 */

main函數(shù)如下所示。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
//    sths34pf80_tmos_drdy_status_get(STHS34PF80_ADDRESS, &status);
//    if (status.drdy)
//    {
//      sths34pf80_tmos_func_status_get(STHS34PF80_ADDRESS, &func_status);
//			printf("-- >環(huán)境溫度沖擊檢測(cè)標(biāo)志位 %d - 存在檢測(cè)標(biāo)志位 %d - 運(yùn)動(dòng)檢測(cè)標(biāo)志位 %drn",func_status.tamb_shock_flag, func_status.pres_flag, func_status.mot_flag);
//   }
		
		
		printf("PA7=%d",HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_7));
		
		
    sths34pf80_tmos_func_status_t func_status;
    uint8_t motion;
    uint8_t presence;		
    /* handle event in a "thread" alike code */
		if(HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_7))
		{
      motion = 0;
      presence = 0;

      do {
        sths34pf80_tmos_func_status_get(STHS34PF80_ADDRESS, &func_status);

        if (func_status.pres_flag != presence)
        {
          presence = func_status.pres_flag;

          if (presence) {
						printf("Start of Presencern");

          } else {
						printf("End of Presencern");						

          }
        }

        if (func_status.mot_flag != motion)
        {
          motion = func_status.mot_flag;

          if (motion) {
						printf("Motion Detected!rn");						
						
          }
        }
      } while (func_status.pres_flag);
    		
		
		
		}
		
		
			HAL_Delay(1000);		
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

測(cè)試結(jié)果

在未有人的情況下。

在這里插入圖片描述

在人體純?cè)谇闆r下。
在這里插入圖片描述
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51097

    瀏覽量

    753527
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2706

    瀏覽量

    47468
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    898

    瀏覽量

    41495
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CubeMx外部中斷基本使用方法

    第一步:現(xiàn)在STM32CubeMx 中配置所需要IO口外部中斷模式。
    發(fā)表于 05-31 15:32 ?4212次閱讀
    <b class='flag-5'>STM32CubeMx</b>外部<b class='flag-5'>中斷</b>基本使用方法

    基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(1)----獲取ID

    STHS34PF80 是一款非冷卻、工廠校準(zhǔn)的紅外運(yùn)動(dòng)和存在檢測(cè)傳感器,工作波長(zhǎng)在 5 μm 至 20 μm 之間。
    的頭像 發(fā)表于 12-01 15:28 ?8117次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(1)----<b class='flag-5'>獲取</b>ID

    基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(2)----驅(qū)動(dòng)STHS34PF80進(jìn)行人體檢測(cè)

    ASIC 進(jìn)行數(shù)字處理,可以對(duì)其進(jìn)行編程以監(jiān)控運(yùn)動(dòng)、存在或過(guò)熱狀況。 本章主要驅(qū)動(dòng)STHS34PF80,進(jìn)行人體檢測(cè)。
    的頭像 發(fā)表于 12-01 15:29 ?769次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(2)----<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>STHS34PF80</b>進(jìn)行人體檢測(cè)

    基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(3)----修改檢測(cè)閾值

    用于配置和設(shè)置 STHS34PF80 傳感器的一些參數(shù),以便進(jìn)行存在檢測(cè)和運(yùn)動(dòng)檢測(cè)。
    的頭像 發(fā)表于 12-01 15:30 ?702次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(3)----修改檢測(cè)閾值

    基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(5)----配置嵌入式函數(shù)

    STHS34PF80傳感器項(xiàng)目種修改 Arduino 腳本,重新移植到STM32的MCU中。
    的頭像 發(fā)表于 12-01 15:33 ?780次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(5)----配置嵌入式函數(shù)

    基于STM32CUBEMX驅(qū)動(dòng)TMOS模塊STHS34PF80(6)----獲取狀態(tài)數(shù)據(jù)

    STHS34PF80傳感器項(xiàng)目種修改 Arduino 腳本,重新移植到STM32的MCU中。 該項(xiàng)目基于STHS34PF80 IR溫度傳感器,能夠檢測(cè)環(huán)境和物體溫度,并且在最大4米范
    的頭像 發(fā)表于 12-01 15:39 ?632次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(6)----<b class='flag-5'>獲取</b>狀態(tài)數(shù)據(jù)

    STHS34PF80高靈敏度紅外感應(yīng)器(2)----InfraredPD存在感應(yīng)檢測(cè)

    InfraredPD 主要作用是通過(guò)與 STHS34PF80 紅外傳感器配合,提供對(duì)存在感應(yīng)和運(yùn)動(dòng)檢測(cè)的支持,同時(shí)對(duì)傳感器獲取的物體溫度數(shù)據(jù)進(jìn)行環(huán)境溫度變化補(bǔ)償。InfraredPD庫(kù)通過(guò)
    的頭像 發(fā)表于 10-14 11:10 ?981次閱讀
    <b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(2)----InfraredPD存在感應(yīng)檢測(cè)

    通過(guò)STEVAL-MKI109V3在unico上識(shí)別不到STHS34PF80是為什么?怎么處理?

    TMOS測(cè)試:通過(guò)STEVAL-MKI109V3在unico上識(shí)別不到STHS34PF80。
    發(fā)表于 03-26 08:31

    使用STM32CubeMX實(shí)現(xiàn)中斷模式下的串口收發(fā)

    cube是ARM發(fā)布的針對(duì)于STM32的一個(gè)底層初始化的軟件,使用STM32CubeMX實(shí)現(xiàn)中斷模式下的串口收發(fā)
    發(fā)表于 02-25 14:12 ?2次下載

    使用stm32cubemx的usb-host-cdc庫(kù)驅(qū)動(dòng)EC20模塊

    使用stm32cubemx的usb-host-cdc庫(kù)驅(qū)動(dòng)EC20模塊開(kāi)發(fā)環(huán)境:實(shí)現(xiàn)功能:開(kāi)始1、使用STM32CubeMX配置工程,生成基礎(chǔ)代碼2、修改
    發(fā)表于 12-28 19:48 ?43次下載
    使用<b class='flag-5'>stm32cubemx</b>的usb-host-cdc庫(kù)<b class='flag-5'>驅(qū)動(dòng)</b>EC20<b class='flag-5'>模塊</b>

    意法半導(dǎo)發(fā)布了新型人體存在和移動(dòng)檢測(cè)芯片:STHS34PF80

    近期,意法半導(dǎo)發(fā)布了新型人體存在和移動(dòng)檢測(cè)芯片:STHS34PF80,它是一款帶有微加工熱敏晶體管(TMOS)的高集成度、超低功耗的紅外(IR)傳感器,可取代傳統(tǒng)的被動(dòng)紅外(PIR)傳感技術(shù),提升安保監(jiān)視系統(tǒng)、家庭自動(dòng)化設(shè)備和物聯(lián)網(wǎng)設(shè)備等場(chǎng)景的的監(jiān)測(cè)性能。
    的頭像 發(fā)表于 07-30 09:47 ?1730次閱讀

    ST TMOS熱敏紅外傳感器: 精準(zhǔn)檢測(cè)人員存在和移動(dòng)

    意法半導(dǎo)發(fā)布新型人體存在和移動(dòng)檢測(cè)芯片。STHS34PF80是一款帶有微加工熱敏晶體管(TMOS)的高集成度、超低功耗的紅外(IR)傳感器,可取代傳統(tǒng)的被動(dòng)紅外(PIR)傳感技術(shù),提升安保監(jiān)視系統(tǒng)、家庭自動(dòng)化設(shè)備和物聯(lián)網(wǎng)設(shè)備等場(chǎng)景的的監(jiān)測(cè)性能。
    發(fā)表于 08-08 14:48 ?680次閱讀

    STHS34PF80人體存在傳感器(1)----獲取人體存在狀態(tài)

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測(cè)存在感和運(yùn)動(dòng)。其主要特點(diǎn)是高靈敏度,能在沒(méi)有透鏡的情況下探測(cè)到4米遠(yuǎn)的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發(fā)表于 01-09 15:51 ?622次閱讀
    <b class='flag-5'>STHS34PF80</b>人體存在傳感器(1)----<b class='flag-5'>獲取</b>人體存在狀態(tài)

    基于ST 紅外傳感器STHS34PF80 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案

    STHS34PF80 是一款紅外線感測(cè)器,可用于偵測(cè)靜止和移動(dòng)物體的存及超溫條件。它采用獨(dú)特的 TMOS 技術(shù)測(cè)量物體的紅外線輻射,當(dāng)物體位于視野內(nèi)時(shí)檢測(cè)其存在或移動(dòng)。
    的頭像 發(fā)表于 01-30 14:16 ?971次閱讀
    基于ST 紅外傳感器<b class='flag-5'>STHS34PF80</b> 搭配菲涅爾透鏡針對(duì)投影機(jī)應(yīng)用方案

    STHS34PF80高靈敏度紅外感應(yīng)器(1)----獲取人體存在狀態(tài)

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測(cè)存在感和運(yùn)動(dòng)。其主要特點(diǎn)是高靈敏度,能在沒(méi)有透鏡的情況下探測(cè)到4米遠(yuǎn)的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發(fā)表于 10-14 10:36 ?390次閱讀
    <b class='flag-5'>STHS34PF80</b>高靈敏度紅外感應(yīng)器(1)----<b class='flag-5'>獲取</b>人體存在狀態(tài)