|
|
没有使用RTOS,I2C是使用HAL库,配置是这样:
void MX_I2C2_Init(void)
{
/* USER CODE BEGIN I2C2_Init 0 */
/* USER CODE END I2C2_Init 0 */
/* USER CODE BEGIN I2C2_Init 1 */
/* USER CODE END I2C2_Init 1 */
hi2c2.Instance = I2C2;
hi2c2.Init.Timing = 0x10D19CE4; //400khz
hi2c2.Init.OwnAddress1 = 0;
hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c2.Init.OwnAddress2 = 0;
hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c2) != HAL_OK)
{
Error_Handler();
}
/** Configure Analogue filter
*/
if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
{
Error_Handler();
}
/** Configure Digital filter
*/
if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN I2C2_Init 2 */
/* USER CODE END I2C2_Init 2 */
}
这是我采集部分的代码
void EnvCollect_StateMachine(void)
{
switch(env_collect_state)
{
case 0: // 开始采集环境数据
env_collect_time = HAL_GetTick();
env_collect_state = 1;
break;
case 1: // 采集T117温度数据
if((HAL_GetTick() - env_collect_time) > 100)
{
float temperature;
int ret = APP_T117_ReadTemperature(&temperature);
printf("T117 Read Temp Result: %d\r\n", ret);
g_t117_temperature = temperature;
env_collect_time = HAL_GetTick();
env_collect_state = 2;
}
break;
case 2: // 采集SHT40温湿度数据
if((HAL_GetTick() - env_collect_time) > 100)
{
float humidity, temperature;
if(SHT40AD1B_ReadData(&humidity, &temperature) == 0)
{
g_sht40_humidity = humidity;
g_sht40_temperature = temperature;
}
env_collect_time = HAL_GetTick();
env_collect_state = 3;
}
break;
case 3: // 采集BMP580气压数据
if((HAL_GetTick() - env_collect_time) > 100)
{
APP_BMP580_GetData(&bmp580_dev, &bmp580_data);
env_collect_time = HAL_GetTick();
env_collect_state = 4;
}
break;
case 4: // 环境数据采集完成
env_collect_complete = true;
if(g_sht40_temperature >= SHT40_TEMP_MIN && g_sht40_temperature <= SHT40_TEMP_MAX)
{
// SHT40温度在量程内,使用SHT40的温度
final_temperature = g_sht40_temperature;
printf("Use SHT40 temperature (in range): %.2f°C\r\n", final_temperature);
}
else
{
// SHT40温度超量程,改用T117的温度
final_temperature = g_t117_temperature;
printf("SHT40 temperature out of range (%.2f°C), use T117 temperature: %.2f°C\r\n",
g_sht40_temperature, final_temperature);
}
DATA_LOG("T117=%.2fC, SHT40=%.2fC/%.1f%%, BMP580=%.2fhPa\r\n",
g_t117_temperature, g_sht40_temperature, g_sht40_humidity, bmp580_data.pressure);
printf("Environment Data Collection Complete\r\n");
env_collect_state = 0;
break;
default:
env_collect_state = 0;
break;
}
}
现在主要问题是T117会在采集一会,采集不回来数 |
|