[任務]?
?要求通過單片機實現以下功能:?
?1.單片機有三種工作模式(定義全局變量MM表示模式,MM=1,2,3表示三種不同的模式)?
?LED控制模式?
?風扇控制模式?
?蜂鳴器控制模式?
?2.可以在某一個模式下通過拓展板KEY1按鍵控制設備?
?(按鍵按下一次,設備打開,按鍵再按下一次,設備關閉(設備管腳輸出反向電平)?
?3.關于模式的切換可以通過以下兩種方式:?
(通過串口通信,電腦端發送當前模式(設置串口接收中斷,接收到的字符串進行比較)?
電腦發送LED、進入LED模式?
?電腦發送FAN,進行風扇控制模式?
?電腦發送BEE,進入蜂鳴器控制模式?
?通過底板用戶自定義按鍵進行模式切換??
?.按鍵按下一次進入發光二極管模式,再按一次,進入風扇模式,再按一下,進入蜂鳴器模式
?1.按鍵控制模式轉換
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{//user按鍵對于GPIO接口為PC12if(GPIO_Pin == GPIO_PIN_12){work_model++;if(work_model>9){work_model=1;}}//拓展版KEY1按鍵為PC9if(GPIO_Pin == GPIO_PIN_9){if(work_model%3==0){//LD1為PC4HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4);}else if(work_model%3==1){//風扇為PC6HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);}else if(work_model%3==2){//蜂鳴器為PA15HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_15);}}
}
2.串口輸入切換模式
//重寫的fputc函數
int fputc(int ch,FILE* fp){HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,3);return ch;
}//回調函數
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{printf("output:%s\n\r",buf);if(strcmp(buf,"LED")==0){work_model = 0;}if(strcmp(buf,"FAN")==0){work_model = 1;}if(strcmp(buf,"BEE")==0){work_model = 2;}memset(buf,0,sizeof(buf));
}