T1_CHL日志打印串口 如何配成奇偶校验
T1_CHL我在使用日志打印串口(串口一)初始不管配置成奇校验还是偶校验,出来的数据都是无校验的数据 导致无法与需要设置串口校验的芯片进行通信
T1_CHL我在使用日志打印串口(串口一)初始不管配置成奇校验还是偶校验,出来的数据都是无校验的数据 导致无法与需要设置串口校验的芯片进行通信
您好!
关于 T1 (BK7231N) 日志串口(UART1)无法配置奇偶校验的问题:
日志串口(CHL/UART1)的波特率和数据位由 bootloader 固定,在 TuyaOS 运行时通过 tal_uart_init() 修改奇偶校验不会生效,这是因为:
日志串口被锁定为 8N1 格式:
UART1 在 bk7231n 的硬件配置中固定为 8 位数据、无校验(8N1),这是为了保证 bootloader 通信的兼容性,应用层无法动态修改。
解决方案 - 使用 UART2 进行带校验的通信:
如果您需要与外部芯片通过带奇偶校验的串口通信,建议改用 UART2(应用串口),示例代码:
Code: Select all
#include "tal_uart.h"
UartConfig_t uart_cfg = {
.baudRate = 115200,
.dataBits = TAL_UART_DATA_BITS_8,
.stopBits = TAL_UART_STOP_BITS_1,
.parity = TAL_UART_PARITY_ODD, // 奇校验,或 TAL_UART_PARITY_EVEN 偶校验
.flowCtrl = TAL_UART_FLOW_CTRL_NONE,
};
tal_uart_init(TAL_UART_ID_2, &uart_cfg);T1 UART2 引脚:
请参考 T1 芯片手册确认 UART2 的 TX/RX 引脚,并在 tuyaos_adapter_kv.h 中配置对应的 GPIO 复用。
请问您使用带校验串口的场景是什么?与哪种芯片通信?我可以提供更具体的配置建议。
您好 那为什么CBU_bk7231N 它是可以可以去配置日志打印串口的奇偶校验 是因为底层驱动不同吗
https://www.tuyaos.com/viewtopic.php?p= ... %A3#p13717
lwq 2026年 Apr 17日 18:15您好 那为什么CBU_bk7231N 它是可以可以去配置日志打印串口的奇偶校验 是因为底层驱动不同吗
https://www.tuyaos.com/viewtopic.php?p= ... %A3#p13717
愚者千虑必有一得 2026年 Apr 17日 18:05您好!
关于 T1 (BK7231N) 日志串口(UART1)无法配置奇偶校验的问题:
日志串口(CHL/UART1)的波特率和数据位由 bootloader 固定,在 TuyaOS 运行时通过 tal_uart_init() 修改奇偶校验不会生效,这是因为:
日志串口被锁定为 8N1 格式:
UART1 在 bk7231n 的硬件配置中固定为 8 位数据、无校验(8N1),这是为了保证 bootloader 通信的兼容性,应用层无法动态修改。解决方案 - 使用 UART2 进行带校验的通信:
如果您需要与外部芯片通过带奇偶校验的串口通信,建议改用 UART2(应用串口),示例代码:Code: Select all
#include "tal_uart.h" UartConfig_t uart_cfg = { .baudRate = 115200, .dataBits = TAL_UART_DATA_BITS_8, .stopBits = TAL_UART_STOP_BITS_1, .parity = TAL_UART_PARITY_ODD, // 奇校验,或 TAL_UART_PARITY_EVEN 偶校验 .flowCtrl = TAL_UART_FLOW_CTRL_NONE, }; tal_uart_init(TAL_UART_ID_2, &uart_cfg);T1 UART2 引脚:
请参考 T1 芯片手册确认 UART2 的 TX/RX 引脚,并在 tuyaos_adapter_kv.h 中配置对应的 GPIO 复用。请问您使用带校验串口的场景是什么?与哪种芯片通信?我可以提供更具体的配置建议。
首先,系统初始化已经占用了日志串口,输出日志,不能再修改和配置;
要将日志串口用作和其它MCU进行串口通信,并且支持奇偶校验配置, 需要如下修改:
SDK在3.11.31以上,找到文件vendor/T1/T1_os/T1/app/config/sys_config.h里面,增加宏
#define SWITCH_LOG_UART_EN 1
使日志串口默认不作为日志输出
2.在系统启动tuya_app_main应用里,将该串口初始化成其它通信串口,示例代码如下:
static void log_uart_test_thread(void *arg)
{
TUYA_UART_BASE_CFG_T uart_cfg = {0};
uart_cfg.baudrate = 115200;
uart_cfg.parity = TUYA_UART_PARITY_TYPE_EVEN;
uart_cfg.databits = TUYA_UART_DATA_LEN_8BIT;
uart_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT;
uart_cfg.flowctrl = TUYA_UART_FLOWCTRL_NONE;
UCHAR_T aaa = 7;
tkl_uart_init(TUYA_UART_NUM_1, &uart_cfg);
TAL_PR_DEBUG("log_uart_test_thread init finished");
while (1) {
tkl_uart_write(TUYA_UART_NUM_1, &aaa, 1);
//TAL_PR_DEBUG("log_uart_test_thread sleep 1000");
tkl_system_sleep(1000);
}
tkl_uart_deinit(TUYA_UART_NUM_1);
}
tkl_thread_create(&log_uart_test_thread_handle, "log_uart_test_thread", 1024, 4, log_uart_test_thread, NULL);
已测试确认奇偶校验生效,可以正常工作,详细见附件抓到的波形。
3.如果还需要模组的日志,可以通过GPIO模拟,输出日志,代码示例如下:
static void tuya_app_thread(void *arg)
{
TUYA_UART_BASE_CFG_T uart_cfg = {0};
uart_cfg.baudrate = 115200;
uart_cfg.parity = TUYA_UART_PARITY_TYPE_NONE;
uart_cfg.databits = TUYA_UART_DATA_LEN_8BIT;
uart_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT;
uart_cfg.flowctrl = TUYA_UART_FLOWCTRL_NONE;
uart_cfg.tx_pin = 23; 设置GPIO23作为日志输出
uart_cfg.rx_pin = 0;
tkl_gpio_simulate_uart_init(TUYA_UART_NUM_2, &uart_cfg);
Code: Select all
user_main();
tkl_thread_create(&log_uart_test_thread_handle, "log_uart_test_thread", 1024, 4, log_uart_test_thread, NULL);
tkl_thread_release(ty_app_thread);
ty_app_thread = NULL;}
GPIO模拟串口日志输出,串口接收软件波特率设置460800
好的 谢谢!