tag 标签: uart接收数据

相关博文
  • 热度 19
    2016-4-20 21:16
    819 次阅读|
    0 个评论
    UART串口接收模块设计(工业环境)   上次笔记记录过UART发送协议,回顾一下UART发送端发送一个字节数据时序图: 对于其中的每一位进行采样,一般情况下每一位数据的中间点是最稳定的,因此一般应用中,采集中间时刻时的数据即可,如下图所示: (实验室条件) 但是在工业应用中,往往有非常强的电磁干扰,只采样一次就作为该数据的电平判定,是不保险的,有可能恰好采集到被干扰的信号而导致结果出错,因此需要使用多次采样求概率的方式进行。 以下为改进型的单bit数据接收方式示意图:     在这张图中,将每一位数据又平均分成了16小段,对于Bit_x这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用红色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此这两段时间的电平无效,采集时直接忽略。而中间这一时间段(用绿色标出),数据本身是比较稳定的,一般都代表了正确的结果。但是也不排除该段数据受强电磁干扰而出现错误的电平脉冲,因此对这一段电平,进行多次采样,并求高低电平发生的概率,6次采集结果中,取出现次数多的电平作为采样结果。例如,采样6次的结果分别为1/1/1/1/0/1/,则取电平结果为1,若为0/0/1/0/0/0,,则取电平结果为0,当6次采样结果中1和0各占一半(各3次),则可判断当前通信线路环境非常恶劣,数据不具有可靠性。   串口发送模块包含两个主要组件: 1、 起始位检测进程 2、 波特率产生模块 3、 数据接收进程   串口接收模块整体结构体   串口发送模块详细结构图   波特率时钟计算:   系统时钟周期为System_clk_period   波特率 波特率周期 波特率分频计数值 System_clk_period = 20计数值 9600 104167ns 104167/ System_clk_period/16 325-1 19200 52083ns 52083/ System_clk_period/16 163-1 38400 26041ns 26041/ System_clk_period/16 81-1 57600 17361ns 17361/ System_clk_period/16 54-1 115200 8680ns 8680/ System_clk_period/16 27-1     部分代码:(详情查看附件文档)   发送数据效果以及仿真: