这两天写了个串口发送的程序,串口发送与接收,在单片机看来,很简单,也许调用几条语句,就能实现所需要的功能,而CPLD实现起来,便应当了解到具体数据的传输操作。类似大多数传输协议,串口也有自己的传输协议。如下图所示
串口的数据传输形式有多种,而大多数形式是起始位(位宽为1)、数据位(位宽为8)、校验位(位宽为1)、停止位(位宽为1)。便按照这种形式来写,注意串口总线“高电平”是默认的状态,起始位应当拉低电平,此后为8个数据位,然后是校验位和停止位。这里将校验位和停止位置为高电平。
另外,串口传输一个重要的参数为波特率,波特率决定数据传输的正确性,如果波特率不准确,数据传输毫无意义可言。波特率----数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。波特率作为串口传输速度,它表征的是1个位(bit)的传输周期,常用波特率为9600bps和115200bps,以115200bps为例,即数据传输的速度为每秒115200bit,也就是115200/8=14400Byte。板载的时钟为48MHz的有源晶振,若应用于波特率,需要进行分频,设置变量Counter计数48_000_000/115200 = 416,即计数416个上升沿,波特率时钟模块产生一个上升沿。而数据的传输则要在电平稳定是进行,即时钟计数发生在边沿有效,数据计数发生在电平有效。
写程序时,按照模块机制来写,会更简单明了,不是程序简单了,而是系统分为几部分,完成子模块的功能,子模块与子模块连接采用wire型变量,这样便于维护和修改。类似于之前的脉冲电源,分割为恒流源部分、逆变部分、反馈调节部分、输出调节部分、温度控制调节部分。这样分隔为部分,每个部分稳定可靠运行,再结合成系统。但想法正确,有可能
写出来不是一把好使的。
发现复位后总是出现一帧数据,然后就没有数据了,应该是数据传输后没有复位到初始值,查到上述情况,将if(BPS_CLK)屏蔽后,就可以看到连续信号,因为不屏蔽,isDone不能拉低为零,这样不能返回脉冲信号。另外,用串口调试助手看时,串口调试助手默认设置是这种情况,8位数据位、None校验位、1位停止位,所以用它看时会出错,可以用示波器看。
用户1711475 2014-4-28 17:12
用户438660 2014-4-14 08:59
用户1670771 2014-4-11 23:50
用户403664 2014-4-10 10:33
用户1670771 2014-4-10 09:51
残弈悟恩 2014-4-10 07:45