#include "main.h" #include "hal.h" #include "usart.h" #include "sensors.h" #include "co2_sensor.h" #include "lcd_display.h" #include "pressure_sensor.h" #include "bme280.h" #include "bme280_defs.h" #include #include #include unsigned char tx[28]; unsigned char rx[28]; struct bme280_dev dev; int8_t rslt = BME280_OK; void pressure_sensor_init(void){ /* Sensor_0 interface over SPI with native chip select line */ dev.dev_id = 0; dev.intf = BME280_SPI_INTF; dev.read = spi_read; dev.write = spi_write; dev.delay_ms = delay_ms; HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_RESET);//set CSB to zero HAL_Delay(1000); unsigned int pin_state3 = HAL_GPIO_ReadPin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin);// read pin to be sure its 0 printf("CSB PIN is :%d\n", pin_state3); rslt = bme280_init(&dev); } int8_t spi_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { HAL_StatusTypeDef status = HAL_OK; unsigned char rxarray[SPI_BUFFER_LEN] = {0,}; unsigned char txarray[SPI_BUFFER_LEN]={0,}; int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */ txarray[0] = reg_addr; HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_RESET); status = HAL_SPI_TransmitReceive(&spi2,(uint8_t*) &txarray,(uint8_t*) &rxarray,len,HAL_MAX_DELAY); HAL_Delay(2000); HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_SET); if (status != HAL_OK) { HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); } else{ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET); } return rslt; } int8_t spi_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len) { int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */ HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_RESET); if (HAL_SPI_Transmit(&spi2, (uint8_t*)tx, strlen((char*)tx), HAL_MAX_DELAY)== HAL_OK){ HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_SET); } return rslt; } void delay_ms(uint32_t period) { HAL_Delay(1000); }