久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8579|回復: 17
打印 上一主題 下一主題
收起左側

STM32 MAX30102心率血氧模塊源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:336427 發表于 2020-3-7 23:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
從網上找的資料,輸出數據比較穩定,hal庫版本使用的是軟件IIC,注釋就不添加特別多了,絕對可用,HAL庫版本的MAX30102血氧模塊
  1.         uint32_t un_min, un_max, un_prev_data;  
  2.         int i;
  3.         int32_t n_brightness;
  4.         float f_temp;
  5.         u8 temp_num=0;
  6.         u8 temp[6];
  7.         u8 str[100];
  8.         u8 dis_hr=0,dis_spo2=0;
  9.   /* USER CODE END 1 */

  10.   /* MCU Configuration----------------------------------------------------------*/

  11.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  12.   HAL_Init();

  13.   /* USER CODE BEGIN Init */

  14.   /* USER CODE END Init */

  15.   /* Configure the system clock */
  16.   SystemClock_Config();

  17.   /* USER CODE BEGIN SysInit */

  18.   /* USER CODE END SysInit */

  19.   /* Initialize all configured peripherals */
  20.   MX_GPIO_Init();
  21.   MX_DMA_Init();
  22.   MX_TIM4_Init();
  23.   MX_USART1_UART_Init();
  24.   /* USER CODE BEGIN 2 */
  25.         
  26.         delay_init();
  27.         max30102_init();
  28.   /* USER CODE END 2 */

  29.   /* Infinite loop */
  30.   /* USER CODE BEGIN WHILE */
  31.         un_min=0x3FFFF;
  32.         un_max=0;
  33.         
  34.         n_ir_buffer_length=500; //buffer length of 100 stores 5 seconds of samples running at 100sps
  35.         //read the first 500 samples, and determine the signal range
  36.     for(i=0;i<n_ir_buffer_length;i++)
  37.     {
  38.         while(MAX30102_INT==1);   //wait until the interrupt pin asserts

  39.                 max30102_FIFO_ReadBytes(REG_FIFO_DATA,temp);
  40.                 aun_red_buffer[i] =  (long)((long)((long)temp[0]&0x03)<<16) | (long)temp[1]<<8 | (long)temp[2];    // Combine values to get the actual number
  41.                 aun_ir_buffer[i] = (long)((long)((long)temp[3] & 0x03)<<16) |(long)temp[4]<<8 | (long)temp[5];   // Combine values to get the actual number

  42.         if(un_min>aun_red_buffer[i])
  43.             un_min=aun_red_buffer[i];    //update signal min
  44.         if(un_max<aun_red_buffer[i])
  45.             un_max=aun_red_buffer[i];    //update signal max
  46.     }
  47.         un_prev_data=aun_red_buffer[i];
  48.         //calculate heart rate and SpO2 after first 500 samples (first 5 seconds of samples)
  49.     maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid);         
  50.   while (1)
  51.   {

  52.   /* USER CODE END WHILE */

  53.   /* USER CODE BEGIN 3 */
  54.                 i=0;
  55.         un_min=0x3FFFF;
  56.         un_max=0;
  57.                
  58.                 //dumping the first 100 sets of samples in the memory and shift the last 400 sets of samples to the top
  59.         for(i=100;i<500;i++)
  60.         {
  61.             aun_red_buffer[i-100]=aun_red_buffer[i];
  62.             aun_ir_buffer[i-100]=aun_ir_buffer[i];

  63.             //update the signal min and max
  64.             if(un_min>aun_red_buffer[i])
  65.             un_min=aun_red_buffer[i];
  66.             if(un_max<aun_red_buffer[i])
  67.             un_max=aun_red_buffer[i];
  68.         }
  69.                 //take 100 sets of samples before calculating the heart rate.
  70.         for(i=400;i<500;i++)
  71.         {
  72.             un_prev_data=aun_red_buffer[i-1];
  73.             while(MAX30102_INT==1);
  74.             max30102_FIFO_ReadBytes(REG_FIFO_DATA,temp);
  75.                         aun_red_buffer[i] =  (long)((long)((long)temp[0]&0x03)<<16) | (long)temp[1]<<8 | (long)temp[2];    // Combine values to get the actual number
  76.                         aun_ir_buffer[i] = (long)((long)((long)temp[3] & 0x03)<<16) |(long)temp[4]<<8 | (long)temp[5];   // Combine values to get the actual number

  77.             if(aun_red_buffer[i]>un_prev_data)
  78.             {
  79.                 f_temp=aun_red_buffer[i]-un_prev_data;
  80.                 f_temp/=(un_max-un_min);
  81.                 f_temp*=MAX_BRIGHTNESS;
  82.                 n_brightness-=(int)f_temp;
  83.                 if(n_brightness<0)
  84.                     n_brightness=0;
  85.             }
  86.             else
  87.             {
  88.                 f_temp=un_prev_data-aun_red_buffer[i];
  89.                 f_temp/=(un_max-un_min);
  90.                 f_temp*=MAX_BRIGHTNESS;
  91.                 n_brightness+=(int)f_temp;
  92.                 if(n_brightness>MAX_BRIGHTNESS)
  93.                     n_brightness=MAX_BRIGHTNESS;
  94.             }
  95.                         //send samples and calculation result to terminal program through UART
  96.                         if(ch_hr_valid == 1 && n_heart_rate<120)//**/ ch_hr_valid == 1 && ch_spo2_valid ==1 && n_heart_rate<120 && n_sp02<101
  97.                         {
  98.                                 dis_hr = n_heart_rate;
  99.                                 dis_spo2 = n_sp02;
  100.                         }
  101.                         else
  102.                         {
  103.                                 dis_hr = 0;
  104.                                 dis_spo2 = 0;
  105.                         }
  106.                                 printf("HR=%i, ", n_heart_rate);
  107.                                 printf("HRvalid=%i, ", ch_hr_valid);
  108.                                 printf("SpO2=%i, ", n_sp02);
  109.                                 printf("SPO2Valid=%i\r\n", ch_spo2_valid);
  110.                 }
  111.         maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid);
復制代碼


使用引腳,INT接PB9 SCL接PB7 SDA接PB9 VCC接3.3V GND接GND

51hei截圖20200307235130001.jpg (103.17 KB, 下載次數: 192)

數據穩定

數據穩定

MAX0102new.7z

2.9 MB, 下載次數: 363, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:282431 發表于 2020-3-8 10:01 | 只看該作者
好資料,謝謝樓主,學習學習51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:707694 發表于 2020-3-13 15:07 | 只看該作者
謝謝樓主分享,正學習這部分。
回復

使用道具 舉報

地板
ID:116773 發表于 2020-3-14 16:09 | 只看該作者
INT和SDA其中之一接PB9引腳,另外的接哪個引腳?



回復

使用道具 舉報

5#
ID:730244 發表于 2020-4-16 11:15 | 只看該作者
同問,為什么有兩個PB9呢,麻煩大神看一下
回復

使用道具 舉報

6#
ID:336427 發表于 2020-5-14 21:23 | 只看該作者
hujj 發表于 2020-3-14 16:09
INT和SDA其中之一接PB9引腳,另外的接哪個引腳?

不好意思寫錯了
回復

使用道具 舉報

7#
ID:336427 發表于 2020-5-14 21:24 | 只看該作者
PB9那個打錯了,SDA接的應該是PB6或PB8,從程序里面可以看出來的
回復

使用道具 舉報

8#
ID:185372 發表于 2020-6-20 10:31 | 只看該作者
這個先感謝一下。我的數據很不穩定,看看lz的效果是不是很好。
回復

使用道具 舉報

9#
ID:185372 發表于 2020-6-20 10:40 | 只看該作者
程序里面是SDA接的是PB7.(當然我設計的是INT是PB7,SDA是PB9)
回復

使用道具 舉報

10#
ID:196009 發表于 2020-6-20 12:41 | 只看該作者
這個不錯!!!!
回復

使用道具 舉報

11#
ID:138247 發表于 2020-6-25 12:30 | 只看該作者
謝謝樓主分享。。
回復

使用道具 舉報

12#
ID:789678 發表于 2020-6-26 22:29 | 只看該作者
所以最終的引腳是怎么接的呀
回復

使用道具 舉報

13#
ID:789678 發表于 2020-6-26 23:24 | 只看該作者
接線完整的可以發一個嗎,看不明白。連接上的輸出都是-999
回復

使用道具 舉報

14#
ID:821898 發表于 2021-4-6 23:34 | 只看該作者
請問樓主串口調試助手一直返回的數據是-999是什么原因呢
回復

使用道具 舉報

15#
ID:791189 發表于 2021-4-13 15:37 | 只看該作者
ly0123 發表于 2021-4-6 23:34
請問樓主串口調試助手一直返回的數據是-999是什么原因呢

當心率或血氧值的計算結果有誤時對應的變量值為-999
回復

使用道具 舉報

16#
ID:900801 發表于 2021-4-15 11:57 | 只看該作者
請問數據-999怎么解決呢
回復

使用道具 舉報

17#
ID:900801 發表于 2021-4-15 12:05 | 只看該作者
obsidiancen 發表于 2021-4-13 15:37
當心率或血氧值的計算結果有誤時對應的變量值為-999

大佬,那這個問題怎么解決呢
回復

使用道具 舉報

18#
ID:432151 發表于 2021-5-23 23:43 | 只看該作者
這個測不準誒
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日日摸天天添天天添破 | 中文字幕人成乱码在线观看 | 最新伦理片 | 天天干天天草 | 日本成人综合 | 91av在线影院 | 一区二区三区免费 | 午夜影晥 | 日韩一级免费电影 | 精品一区久久 | 亚洲精品一区在线观看 | 91久久夜色精品国产网站 | 欧美αv| 一区二区三区免费观看 | 成人精品久久 | 欧美黄色绿像 | 正在播放一区二区 | 天天操天天射天天舔 | 亚洲视频不卡 | 欧美日韩视频在线 | 欧美精品 在线观看 | 久久精品一区 | 一区二区三区四区国产精品 | 国产视频一二三区 | 日韩精品久久久久 | 亚洲视频免费在线观看 | 91欧美激情一区二区三区成人 | 午夜在线观看视频 | av在线一区二区 | 毛片在线视频 | 日韩色视频 | 毛片站 | 国产精品久久久久一区二区三区 | 欧美激情精品久久久久久免费 | 国产乱码精品一区二区三区中文 | 国精品一区二区 | 一级毛片免费看 | 伊人网影院 | 久久久xx | 麻豆视频国产在线观看 | 国产免费一区 |