[活动专区] 【AT-START-F435测评】+TFT屏显示max30102心率血氧

[复制链接]
2598|13
 楼主| microcontroller 发表于 2023-1-18 21:46 | 显示全部楼层 |阅读模式
本帖最后由 microcontroller 于 2023-1-18 21:51 编辑

本次收到测评开发板为AT-START-F435,开发板硬件资源丰富,初次接触到雅特力芯片,使用起来很容易上手,通过官方FSP固件可以很容易的把板卡应用起来。
本次测评主要实现通过spi驱动3.5寸TFT液晶屏,显示血氧与心率,血氧和心率监测通过max30102模块提供数据。
spi采用偏上外设硬件spi3,配置代码如下:
spi_init_type spi_init_struct;
void spi_config(void)
{
  crm_periph_clock_enable(CRM_SPI3_PERIPH_CLOCK, TRUE);
//  crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);
  spi_default_para_init(&spi_init_struct);
  spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
  spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
  spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_8;
  spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
  spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
  spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
  spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
  spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
  spi_init(SPI3, &spi_init_struct);

//  spi_init_struct.master_slave_mode = SPI_MODE_SLAVE;
//  spi_init(SPI2, &spi_init_struct);

  spi_enable(SPI3, TRUE);
//  spi_enable(SPI2, TRUE);
}

/**
  * @brief  gpio configuration.
  * @param  none
  * @retval none
  */
void gpio_config(void)
{
  gpio_init_type gpio_initstructure;
  crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_initstructure);
  /* spi3 sck pin */
  gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
  gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_initstructure.gpio_pull           = GPIO_PULL_DOWN;
  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX;
  gpio_initstructure.gpio_pins = GPIO_PINS_10;
  gpio_init(GPIOC, &gpio_initstructure);
  gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE10, GPIO_MUX_6);

  /* spi3 miso pin */
  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;
  gpio_initstructure.gpio_pins           = GPIO_PINS_11;
  gpio_init(GPIOC, &gpio_initstructure);
  gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE11, GPIO_MUX_6);

  /* spi3 mosi pin */
  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;
  gpio_initstructure.gpio_pins           = GPIO_PINS_12;
  gpio_init(GPIOC, &gpio_initstructure);
  gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE12, GPIO_MUX_6);

//  /* spi2 sck pin */
//  gpio_initstructure.gpio_pull           = GPIO_PULL_DOWN;
//  gpio_initstructure.gpio_pins           = GPIO_PINS_1;
//  gpio_init(GPIOD, &gpio_initstructure);
//  gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE1, GPIO_MUX_6);

//  /* spi2 miso pin */
//  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;
//  gpio_initstructure.gpio_pins           = GPIO_PINS_2;
//  gpio_init(GPIOC, &gpio_initstructure);
//  gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE2, GPIO_MUX_5);

//  /* spi2 mosi pin */
//  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;
//  gpio_initstructure.gpio_pins           = GPIO_PINS_4;
//  gpio_init(GPIOD, &gpio_initstructure);
//  gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE4, GPIO_MUX_6);
}

spi读写函数如下:
uint8_t SPI_WriteByte(u8 TxData)
{
//    u8 Rxdata;
//    HAL_SPI_TransmitReceive(&SPI5_Handler,&TxData,&Rxdata,1, 1000);   

//        return Rxdata;                        //返回收到的数据               
  uint8_t retry = 0;               

  while(spi_i2s_flag_get(SPI3, SPI_I2S_TDBE_FLAG) == RESET )
        {
                if(retry++ > 200)
                        return 0;        
        }
  spi_i2s_data_transmit(SPI3, TxData);

        retry = 0;
  while(spi_i2s_flag_get(SPI3, SPI_I2S_RDBF_FLAG) == RESET)
        {
                if(retry++ > 200)
                        return 0;        
        }

  return spi_i2s_data_receive(SPI3);        
}

max30102通过io模拟i2c进行通信。通过滤波计算等算法将采集数据进行计算得出心率及血氧值。

心率血氧

心率血氧
043cc2a513809bc3453fa54f526b275.jpg
02e1b8ea9b488898920b7ea3f754821.jpg
30ae91e800f4780aa5758c19a6e2535.jpg
pixhw 发表于 2023-2-2 10:13 | 显示全部楼层
这个max30102如何读取心率的数值呢?
tabmone 发表于 2023-2-2 10:22 | 显示全部楼层
这个血氧数值测量的精确吗?              
pentruman 发表于 2023-2-2 10:49 | 显示全部楼层
这个完整的计算方法有的吗?              
loutin 发表于 2023-2-2 11:46 | 显示全部楼层
最近比较火的就是用MAX30102制作一个血氧及心率测量仪
lzbf 发表于 2023-2-2 12:15 | 显示全部楼层
max30102模块内部的LED满足什么条件会亮
wilhelmina2 发表于 2023-2-2 12:45 | 显示全部楼层
楼主能够分享max30102的代码吗?
juliestephen 发表于 2023-2-2 15:31 | 显示全部楼层
max30102有没有放大滤波的功能?  
fengm 发表于 2023-2-4 11:14 | 显示全部楼层
max30100与30102哪个好呢  
eefas 发表于 2023-2-4 14:31 | 显示全部楼层
只有spi的代码吗?              
robincotton 发表于 2023-2-4 16:20 | 显示全部楼层
心率(BPM)测量 可以实现的 吗?
lihuami 发表于 2023-2-4 16:52 | 显示全部楼层
血氧数值是怎么计算出来的?              
dspmana 发表于 2023-2-4 17:22 | 显示全部楼层
tft使用的是总线驱动的吗?              
Bowclad 发表于 2023-2-7 18:39 | 显示全部楼层
血氧数值测量的精确看具体算法吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

114

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部