Web使用SerialPort调用串口

最近公司需要接入非接触读卡器到系统, 但是绝对没有必要再单独开发个桌面应用来进行串口通信, 因此准备使用Web的SerialPort来实现. 感觉挺好玩的, 就准备弄一个玩. 借了个读卡器设备试试.

通信参数

根据提供的开发文档可以得知通信参数

1
115200,8,n,1
含义为:

波特率:115200, 数据长度:8, 奇偶校验:无, 停止位:1

波特率

波特率表示每秒钟传送的码元(符号)的个数, 单位是波特(Baud,symbol/s).

与比特率的关系

通过不同的调制方式, 可以在一个码元符号上负载多个bit位信息

I为传信率, S为波特率, N为每个符号承载的信息量. 比特率=波特率*单个调制状态对应的二进制位数.

在串口通信中, 传输码元(符号)就是比特(bit), 即波特率=比特率=时钟周期的数值

串口模式下, 若波特率是115200, 1秒钟只能传送 数据, 而不是 数据.

这是因为在网络传输的时候为了区别一个字节的开始和结束需要在每个字节前加一位0, 后面加一位1. 其中有8个b是表示数据, 另外2b是控制信息. 在串口模式下传送数据, 传送1Byte有效数据需要10位.

波特率怎么计算

假设系统时钟50M,波特率115200. 则传输1bit需要 。需要计数 个。那么1Byte(串口传输格式为:1bit起始位+8bit数据位+1bit停止位)是不是循环计数10次434就可以传输完毕。

什么时候去采样串口线上的数据

观察上图,Buad_Flag信号(通道2)表示了传输1Bit传输的间隔,每遇到1个Buad_Flag=1的信号,数据线上切换1次数据,所以两个Buad_Flag=1之间的数据是稳定的数据,根据抽样定理是不是应该在两个Buad_Flag=1信号的中间去采样数据呢,其实就是在1bit数据持续期间的中间点采样,才能得到最稳定的数据。