diff --git a/V1.5/STM32F103_App1/HardWare/LOG/log.c b/V1.5/STM32F103_App1/HardWare/LOG/log.c index be00826..14b980a 100644 --- a/V1.5/STM32F103_App1/HardWare/LOG/log.c +++ b/V1.5/STM32F103_App1/HardWare/LOG/log.c @@ -43,8 +43,17 @@ void log_set_level(LogLevel level) } /* Output log message via USART1 (HAL) */ +static volatile uint8_t s_log_mute = 0; + +/* AT 窗口静音:BLE 模块与日志共用 UART1,AT 交互期间日志字节会污染模块命令解析 */ +void log_mute(uint8_t on) +{ + s_log_mute = on; +} + static void _log_print(LogLevel level, const char *tag, const char *fmt, va_list args) { + if (s_log_mute) return; if (current_level <= level) { char buf[256]; int len = vsnprintf(buf, sizeof(buf) - 2, fmt, args); diff --git a/V1.5/STM32F103_App1/HardWare/LOG/log.h b/V1.5/STM32F103_App1/HardWare/LOG/log.h index e4505ef..7363fe3 100644 --- a/V1.5/STM32F103_App1/HardWare/LOG/log.h +++ b/V1.5/STM32F103_App1/HardWare/LOG/log.h @@ -17,7 +17,8 @@ typedef enum { void log_set_level(LogLevel level); /* 改等级并落 EEPROM */ void log_load_level(void); LogLevel log_get_level(void); /* 开机读取保存的日志等级 */ -void log_lock_init(void); /* 日志互斥锁初始化(调度器启动前调用一次) */ +void log_lock_init(void); +void log_mute(uint8_t on); /* AT 窗口静音(BLE 设置期间暂停日志输出) */ /* 日志互斥锁初始化(调度器启动前调用一次) */ void log_debug(const char *fmt, ...); void log_info(const char *fmt, ...); diff --git a/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c b/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c index 6c4e55c..ef9a805 100644 --- a/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c +++ b/V1.5/STM32F103_App1/HardWare/USER_CMD/ble_at.c @@ -99,34 +99,47 @@ void ble_setup_name(void) return; } - /* 查询当前名称 */ - BLE_PC5_LOW(); - ble_delay(1100); /* 拉低 1s 进 AT 模式 */ - BLE_PC5_HIGH(); - ble_delay(600); /* 等模块切换到 AT 模式 */ + /* AT 窗口内静音日志:UART1 与模块共用,日志字节会污染模块的 AT 命令解析 */ + log_mute(1); - ble_flush_rx(); - HAL_UART_Transmit(&huart1, (uint8_t *)"AT+NAME=?\r\n", 12, 500); + /* 进 AT 模式并查询当前名称:无应答则重新拉 PC5 再试,最多 3 轮 */ const char *cur = NULL; - int t = 30; - while (t-- > 0 && !cur) { - ble_delay(50); - cur = USART1_GetCommand(); + for (int round = 0; round < 3 && !cur; round++) { + BLE_PC5_LOW(); + ble_delay(1100); /* 拉低 1s 进 AT 模式 */ + BLE_PC5_HIGH(); + ble_delay(600); /* 等模块切换到 AT 模式 */ + + ble_flush_rx(); + HAL_UART_Transmit(&huart1, (uint8_t *)"AT+NAME=?\r\n", 12, 500); + int t = 30; + while (t-- > 0 && !cur) { + ble_delay(50); + cur = USART1_GetCommand(); + } } - if (cur && strstr(cur, BLE_NAME) && pwr_cache == BLE_TX_POWER) { - /* 名称与功率都正确:直接回透传,不动任何设置 */ - log_info("> BLE: 名称已是 %s,无需设置", BLE_NAME); - ble_at_cmd("AT+TS=1", "OK", 1500); + if (!cur) { + log_mute(0); + log_warn("> BLE: 3 轮 AT 均无应答(模块未接/被手机占用/PC5 未拉低)"); return; } - if (cur && strstr(cur, BLE_NAME)) { + + if (strstr(cur, BLE_NAME) && pwr_cache == BLE_TX_POWER) { + /* 名称与功率都正确:直接回透传,不动任何设置 */ + ble_at_cmd("AT+TS=1", "OK", 1500); + log_mute(0); + log_info("> BLE: 名称已是 %s,无需设置", BLE_NAME); + return; + } + if (strstr(cur, BLE_NAME)) { /* 名称对但功率变了:只重设发射功率 */ snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER); ble_at_cmd(cmd, "OK", 1500); ble_at_cmd("AT+REBOOT=1", "OK", 1500); uint8_t p = BLE_TX_POWER; eepromWriteData(BLE_POWER_ADDR, &p, 1); + log_mute(0); log_info("> BLE: 发射功率已设置为 %d", BLE_TX_POWER); return; } @@ -149,9 +162,6 @@ void ble_setup_name(void) ble_at_cmd(cmd, "OK", 1500); snprintf(cmd, sizeof(cmd), "AT+UUIDW=%s", BLE_UUID_RX); ble_at_cmd(cmd, "OK", 1500); - log_info("> BLE: 名称与 UUID 已设置完成"); -#else - log_info("> BLE: 名称已设置为 %s", BLE_NAME); #endif /* 顺带设置发射功率 */ snprintf(cmd, sizeof(cmd), "AT+RFPOWER=%d", BLE_TX_POWER); @@ -167,9 +177,12 @@ void ble_setup_name(void) uint8_t p = BLE_TX_POWER; eepromWriteData(BLE_POWER_ADDR, &p, 1); } + log_mute(0); + log_info("> BLE: 名称/UUID/功率已设置完成"); } else { - log_warn("> BLE: 设置名称失败(模块未接或应答异常)"); ble_at_cmd("AT+TS=1", "OK", 1500); /* 确保回到透传 */ + log_mute(0); + log_warn("> BLE: 设置名称失败(模块未接或应答异常)"); } } diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index b369b77..8f75dca 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -202,3 +202,5 @@ 杩囩▼锛欴WT 纭欢瑙傚療鐐规姄鍒板悎娉曞啓鐐规棤璇紝瀹氫綅涓哄師涓柇鎺ユ敹璺緞鍦ㄧ壒瀹氭椂搴忎笅瀛楄妭涓㈠け - 鎭㈠ OLED 闃茬儳灞忓儚绱犲亸绉伙紙姣10s 鍙崇Щ 0/2/4px锛夛紝骞朵慨澶嶅乏渚ф畫鐣欙紙绉讳綅鍓嶅厛鍐欑┖鏍兼竻鑵剧┖鍒楋級 - OLED 鍋忕Щ骞呭害鍔犲ぇ鍒 0~24px锛5 妗o級锛屾寜鍐呭瀹藉害鑷姩閽充綅涓嶈秺鐣岋紝宸︿晶鑵剧┖鍒楀叏閲忔竻绌 +- 钃濈墮 AT 璁剧疆鍔犲浐锛欰T 绐楀彛鍐呴潤闊虫棩蹇楋紙UART1 涓庢ā鍧楀叡鐢紝鏃ュ織瀛楄妭浼氭薄鏌撴ā鍧楀懡浠よВ鏋愶級锛 + 杩 AT 妯″紡+鏌ヨ鏃犲簲绛旀椂閲嶆柊鎷 PC5 閲嶈瘯锛屾渶澶 3 杞