STM32作业实现(二)串口控制led

目录

STM32作业设计
STM32作业实现(一)串口通信
STM32作业实现(二)串口控制led
STM32作业实现(三)串口控制有源蜂鸣器
STM32作业实现(四)光敏传感器
STM32作业实现(五)温湿度传感器dht11
STM32作业实现(六)闪存保存数据
STM32作业实现(七)OLED显示数据
STM32作业实现(八)触摸按键TPAD
STM32作业实现(九)驱动舵机
源码位置

开启led引脚


完成uart控制led开关功能

main.c

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
    {
    // 判断本次字符是不是\r
    if(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 */
相关推荐
不悔哥1 小时前
开源 Zephyr:现代嵌入式 RTOS 长什么样
单片机·开源·嵌入式
广州灵眸科技有限公司2 小时前
瑞芯微(EASY EAI)RV1126B display
开发语言·数据库·人工智能·科技·嵌入式硬件
the sun342 小时前
CMSIS标准与各种库的发展历史+哈弗架构+CPU统一编址
stm32·架构·嵌入式
国产化创客3 小时前
创客开发入门(三)Arduino IDE 开发环境
ide·单片机·嵌入式硬件·课程设计·智能硬件
CedarQR3 小时前
LubanCat-2 (RK3568) Debian 下让 H3C Magic USB 无线网卡(AIC8800)联网全记录
linux·网络·单片机·嵌入式硬件·debian·3568·h3c
LongRunning13 小时前
【BLE】STM32WB55_低功耗(十一)
stm32
芯片人00713 小时前
纯硬件一键开关机ASIC芯片,为什么比 MCU 方案更适合更可靠
人工智能·单片机·嵌入式硬件·物联网·芯片
染予14 小时前
Ka 阵面星历下发与执行逻辑说明
stm32·嵌入式硬件
芯片人00715 小时前
武汉广昇科技的GMUX1308A模拟开关芯片成功导入中国台湾上市企业联昌电子,助力汽车电子供应链自主可控
科技·嵌入式硬件·物联网·汽车·芯片
恒锐丰科技林技术员18 小时前
EG2181D 半桥栅极驱动芯片详解:高压 MOS/IGBT 驱动实用器件
经验分享·嵌入式硬件·硬件工程