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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32驅動MAX30102源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:80903 發表于 2019-1-4 15:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
MAX30102+stm32

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "usart.h"
  3. #include "ultrasonic.h"
  4. #include "stm32f10x_gpio.h"
  5. #include "stm32f10x_i2c.h"
  6. #include "delay.h"//延時函數

  7. #include <stdio.h>
  8. #include <math.h>
  9. #include "bsp_i2c_gpio.h"


  10. /*************************************************
  11. 函數: fputc(int ch, FILE *f)
  12. 功能: 重定向c庫函數printf到USART1
  13. 參數: 無
  14. 返回: 無
  15. **************************************************/
  16. int fputc(int ch, FILE *f)
  17. {
  18.         USART_SendData(USART1, (unsigned char) ch);
  19.         while (!(USART1->SR & USART_FLAG_TXE));
  20.         return (ch);
  21. }




  22. /*************************************************
  23. 函數: void main_init(void)
  24. 功能: main初始化
  25. 參數: 無
  26. 返回: 無
  27. **************************************************/
  28. void main_init(void)
  29. {
  30.         Usart_Init();
  31.         //I2C1_GPIO_Config();
  32.         //I2C1_Mode_config();
  33.         //I2C1_Configuration();
  34.         bsp_InitI2C();
  35.         delay_init(72);            //延時初始化
  36. }

  37. extern u8 max30102_Bus_Read(u8 Register_Address);
  38. extern void max30102_init(void);

  39. /*************************************************
  40. 函數: int main(void)
  41. 功能: main主函數
  42. 參數: 無
  43. 返回: 無
  44. **************************************************/
  45. int main(void)
  46. {
  47.         u8 temp_num=0;
  48.         main_init();
  49.         
  50.         max30102_init();
  51.         
  52.         printf("\r\n MAX30102  init  \r\n");

  53.         
  54.         while(1)
  55.         {
  56.                 delay_ms(1000);            
  57.                 max30102_init();
  58.                 temp_num = max30102_Bus_Read(0x1f);
  59.                 printf("當前溫度 = %d\r\n",temp_num);
  60.         }

  61. }


  62. #define max30102_WR_address 0xAE

  63. u8 max30102_Bus_Write(u8 Register_Address, u8 Word_Data)
  64. {

  65.         /* 采用串行EEPROM隨即讀取指令序列,連續讀取若干字節 */

  66.         /* 第1步:發起I2C總線啟動信號 */
  67.         i2c_Start();

  68.         /* 第2步:發起控制字節,高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  69.         i2c_SendByte(max30102_WR_address | I2C_WR);        /* 此處是寫指令 */

  70.         /* 第3步:發送ACK */
  71.         if (i2c_WaitAck() != 0)
  72.         {
  73.                 goto cmd_fail;        /* EEPROM器件無應答 */
  74.         }

  75.         /* 第4步:發送字節地址 */
  76.         i2c_SendByte(Register_Address);
  77.         if (i2c_WaitAck() != 0)
  78.         {
  79.                 goto cmd_fail;        /* EEPROM器件無應答 */
  80.         }
  81.         
  82.         /* 第5步:開始寫入數據 */
  83.         i2c_SendByte(Word_Data);

  84.         /* 第6步:發送ACK */
  85.         if (i2c_WaitAck() != 0)
  86.         {
  87.                 goto cmd_fail;        /* EEPROM器件無應答 */
  88.         }

  89.         /* 發送I2C總線停止信號 */
  90.         i2c_Stop();
  91.         return 1;        /* 執行成功 */

  92. cmd_fail: /* 命令執行失敗后,切記發送停止信號,避免影響I2C總線上其他設備 */
  93.         /* 發送I2C總線停止信號 */
  94.         i2c_Stop();
  95.         return 0;
  96. }



  97. u8 max30102_Bus_Read(u8 Register_Address)
  98. {
  99.         u8  data;


  100.         /* 第1步:發起I2C總線啟動信號 */
  101.         i2c_Start();

  102.         /* 第2步:發起控制字節,高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  103.         i2c_SendByte(max30102_WR_address | I2C_WR);        /* 此處是寫指令 */

  104.         /* 第3步:發送ACK */
  105.         if (i2c_WaitAck() != 0)
  106.         {
  107.                 goto cmd_fail;        /* EEPROM器件無應答 */
  108.         }

  109.         /* 第4步:發送字節地址, */
  110.         i2c_SendByte((uint8_t)Register_Address);
  111.         if (i2c_WaitAck() != 0)
  112.         {
  113.                 goto cmd_fail;        /* EEPROM器件無應答 */
  114.         }
  115.         

  116.         /* 第6步:重新啟動I2C總線。下面開始讀取數據 */
  117.         i2c_Start();

  118.         /* 第7步:發起控制字節,高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  119.         i2c_SendByte(max30102_WR_address | I2C_RD);        /* 此處是讀指令 */

  120.         /* 第8步:發送ACK */
  121.         if (i2c_WaitAck() != 0)
  122.         {
  123.                 goto cmd_fail;        /* EEPROM器件無應答 */
  124.         }

  125.         /* 第9步:讀取數據 */
  126.         {
  127.                 data = i2c_ReadByte();        /* 讀1個字節 */

  128.                 i2c_NAck();        /* 最后1個字節讀完后,CPU產生NACK信號(驅動SDA = 1) */
  129.         }
  130.         /* 發送I2C總線停止信號 */
  131.         i2c_Stop();
  132.         return data;        /* 執行成功 返回data值 */

  133. cmd_fail: /* 命令執行失敗后,切記發送停止信號,避免影響I2C總線上其他設備 */
  134.         /* 發送I2C總線停止信號 */
  135.         i2c_Stop();
  136.         return 0;
  137. }


  138. void max30102_FIFO_Read(u8 Register_Address,u16  Word_Data[][2],u8 count)
  139. {
  140.         u8 i=0;
  141.         u8 no = count;
  142.         u8 data1, data2;
  143.         /* 第1步:發起I2C總線啟動信號 */
  144.         i2c_Start();

  145.         /* 第2步:發起控制字節,高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  146.         i2c_SendByte(max30102_WR_address | I2C_WR);        /* 此處是寫指令 */

  147.         /* 第3步:發送ACK */
  148.         if (i2c_WaitAck() != 0)
  149.         {
  150.                 goto cmd_fail;        /* EEPROM器件無應答 */
  151.         }

  152.         /* 第4步:發送字節地址, */
  153.         i2c_SendByte((uint8_t)Register_Address);
  154.         if (i2c_WaitAck() != 0)
  155.         {
  156.                 goto cmd_fail;        /* EEPROM器件無應答 */
  157.         }
  158.         

  159.         /* 第6步:重新啟動I2C總線。下面開始讀取數據 */
  160.         i2c_Start();

  161.         /* 第7步:發起控制字節,高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */
  162.         i2c_SendByte(max30102_WR_address | I2C_RD);        /* 此處是讀指令 */

  163.         /* 第8步:發送ACK */
  164.         if (i2c_WaitAck() != 0)
  165.         {
  166.                 goto cmd_fail;        /* EEPROM器件無應答 */
  167.         }

  168.         /* 第9步:讀取數據 */
  169.         while (no)
  170.         {
  171.                 data1 = i2c_ReadByte();        
  172.                 i2c_Ack();
  173.                 data2 = i2c_ReadByte();
  174.                 i2c_Ack();
  175.                 Word_Data[i][0] = (((u16)data1 << 8) | data2);  //

  176.                
  177.                 data1 = i2c_ReadByte();        
  178.                 i2c_Ack();
  179.                 data2 = i2c_ReadByte();
  180.                 if(1==no)
  181.                         i2c_NAck();        /* 最后1個字節讀完后,CPU產生NACK信號(驅動SDA = 1) */
  182.                 else
  183.                         i2c_Ack();
  184.                 Word_Data[i][1] = (((u16)data1 << 8) | data2);

  185.                 no--;        
  186.                 i++;
  187.         }
  188.         /* 發送I2C總線停止信號 */
  189.         i2c_Stop();

  190. cmd_fail: /* 命令執行失敗后,切記發送停止信號,避免影響I2C總線上其他設備 */
  191.         /* 發送I2C總線停止信號 */
  192.         i2c_Stop();
  193. }

  194. #define INTERRUPT_REG                                          0X00


  195. void max30102_init()
  196. {
  197.         
  198.         max30102_Bus_Write(0x09, 0x0b);  //mode configuration : temp_en[3]      MODE[2:0]=010 HR only enabled    011 SP02 enabled
  199.         max30102_Bus_Write(0x01, 0xF0); //open all of interrupt
  200.         max30102_Bus_Write(INTERRUPT_REG, 0x00); //all interrupt clear
  201.         max30102_Bus_Write(0x03, 0x02); //DIE_TEMP_RDY_EN
  202.         max30102_Bus_Write(0x21, 0x01); //SET   TEMP_EN

  203.         max30102_Bus_Write(0x0a, 0x47); //SPO2_SR[4:2]=001  100 per second    LED_PW[1:0]=11  16BITS

  204.         max30102_Bus_Write(0x0c, 0x47);
  205.         max30102_Bus_Write(0x0d, 0x47);
  206.                                                                                        
  207. }
復制代碼

所有資料51hei提供下載:
使用模擬iic_MAX30102_for_stm32.7z (383.17 KB, 下載次數: 111)


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

使用道具 舉報

沙發
ID:1 發表于 2019-1-4 17:00 | 只看該作者
不要發本站已有的重復內容,建議先在搜索欄搜索一下
回復

使用道具 舉報

板凳
ID:474381 發表于 2019-1-31 16:23 來自手機 | 只看該作者
樓主有沒i2.c文件庫的函數,跪求一下
回復

使用道具 舉報

地板
ID:68641 發表于 2021-7-13 01:30 | 只看該作者
不能用 大家不用下載了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩国产一区二区三区 | 午夜三区| 欧美激情在线观看一区二区三区 | 综合精品 | 亚洲一区二区三区在线 | 日韩av第一页 | 午夜爽爽爽男女免费观看 | 亚洲视频在线免费观看 | 欧美精品91爱爱 | 337p日本欧洲亚洲大胆鲁鲁 | 精品国产一区二区国模嫣然 | 成年人黄色一级毛片 | 美女131mm久久爽爽免费 | 亚洲一区二区三区欧美 | 欧美一级视频在线观看 | 午夜精品 | 国产一区二区三区不卡av | 黄网站在线播放 | 国产乱码精品1区2区3区 | 亚洲性在线 | 美女爽到呻吟久久久久 | 99久久精品一区二区毛片吞精 | 午夜电影网| 国产精品999 | 亚洲网一区 | 欧美精品一区二区在线观看 | 婷婷综合在线 | 天天澡天天狠天天天做 | 永久av| 国产精品乱码一区二区三区 | 中文字幕精品一区 | 午夜视频网站 | 久久午夜国产精品www忘忧草 | 美女视频一区 | 欧美亚洲国产日韩 | 国产一级影片 | 紧缚调教一区二区三区视频 | 久久国产激情视频 | 精品亚洲一区二区三区 | 成人免费福利视频 | 狠狠躁夜夜躁人人爽天天高潮 |