设置波特率上面的坑
首先我使用了很多可自定义的波特率调试软件,但是发现,波特率在8K到14K的区域误差是相当严重的,其他区域也存在如此问题,申明:在单片里面设置波特率是很正确的,误差几乎很小,下面我再提供一段号称精确度高100倍的串口设置代码,拿去加在USART_Init()函数的末端即可
//在函数顶部定义这个
uint32_t baudsource,interger,fractional;
、、、、、
//在函数最下面再加上
baudsource = apbclock*1E5/(16*(USART_InitStruct->USART_BaudRate));
interger = baudsource/(u32)1E5;
fractional = (baudsource%(u32)1E5 + 3125)/6250;
USART1->BRR = (interger<<4) + fractional;
//反正这个意思就是算个更精确的数出来,给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的试,果断马上就得行了。。。
哎被坑惨了。。。。
分析一个基于WPF做的串口调试助手,看起还可以,分卷压缩的,都下下来解压即可,VS2015以上打开,
本帖最后由 李维强-15级 于 2017-7-31 02:20 编辑
分析一个基于WPF做的串口调试助手,看起还可以,分卷压缩的,都下下来解压即可,VS2015以上打开,
页:
[1]