目录
STM32作业设计
STM32作业实现(一)串口通信
STM32作业实现(二)串口控制led
STM32作业实现(三)串口控制有源蜂鸣器
STM32作业实现(四)光敏传感器
STM32作业实现(五)温湿度传感器dht11
STM32作业实现(六)闪存保存数据
STM32作业实现(七)OLED显示数据
STM32作业实现(八)触摸按键TPAD
STM32作业实现(九)驱动舵机
源码位置
开启led引脚
完成uart控制led开关功能
main.c
/* USER CODE BEGIN PV */
uint8_t uart_data = 0; // 处理不定长参数
char uart_buf[MAXSIZE] = ""; // 保存不定长命令
uint16_t uart_flag = 0; // 高位 字节用做标志位 低位 字节记录数组使用空间
/* USER CODE END PV *//* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1, &uart_data, 1); // 处理不定长数据
/* USER CODE END 2 *//* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if((0x8000 & uart_flag) == 0) // 未收到\n结束{if(0x4000 & uart_flag) // 如果标志位当前是\r{// 判断本次字符是不是\rif(uart_data == '\n'){uart_flag |= 0x8000; // 如果收到\n更新标志位}else{uart_flag = 0; // \r后不是\n结束符不合法,重置数据}}else{if(uart_data == '\r') // 如果收到了\r更新标志位{uart_flag |= 0x4000;}else{// 正常数据存储到字符数组中uart_buf[uart_flag & 0x0fff] = uart_data;uart_flag++; // 下标偏移}}}if(0x8000 & uart_flag) // 收到完整的指令后{// 回显指令HAL_UART_Transmit(&huart1, (uint8_t*)uart_buf, uart_flag & 0x0fff, 1000);if(strncmp(uart_buf, "led:on", 6) == 0){HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);}else if(strncmp(uart_buf, "led:off", 7) == 0){HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);}uart_flag = 0; //处理完命令清空数据memset(uart_buf, 0 , sizeof(uart_buf));}HAL_UART_Receive_IT(&huart1, &uart_data, 1); // 重新开启中断接收
}
/* USER CODE END 4 */
使用 UartAssist 工具发送与接收串口信息