本帖最后由 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进行通信。通过滤波计算等算法将采集数据进行计算得出心率及血氧值。
|