这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » MAX30100 的IIC通讯

共3条 1/1 1 跳转至

MAX30100 的IIC通讯

菜鸟
2018-12-02 13:07:51     打赏

心跳检测模块在网上有很多,但是资料比较丰富的是MAX30100和MAX30102两种,我购买的是MAX30100。

12312312.png以上是该模块的寄存器表,如有兴趣的兄弟可以下载该模块的详细规格书。MAX30100.pdf



首先看看这个模块的通讯方式:该模块采用IIC通讯,最低供电电压为1.7V最高为2.0V,但其模块有LED需要3.1~5V的供电。通讯低电平最高为0.4V,高电平最低为1.4V,频率最高为400kHz。其可以检测血氧浓度并通过温度传感器来矫正。其精度为16位。AD转换速率为1K。该模块默认的ID为0x07。读取ID的方式为:先向模块发送 0XAE 0X06 0X0B 0XAE 0XFF.然后所接收到的数值为ID。记得如果使用模拟IIC需要发送两次开始命令,一次回应命令,一次停止命令,否则可能会导致数据出错。



HAL_StatusTypeDef I2C_MasterTransmit_TXE(I2C_HandleTypeDef *hi2c);

使用以上函数可以发送即能够实现其功能。该函数仅有一个结构体变量分别为:

typedef struct

{

  I2C_TypeDef                *Instance;      /*!< I2C registers base address 寄存器地址              */

                                             

  I2C_InitTypeDef            Init;           /*!< I2C communication parameters 通讯参数(见I2C_InitTypeDef结构体说明)             */

                                             

  uint8_t                    *pBuffPtr;      /*!< Pointer to I2C transfer buffer 缓冲区指针(传送内容指针)    */

                                             

  uint16_t                   XferSize;       /*!< I2C transfer size  传输内容大小           */

                                             

  __IO uint16_t              XferCount;      /*!< I2C transfer counter                     */

                                             

  __IO uint32_t              XferOptions;    /*!< I2C transfer options                     */

                                             

  __IO uint32_t              PreviousState;  /*!< I2C communication Previous state and mode

                                                  context for internal usage     之前的通讯状态          */

                                             

  DMA_HandleTypeDef          *hdmatx;        /*!< I2C Tx DMA handle parameters     发送DMA的句柄(具体内容可以自己参考DMA_HandleTypeDef结构体的定义,暂不叙述)        */

                                             

  DMA_HandleTypeDef          *hdmarx;        /*!< I2C Rx DMA handle parameters     接收DMA的句柄 (具体内容可以自己参考DMA_HandleTypeDef结构体的定义,暂不叙述)       */

                                             

  HAL_LockTypeDef            Lock;           /*!< I2C locking object   IIC锁定对象(一般不锁定为HAL_UNLOCKED)                    */

                                             

  __IO HAL_I2C_StateTypeDef  State;          /*!< I2C communication state  IIC通讯状态(见后续HAL_I2C_StateTypeDef枚举变量说明)                 */

                                             

  __IO HAL_I2C_ModeTypeDef   Mode;           /*!< I2C communication mode IIC通讯模式(见后续HAL_I2C_ModeTypeDef你枚举变量说明)                  */

                                             

  __IO uint32_t              ErrorCode;      /*!< I2C Error code  错误代码(一般不初始化)                         */


  __IO uint32_t              Devaddress;     /*!< I2C Target device address 目标地址(也就是我们模块的ID)               */


  __IO uint32_t              Memaddress;     /*!< I2C Target memory address 寄存器地址(就是我们要读取的目标的寄存器地址)               */


  __IO uint32_t              MemaddSize;     /*!< I2C Target memory address  size  寄存器地址大小()        */


  __IO uint32_t              EventCount;     /*!< I2C Event counter                        */

}I2C_HandleTypeDef;




typedef struct

{

  uint32_t ClockSpeed;       /*!< Specifies the clock frequency.    速度  我设置为400K,

                                  This parameter must be set to a value lower than 400kHz */


  uint32_t DutyCycle;        /*!< Specifies the I2C fast mode duty cycle.  这个我一般没有设置

                                  This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */


  uint32_t OwnAddress1;      /*!< Specifies the first device own address. 设置自己的ID地址

                                  This parameter can be a 7-bit or 10-bit address. */


  uint32_t AddressingMode;   /*!< Specifies if 7-bit or 10-bit addressing mode is selected.  一般没设置

                                  This parameter can be a value of @ref I2C_addressing_mode */


  uint32_t DualAddressMode;  /*!< Specifies if dual addressing mode is selected. 一般没有设置

                                  This parameter can be a value of @ref I2C_dual_addressing_mode */


  uint32_t OwnAddress2;      /*!< Specifies the second device own address if dual addressing mode is selected

                                  This parameter can be a 7-bit address. */


  uint32_t GeneralCallMode;  /*!< Specifies if general call mode is selected.一般没有设置

                                  This parameter can be a value of @ref I2C_general_call_addressing_mode */


  uint32_t NoStretchMode;    /*!< Specifies if nostretch mode is selected.一般没有设置 

                                  This parameter can be a value of @ref I2C_nostretch_mode */


}I2C_InitTypeDef;


typedef enum

{

  HAL_I2C_STATE_RESET             = 0x00U,   /*!< Peripheral is not yet Initialized         */

  HAL_I2C_STATE_READY             = 0x20U,   /*!< Peripheral Initialized and ready for use  */

  HAL_I2C_STATE_BUSY              = 0x24U,   /*!< An internal process is ongoing            */

  HAL_I2C_STATE_BUSY_TX           = 0x21U,   /*!< Data Transmission process is ongoing      */

  HAL_I2C_STATE_BUSY_RX           = 0x22U,   /*!< Data Reception process is ongoing         */

  HAL_I2C_STATE_LISTEN            = 0x28U,   /*!< Address Listen Mode is ongoing            */

  HAL_I2C_STATE_BUSY_TX_LISTEN    = 0x29U,   /*!< Address Listen Mode and Data Transmission

                                                 process is ongoing                         */

  HAL_I2C_STATE_BUSY_RX_LISTEN    = 0x2AU,   /*!< Address Listen Mode and Data Reception

                                                 process is ongoing                         */

  HAL_I2C_STATE_ABORT             = 0x60U,   /*!< Abort user request ongoing                */

  HAL_I2C_STATE_TIMEOUT           = 0xA0U,   /*!< Timeout state                             */

  HAL_I2C_STATE_ERROR             = 0xE0U    /*!< Error                                     */


}HAL_I2C_StateTypeDef;

typedef enum

{

  HAL_I2C_MODE_NONE               = 0x00U,   /*!< No I2C communication on going             */

  HAL_I2C_MODE_MASTER             = 0x10U,   /*!< I2C communication is in Master Mode       */

  HAL_I2C_MODE_SLAVE              = 0x20U,   /*!< I2C communication is in Slave Mode        */

  HAL_I2C_MODE_MEM                = 0x40U    /*!< I2C communication is in Memory Mode       */


}HAL_I2C_ModeTypeDef;


到此   初始化该变量完成。


具体代码争取下周末能够有时间写出来。





关键词: MAX30100     IIC    

高工
2018-12-06 14:46:33     打赏
2楼

多来点图哦~


院士
2018-12-11 12:41:19     打赏
3楼

其实吧

帖子是可以插入源代码的,楼主现在的代码格式,真让人心疼啊。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]