【AT-START-F435测评】+TFT屏显示max30102心率血氧
本帖最后由 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);
}
/**
* @briefgpio configuration.
* @paramnone
* @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进行通信。通过滤波计算等算法将采集数据进行计算得出心率及血氧值。
这个max30102如何读取心率的数值呢? 这个血氧数值测量的精确吗? 这个完整的计算方法有的吗? 最近比较火的就是用MAX30102制作一个血氧及心率测量仪 max30102模块内部的LED满足什么条件会亮 楼主能够分享max30102的代码吗? max30102有没有放大滤波的功能? max30100与30102哪个好呢 只有spi的代码吗? 心率(BPM)测量 可以实现的 吗? 血氧数值是怎么计算出来的? tft使用的是总线驱动的吗? 血氧数值测量的精确看具体算法吧
页:
[1]