<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32CUBEMX驅動TMOS模塊STHS34PF80(4)----中斷獲取信號

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2023-12-01 15:31 ? 次閱讀

概述

HS34PF80的數據準備信號提供了一種機制,允許設備在新的測量數據可讀取時通知系統,并觸發同步操作,通過正確配置相關寄存器,可以確保系統及時捕獲和處理來自設備的新數據,從而提高整體性能和響應能力。
檢測人體的存在和動作,并通過特定的通信接口發送檢測結果。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
在這里插入圖片描述

樣品申請

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具有一個可配置的內置中斷生成塊,允許基于溫度數據樣本和嵌入式智能數字算法的輸出標志生成中斷事件。
STHS34PF80提供了一個專門的INT引腳,用于通知數據是否準備好。您可以通過配置相關寄存器,將數據準備好的信號(DRDY信號)路由到這個INT引腳。當新的測量數據可讀取時,這個引腳會被觸發,從而允許系統知道數據已經準備好并可供進一步的處理和讀取。
在這里插入圖片描述

設置中斷

設置中斷可以通過CTRL3 (22h)寄存器來配置。
這個寄存器為系統提供了有關設備當前狀態的關鍵信息,可以用于驅動其他邏輯或觸發相應的操作,如中斷服務例程。例如,PRES_FLAG可用于確定是否有人進入了一個區域,MOT_FLAG可以用于檢測人體是否運動,TAMB_SHOCK_FLAG可能用于環境監控系統以捕捉突然的溫度變化。
在這里插入圖片描述

通過查看FUNC_STATUS (25h)可以得知,PRES_FLAG為存在檢測,MOT_FLAG為運動檢測,TAMB_SHOCK_FLAG為環境溫度沖擊檢測標志。
在這里插入圖片描述

開啟存在檢測中斷輸出

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

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

具體操作函數如下所示。

/**
  * @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;
}

配置中斷管腳

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

sths34pf80_tmos_route_int_set(STHS34PF80_ADDRESS, STHS34PF80_TMOS_INT_OR);

具體的操作函數如下所示。這個函數基本上對應之前提到的IEN[1:0]位的功能,它允許用戶選擇要路由到中斷輸出管腳的特定中斷信號。

/**
  * @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);	//設置存在閾值。
  sths34pf80_presence_hysteresis_set(STHS34PF80_ADDRESS, 2);//“存在滯后”(Presence Hysteresis)的函數
  sths34pf80_motion_threshold_set(STHS34PF80_ADDRESS, 30);//設置動作閾值
  sths34pf80_motion_hysteresis_set(STHS34PF80_ADDRESS, 3);	////動作滯后”(Motion Hysteresis)的函數
	
  /* 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函數如下所示。

/* 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("-- >環境溫度沖擊檢測標志位 %d - 存在檢測標志位 %d - 運動檢測標志位 %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 */

測試結果

在未有人的情況下。

在這里插入圖片描述

在人體純在情況下。
在這里插入圖片描述
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2528

    文章

    48296

    瀏覽量

    741142
  • 模塊
    +關注

    關注

    7

    文章

    2501

    瀏覽量

    46635
  • 中斷
    +關注

    關注

    5

    文章

    884

    瀏覽量

    41045
  • stm32cubemx
    +關注

    關注

    5

    文章

    261

    瀏覽量

    14466
收藏 人收藏

    評論

    相關推薦

    STM32CubeMx外部中斷基本使用方法

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

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(1)----獲取ID

    STHS34PF80 是一款非冷卻、工廠校準的紅外運動和存在檢測傳感器,工作波長在 5 μm 至 20 μm 之間。
    的頭像 發表于 12-01 15:28 ?5109次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</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驅動TMOS模塊STHS34PF80(2)----驅動STHS34PF80進行人體檢測

    由 ASIC 進行數字處理,可以對其進行編程以監控運動、存在或過熱狀況。 本章主要驅動STHS34PF80,進行人體檢測。
    的頭像 發表于 12-01 15:29 ?421次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(2)----<b class='flag-5'>驅動</b><b class='flag-5'>STHS34PF80</b>進行人體檢測

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(3)----修改檢測閾值

    用于配置和設置 STHS34PF80 傳感器的一些參數,以便進行存在檢測和運動檢測。
    的頭像 發表于 12-01 15:30 ?400次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(3)----修改檢測閾值

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(5)----配置嵌入式函數

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

    基于STM32CUBEMX驅動TMOS模塊STHS34PF80(6)----獲取狀態數據

    STHS34PF80傳感器項目種修改 Arduino 腳本,重新移植到STM32的MCU中。 該項目基于STHS34PF80 IR溫度傳感器,能夠檢測環境和物體溫度,并且在最大4米范圍內檢測存在
    的頭像 發表于 12-01 15:39 ?423次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅動</b><b class='flag-5'>TMOS</b><b class='flag-5'>模塊</b><b class='flag-5'>STHS34PF80</b>(6)----<b class='flag-5'>獲取</b>狀態數據

    通過STEVAL-MKI109V3在unico上識別不到STHS34PF80是為什么?怎么處理?

    TMOS測試:通過STEVAL-MKI109V3在unico上識別不到STHS34PF80。
    發表于 03-26 08:31

    使用STM32CubeMX實現中斷模式下的串口收發

    cube是ARM發布的針對于STM32的一個底層初始化的軟件,使用STM32CubeMX實現中斷模式下的串口收發
    發表于 02-25 14:12 ?2次下載

    STM32CubeMX和HAL驅動庫的嵌入式系統設計淺談

    課程 | 基于STM32CubeMX和HAL驅動庫的嵌入式系統設計
    的頭像 發表于 01-09 13:59 ?3759次閱讀

    【MCU】基于STM32CubeMX定時器中斷實現LED閃爍

    基于STM32CubeMX定時器中斷實現 LED 閃爍本實驗基于STM32CubeMX實現對STM32開發板的配置,通過定時器中斷實現 LE
    發表于 10-29 11:06 ?20次下載
    【MCU】基于<b class='flag-5'>STM32CubeMX</b>定時器<b class='flag-5'>中斷</b>實現LED閃爍

    STM32CubeMX實現串口通信(中斷方式)

    這里寫目錄標題一、STM32CubeMX工程創建1、題目要求2、配置STM32CubeMX工程一、STM32CubeMX工程創建1、題目要求完成一個STM32的USART串口通訊程序(
    發表于 12-24 19:18 ?11次下載
    <b class='flag-5'>STM32CubeMX</b>實現串口通信(<b class='flag-5'>中斷</b>方式)

    意法半導發布了新型人體存在和移動檢測芯片:STHS34PF80

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

    STM8CubeMXSTM32CubeMX功能一樣嗎?

    STM8CubeMXSTM32CubeMX功能一樣嗎?
    的頭像 發表于 10-31 16:59 ?1251次閱讀
    STM8<b class='flag-5'>CubeMX</b>和<b class='flag-5'>STM32CubeMX</b>功能一樣嗎?

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

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

    e2studio開發STHS34PF80人體存在傳感器(1)----獲取人體存在狀態

    STHS34PF80是一款高性能的紅外(IR)傳感器,特別適用于檢測存在感和運動。其主要特點是高靈敏度,能在沒有透鏡的情況下探測到4米遠的物體(尺寸為70 x 25厘米),并配有集成的硅紅外濾波器
    的頭像 發表于 01-09 16:00 ?259次閱讀
    e2studio開發<b class='flag-5'>STHS34PF80</b>人體存在傳感器(1)----<b class='flag-5'>獲取</b>人體存在狀態
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>