首先我使用了很多可自定义的波特率调试软件,但是发现,波特率在8K到14K的区域误差是相当严重的,其他区域也存在如此问题,
但是如果把波特率设置到那几个常用的 9600 115200 38400 等是很准确的,但是因为项目需要,对ISO14230通信协议里面的波特率要求10.4K,但是通过串口调试助手打出来实际只有9.3K,引起误码严重。
下面我以 战舰提供的串口助手为例,如果我把波特率设置到12000,那么实际示波器看到的却是9.4k左右,
这让我很郁闷。有不有现成的,测过波特率用起来准的串口调试助手
void Init_USART2(u8 clk,u32 b)
{
float div;
u16 mantissa;
u16 fraction;
RCC->APB1ENR |= 1<<17; //USART2时钟使能
RCC->APB2ENR |= 1<<2; //使能PA口时钟 PA2:TX PA3:RX
GPIOA->CRL &= 0XFFFF00FF;//PA2:复用推挽输出
GPIOA->CRL |= 0X00004B00;//PA3:浮空输入
RCC->APB1RSTR |= 1<<17; //复位串口时钟
RCC->APB1RSTR &= ~(1<<17);//停止复位时钟
div = (float)(clk*1000000)/(b *16);
mantissa = div;
fraction = (div - mantissa) *16;
mantissa <<= 4;
mantissa += fraction;
USART2->BRR = mantissa;//设置波特率
USART2->CR1 = 0X200C; //使能串口模块,使能接收和发送
}
一周热门 更多>