一箭双雕串口波特率问题[已解决]
本帖最后由 firefly2k 于 2024-4-15 13:24 编辑请教下,我用的一箭双雕的例程
我修改了工作模式,在初始进入时,并不进入一箭双雕的工作模式。只有在收到特殊指令后,才进入。
现在的问题是,我初始进入不设置波特率,用一箭双雕默认的波特率初始化值,如下(应该是115200),但我实际收发时怎么发现波特率实际是9600呢?可能是什么原因?如何设置为115200波特率?
注:烧录时的主频设置与程序内部定义是一致的,都是24MHz
主程序部分:
sys_init();
uart_init();
timer_init();
usb_init();
EA = 1;
hmi_mode_id = 0; //正常模式
while (1)
{
if(hmi_mode_id) uart_polling();
if(f1s)
{
f1s = 0;
printf("1 Sec\r\n");
}
}
void uart_init()
{
SCON = 0x50;
TMOD &= ~0xf0;
TL1 = BR(MAIN_Fosc,115200);
TH1 = BR(MAIN_Fosc,115200) >> 8;
AUXR |= T1x12;
TR1 = 1;
ES = 1;
S2CON = 0x50;
T2L = BR(MAIN_Fosc,115200);
T2H = BR(MAIN_Fosc,115200) >> 8;
AUXR |= T2x12;
AUXR |= T2R;
IE2 |= ES2;
LineCoding1.dwDTERate = REV4(115200);
LineCoding1.bCharFormat = 0;
LineCoding1.bParityType = 0;
LineCoding1.bDataBits = 8;
LineCoding2.dwDTERate = REV4(115200);
LineCoding2.bCharFormat = 0;
LineCoding2.bParityType = 0;
LineCoding2.bDataBits = 8;
Uart1TxBusy = 0;
Uart1RxRptr = 0;
Uart1RxWptr = 0;
Uart1TxRptr = 0;
Uart1TxWptr = 0;
}
51的库函数没用过,看着晕{:4_167:} 21cnsound 发表于 2024-4-15 10:07
51的库函数没用过,看着晕
这里一个库函数也没有呀,都是给的例程里的函数{:4_165:} 一箭双雕的例程可以根据串口助手设置的波特率自动修改串口波特率。
串口助手设置9600波特率,MCU就会切换串口波特率为9600。
串口助手设置115200波特率,MCU就会切换串口波特率为115200。
波特率修改可以参考uart_set_baud函数 本帖最后由 firefly2k 于 2024-4-15 13:21 编辑
乘风飞扬 发表于 2024-4-15 11:10
一箭双雕的例程可以根据串口助手设置的波特率自动修改串口波特率。
串口助手设置9600波特率,MCU就会切换串 ...
谢谢,试过了,确实是。我开始是用别的串口助手改波特率发现不行。看了您说的后,我在STC串口助手中改了后,就可以了。也就是自动切换波特率只支持STC的串口助手 firefly2k 发表于 2024-4-15 13:12
谢谢,试过了,确实是。我开始是用别的串口助手改波特率发现不行。看了您说的后,我在STC串口助手中改了后 ...
STC的串口助手功能比较强大,除了传统串口通信外,还可以支持USB-CDC虚拟串口,打开串口或者在串口助手里修改波特率后会回传波特率、校验位等设置到MCU。 乘风飞扬 发表于 2024-4-15 13:47
STC的串口助手功能比较强大,除了传统串口通信外,还可以支持USB-CDC虚拟串口,打开串口或者在串口助手里 ...
{:4_250:} firefly2k 发表于 2024-4-15 13:12
谢谢,试过了,确实是。我开始是用别的串口助手改波特率发现不行。看了您说的后,我在STC串口助手中改了后 ...
那要是别的软件还麻烦了,要是通用就方便了 乘风飞扬 发表于 2024-4-15 11:10
一箭双雕的例程可以根据串口助手设置的波特率自动修改串口波特率。
串口助手设置9600波特率,MCU就会切换串 ...
波特率是不是自适配,还是只有使用stc串口助手才能自己切换。 soma 发表于 2024-4-16 19:22
波特率是不是自适配,还是只有使用stc串口助手才能自己切换。
支持USB-CDC虚拟串口的串口助手才会回传配置参数给设备,设备才能进行自适应切换。
页:
[1]