• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dzw9
博客园    首页    新随笔    联系   管理    订阅  订阅
UART协议

通用异步收发器(Universal Asynchronous Receiver/Transmitter)

RS232
只要信号拉低,即可开始传送数据,不需要额外的时钟线进行数据的同步传输”
UART的一帧由起始位、数据位、校验位和停止位组成

无传输数据时为高电平,UART没有控制线,先发一位逻辑“0”开始进行数据传输
使用下降沿电平检测电路检测低电平,紧接着起始位的是数据位,可以是5、6、7或8位。
UART的“校验位”紧挨着“数据位”,采用奇偶校验方式,根据设置,校验位可以存在也可以不存在。
停止位作为停止标志,是在数据位(没有校验位)和校验位(有校验位)之后发送1~2位的逻辑“1”高电平。当发送完停止位之后,UART总线进入空闲

常用的波特率(每秒钟传输的数据位数)可以是300,1200,2400,9600,19200,38400,115200
假如我们的全局时钟频率为100MHz,波特率设置为9600,那么意味着每秒该UART传输协议可以传输9600bits的数据
在数据的传输中,信号可能受到一些干扰而产生一些抖动,接收端在采样时,通常都要采样多次,多数表决

1. 设计要求

单工UART,收/发器固定,
支持5-8位数据位、1/2位停止位、可选1位奇偶校验位
奇偶校验结果错误的检测能力,波特率2400、4800、9600可调

1)在baud_generate模块中将全局时钟信号100Mhz进行分频,按照约定的波特率如300,1200,2400,9600等要求进行分频处理
2)tx发射器模块划分状态机,按起始位,数据位,校验位,停止位进行状态划分,并区分状态转移的条件。

  • 发射机状态机
    IDLE:默认态,无数据传输,输出高电平,当enable信号到来时跳转到S1。
    S1:起始位,无数据传输,输出低电平,无条件跳转到S2。
    S2:数据位,数据传输发生在S2,根据数据输出高低电平,假如有校验位,跳到S3,假如数据传输不设校验位,跳转到S4
    S3:校验位,根据要求,输出奇数校验或者偶数校验的值,下一个状态无条件跳转到S4。
    S4:停止位,根据要求,输出1个或2个周期的高电平,下一个状态无条件跳转到IDLE。

3)rx接收器模块使用发送频率的十六倍频进行采样,使用多路选择的方法避免数据传输中可能会出现的错误

全局参数:
全局时钟频率 time_frequency = 100_000_000
RX,TX的波特率 baud_rate = 9_600
数据位宽 data_width = 8
奇偶校验,其中0为无校验位,1为偶校验,2为奇校验 test = 1
停止位位宽 stop_width = 2

posted on 2023-05-14 22:34  dzw9  阅读(159)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3