欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6806|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STM32驅(qū)動(dòng)MAX30102源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:80903 發(fā)表于 2019-1-4 15:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
MAX30102+stm32

單片機(jī)源程序如下:
  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"//延時(shí)函數(shù)

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


  10. /*************************************************
  11. 函數(shù): fputc(int ch, FILE *f)
  12. 功能: 重定向c庫(kù)函數(shù)printf到USART1
  13. 參數(shù): 無(wú)
  14. 返回: 無(wú)
  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. 函數(shù): void main_init(void)
  24. 功能: main初始化
  25. 參數(shù): 無(wú)
  26. 返回: 無(wú)
  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);            //延時(shí)初始化
  36. }

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

  39. /*************************************************
  40. 函數(shù): int main(void)
  41. 功能: main主函數(shù)
  42. 參數(shù): 無(wú)
  43. 返回: 無(wú)
  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āng)前溫度 = %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隨即讀取指令序列,連續(xù)讀取若干字節(jié) */

  66.         /* 第1步:發(fā)起I2C總線啟動(dòng)信號(hào) */
  67.         i2c_Start();

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

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

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

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

  89.         /* 發(fā)送I2C總線停止信號(hào) */
  90.         i2c_Stop();
  91.         return 1;        /* 執(zhí)行成功 */

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



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


  100.         /* 第1步:發(fā)起I2C總線啟動(dòng)信號(hào) */
  101.         i2c_Start();

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

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

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

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

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

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

  125.         /* 第9步:讀取數(shù)據(jù) */
  126.         {
  127.                 data = i2c_ReadByte();        /* 讀1個(gè)字節(jié) */

  128.                 i2c_NAck();        /* 最后1個(gè)字節(jié)讀完后,CPU產(chǎn)生NACK信號(hào)(驅(qū)動(dòng)SDA = 1) */
  129.         }
  130.         /* 發(fā)送I2C總線停止信號(hào) */
  131.         i2c_Stop();
  132.         return data;        /* 執(zhí)行成功 返回data值 */

  133. cmd_fail: /* 命令執(zhí)行失敗后,切記發(fā)送停止信號(hào),避免影響I2C總線上其他設(shè)備 */
  134.         /* 發(fā)送I2C總線停止信號(hào) */
  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步:發(fā)起I2C總線啟動(dòng)信號(hào) */
  144.         i2c_Start();

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

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

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

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

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

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

  168.         /* 第9步:讀取數(shù)據(jù) */
  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個(gè)字節(jié)讀完后,CPU產(chǎn)生NACK信號(hào)(驅(qū)動(dòng)SDA = 1) */
  182.                 else
  183.                         i2c_Ack();
  184.                 Word_Data[i][1] = (((u16)data1 << 8) | data2);

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

  190. cmd_fail: /* 命令執(zhí)行失敗后,切記發(fā)送停止信號(hào),避免影響I2C總線上其他設(shè)備 */
  191.         /* 發(fā)送I2C總線停止信號(hào) */
  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. }
復(fù)制代碼

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


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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

板凳
ID:474381 發(fā)表于 2019-1-31 16:23 來(lái)自觸屏版 | 只看該作者
樓主有沒(méi)i2.c文件庫(kù)的函數(shù),跪求一下
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表