printf('hello world!\n');
while (1)
{
     //获取温湿度
     call_sht11(&Tem,&Hum);
     printf('%d℃  %d%%RH\r\n',Tem,Hum);

     if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
     {
         HAL_Delay(300);
         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
         if(HAL_GPIO_ReadPin(LED1_GPIO_Port,LED1_Pin)==GPIO_PIN_SET)
             printf('OUT');
         else
             printf('ENTER');
     }
     if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0)
     {
         HAL_Delay(300);
         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
         if(HAL_GPIO_ReadPin(LED2_GPIO_Port,LED2_Pin)==GPIO_PIN_SET)
             printf('STOP');
         else
             printf('FIRE');
     }

     if(uart1RxState==1)
     {
         if(strstr((const char *)uart1RxBuff, cmdLightupStr)!= NULL)        // 判断串口是否有发送'LIGHT UP'指令
         {
               HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET);
               printf('LIGHT UP OK');   
         }
         else if(strstr((const char *)uart1RxBuff, cmdLightoffStr)!= NULL)
         {
               HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET);
               printf('LIGHT OFF OK');  
         }           
         if(strstr((const char *)uart1RxBuff, cmdWaterONStr)!= NULL)        
         {
               HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET);
               printf('WATER ON OK');    
         }
         else if(strstr((const char *)uart1RxBuff, cmdWateroffStr)!= NULL)
         {
               HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET);
               printf('WATER OFF OK');   
         }                 
         uart1RxState=0;
         uart1RxCounter =0;
         memset(uart1RxBuff,0,128);             
     } 

}

该代码使用 STM32 的 HAL 库,实现了以下功能:

  1. 通过 SHT11 传感器采集温湿度信息,并通过串口打印出来。
  2. 使用按键 KEY1 和 KEY2 控制 LED1 和 LED2 的开关状态,并通过串口打印相应的状态信息。
  3. 通过串口接收 'LIGHT UP'、'LIGHT OFF'、'WATER ON'、'WATER OFF' 指令,分别控制 LED3 和 LED4 的开关状态,并通过串口打印相应的状态信息。

代码中,call_sht11() 函数用于获取温湿度信息,HAL_GPIO_ReadPin() 函数用于读取按键状态,HAL_GPIO_TogglePin() 函数用于切换 LED 状态,HAL_GPIO_WritePin() 函数用于控制 LED 状态,strstr() 函数用于判断串口接收到的指令。

注意事项:

  • 代码中使用的具体引脚和寄存器需要根据实际电路连接进行修改。
  • 需要根据实际情况修改代码中使用的函数和变量名。
  • 该代码仅供参考,实际应用中可能需要进行相应的修改和完善。

希望这对你有所帮助!

STM32 串口控制 LED 和温湿度采集代码示例

原文地址: https://www.cveoy.top/t/topic/owMo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录