在合并模块代码的过程中串口无法正常通信,代码编译烧录一切正常,模块不能正常工作
#stm32f103c8t6 #spg30 #ds18b20 #sg90
int main(void)
{
/* USER CODE BEGIN 1 */
short temperature;
uint16_t TVOC = 0, CO2 = 0;
uint8_t ID[6]={0};
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();
MX_TIM4_Init();
MX_I2C2_Init();
/* USER CODE BEGIN 2 */
while(DS18B20_Init())
{
// printf("DS18B20 checked failed!!!\r\n");
HAL_Delay(500);
}
while(sgp30_init() < 0)
{
printf(" sgp30 init fail\r\n");
HAL_Delay(1000);
}
if(sgp30_get_serial_id(ID) < 0)
{
printf(" sgp30 read serial id failed\r\n");
}else
{
printf(" sgp30 read serial id is:");
for(int i = 0; i < 6; i++) printf("%02X", ID[i]);
printf("\r\n");
}
do
{
if(sgp30_read(&CO2, &TVOC) < 0)
{
printf("\r\n spg30 read failed");
}else
{
printf(".");
}
HAL_Delay(500);
}while(TVOC == 0 && CO2 == 400);
// printf("DS18B20 checked success!!!\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(sgp30_read(&CO2, &TVOC) < 0)
{
printf(" sgp30 read fail\r\n");
}
else
{
printf(" CO2:%5dppm TVOC:%5dppb\r\n", CO2, TVOC);
}
if(CO2>10)
{
Set_SG90_angle(&htim3,TIM_CHANNEL_1,1,20000,20);
}
temperature = DS18B20_Get_Temp();
if(temperature < 0)
printf("????? -%d ?\r\n",temperature/10);
else
printf("????? %d ?\r\n",temperature/10);
if(temperature>10)
{
Set_SG90_angle(&htim3,TIM_CHANNEL_2,1,20000,20);
}
}
/* USER CODE END 3 */
}
模块的初始化全部使用的while循环做的判断。如果有一个模块初始化失败,则会一直循环等待,自然就不会有串口打印了。
如下所示:
while(DS18B20_Init())
{
// printf("DS18B20 checked failed!!!\r\n");
HAL_Delay(500);
}
按以下修改下,先测试确定是卡死在哪个函数处。
printf("1----\r\n",);
while(DS18B20_Init())
{
// printf("DS18B20 checked failed!!!\r\n");
HAL_Delay(500);
}
printf("2----\r\n",);
while(sgp30_init() < 0)
{
printf(" sgp30 init fail\r\n");
HAL_Delay(1000);
}
printf("3----\r\n",);
if(sgp30_get_serial_id(ID) < 0)
{
printf(" sgp30 read serial id failed\r\n");
}else
{
printf(" sgp30 read serial id is:");
for(int i = 0; i < 6; i++) printf("%02X", ID[i]);
printf("\r\n");
}
printf("4----\r\n",);
do
{
if(sgp30_read(&CO2, &TVOC) < 0)
{
printf("\r\n spg30 read failed");
}else
{
printf(".");
}
HAL_Delay(500);
}while(TVOC == 0 && CO2 == 400);
不知道你这个问题是否已经解决, 如果还没有解决的话: