重工电子论坛

标题: 设置波特率上面的坑 [打印本页]

作者: 李维强-15级    时间: 2017-7-31 02:07
标题: 设置波特率上面的坑
首先我使用了很多可自定义的波特率调试软件,但是发现,波特率在8K到14K的区域误差是相当严重的,其他区域也存在如此问题,

申明:在单片里面设置波特率是很正确的,误差几乎很小,下面我再提供一段号称精确度高100倍的串口设置代码,拿去加在USART_Init()函数的末端即

  1. //在函数顶部定义这个
  2. uint32_t   baudsource,interger,fractional;
  3. 、、、、、
  4. //在函数最下面再加上
  5.      baudsource = apbclock*1E5/(16*(USART_InitStruct->USART_BaudRate));
  6.      interger = baudsource/(u32)1E5;
  7.      fractional = (baudsource%(u32)1E5 + 3125)/6250;
  8.      USART1->BRR = (interger<<4) + fractional;
  9. //反正这个意思就是算个更精确的数出来,给BRR赋值嘛。。
复制代码



--------------------------------------------------------------------------------------------------------------------
下面说说PC端,为了调试需要,从PC端发串口数据到单片,是更容易调试的,但是遇到问题。
如果用任意可以自定义波特率的串口调试软件,把波特率设置到那几个常用的 9600 115200 38400 等是很准确的,但是因为项目需要,对ISO14230通信协议里面的波特率要求10.4K,但是通过串口调试助手打出来实际只有9.3K,引起误码严重。
下面我以 战舰提供的串口助手为例,如果我把波特率设置到12000,那么实际示波器看到的却是9.4k左右,




然后我很郁闷,以为他们都写错程序了,由于卡在这里很久了,马上打开VS2017,用C#自己写了个串口调试的程序,发现效果和人家写的一样。。。郁闷了,我想可能是C#固定了波特率,只能写那几个系统分配的波特率,这个从OS的设备属性里面可以看出,如下图

,于是乎,改用C++,因为windows开启所有CPU以外的资源都是把资源看做是一个文件来打开的,例如显卡,网卡等,串口也不例外,所以我直接用MFC里面定义设备描述表DC,波特率设置为12000,然后CreateFile打开串口,再发一个数据0xdd,结果效果还是一样。。。郁闷了。。
于是乎马上去翻MSDN,相信微软不会忽悠我的,
找到SerialPort::BaudRate Property,有如下描述

恍然大悟,可能是设备不支持。。。现在403教室里面的,是统一买的一盒PL-2303转出来的。于是我马上拿个CH340的试,果断马上就得行了。。。
哎被坑惨了。。。。

作者: 李维强-15级    时间: 2017-7-31 02:18
分析一个基于WPF做的串口调试助手,看起还可以,分卷压缩的,都下下来解压即可,VS2015以上打开,
SerialCom1.part1.rar (3 MB, 下载次数: 0) SerialCom1.part2.rar (2.06 MB, 下载次数: 0)
作者: 李维强-15级    时间: 2017-7-31 02:19
本帖最后由 李维强-15级 于 2017-7-31 02:20 编辑

分析一个基于WPF做的串口调试助手,看起还可以,分卷压缩的,都下下来解压即可,VS2015以上打开,

SerialCom1.part1.rar

3 MB, 下载次数: 0

SerialCom1.part2.rar

2.06 MB, 下载次数: 0






欢迎光临 重工电子论坛 (http://cqutlab.cn/) Powered by Discuz! X3.1