好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第四讲 串口通信之接收.doc

10页
  • 卖家[上传人]:suns****4568
  • 文档编号:87896602
  • 上传时间:2019-04-14
  • 文档格式:DOC
  • 文档大小:250.50KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 上一讲我们讲解了串口的发送操作这一讲我们继续讲解串口的接收在学习这个串口接收的过程中,我们要巩固这个状态机的写法,也再熟悉熟悉前几讲讲解的内容 首先回顾一下异步串口通信的数据格式:由于在空闲状态时,传送线为逻辑“1”状态,而数据的传送总是以一个起始位“0”开始,所以当接收器检测到一个从“1”向“0”的跳变时,便视为可能的起始位(要排除干扰引起的跳变);起始位被确认后,就知道发送器已开始发送,接收器就可以按这个数据通信格式接收后续的数据了;当检测到停止位“1”后就表明一帧字符数据已发送完毕关于接收器的设计最主要的一点是如何提高采样的准确率,最好是保证采样点处于被采样数据的时间中间点所以,在接收采样时要用比数据波特率高n倍(n≥1)速率的时钟对数据进行采样在本程序中用16倍波特率时钟进行采样结合图示,我们讲解一下如何让采样时刻处于被采样数据的时间中间点:1. 在t1时刻若检测到低电平,就开始对这个低电平进行连续的检测2. 当检测了8个时钟周期后,到达t2,此刻,若前面的8个周期都是低电平,则认为检测到了起始脉冲否则就认为是干扰,重新检测3. 在检测到起始位后,再计数16个采样时钟周期就到达了第一个数据位的时间中间点t3,在此刻采样数据并进行保存。

      4. 然后再经过16个周期,就是第二个数据位的时间中间点,在此时刻进行采样;然后,再经过16个周期,就是第三个数据位的时间中间点, 在此时刻进行采样…..一直这样采样,直到把所有的数据位采样完毕 在理解完上面这个流程后,我们来按这个编制一下程序 逐行解释:11:bclk为波特率的16倍这个同uart_t12:一帧数据接收完毕信号,可以通知顶层模块来提取数据该信号 在复位后为“0”,在接收完一帧数据后变高,然后直到下一次检 测到起始位后,即下一帧数据到来时才复位到“0”顶层模块可 通过检测该信号的上升沿来判断一帧数据是否已经接收完毕19:用type声明一种枚举类型,用来表示接收状态机的状态共有五 状态:r_idle----空闲状态,r_sample_start_bit----采样起始位状 态,r_sample_data_bit-----采样数据位状态,r_stop----采样停止位状 态24-31:通过一个D触发器,先把串口的输入信号整形一下,这样可减 少干扰引起的检测误判D触发器的原理的工作机制大家应该 明白吧,这里就不再赘述了33-35:定义一些变量count为时钟bclk的计数器,因为采用了16倍 频的时钟,所以一个数 据位会维持16个bclk时钟周期,需要 用count来计数。

      rcnt是对接收到的数据位进行计数这个和串 口的发送程序有点类似的32-95:通过状态机来接收一帧数据 37-41:系统复位 38:复位后状态机设置为空闲状态 39-40:清零计数器 41:置r_ready为0,表示数据还没接收完毕 42-93:系统正常工作,通过状态机的变化实现一帧数据的接收, 用case语句实现状态转变 44-53:描述空闲状态时的执行动作 45-49:若传送线上检测到低电平则立即转入 r_sample_start_bit状态,并清零计数器反之,若没 有检测到低电平,则还是使系统处于r_idle状态,还 需要不断的去检测传送线的状态 55-68:描述采样到起始位后执行的动作 56-68:假设在44-53句中检测到的低电平是起始位,则这 个低电平应该持续 16个时钟(因为是16倍频采样 的)在这16个时钟周期内,若是干扰,则可能会 在这16个时钟的时间内检测到高电平若有,那么 状态机就回到x_idle 状态,否则就认为已经检测到 了起始位 57-64:在检测到起始位后的8个时钟里总线若一直是低电 平,则认为是检测到了起始位,状态机切换至 r_sample_data_bit,并初始化一些计数器, 准备开 始采样数据位。

      70-85:描述采样数据位时执行的动作 71-73:连续计数16个bclk时钟 74-85:当计数到16个bclk后,就开始采样传送线的电平状 态 75-78:在检测传送线数据前首先判断是否已经接收完数据 位,若是就使状态机转入r_stop 状态,并清零计数 器 79-83:若数据位还没有接收完毕,则80句,保持状态机处 于 r_sample_data_bit状态,并清零count82句,把 当前传送线的电平状态送入到接收缓冲器rbufs,并 通过83句将接收到的数据位计数器加1 86-89:描述采样停止位时执行的动作在本程序中,我们省 略了对停止位的采样,这样做对功能本身不会产生影 响 87:置r_ready为1,通知外部数据接收完毕 88:更新数据输出缓冲器 89:使状态机重新会到x_idle状态,开始下一轮的接收检测 90-91:描述状态机处于其它状态时的动作(假如状态机跑飞) 在其它状态时,将状态机置为x_idle,使状态机正常工 作 以上只是编写了一个串口接收的元件,现在编写一个顶层调用模块,调用这个接收元件来接收PC机上通过“串口调试助手”发送的数据,并根据接收到的数据点亮不同的LED。

      代码如下: 程序代码比较简单,就不再赘述了,大家可以自己去体会若有什么不明白的,请联系我们(:1438801646) 还是按串口发送中所说的那样连接好串口线,选中串口调试助手的“按十六进制发送”否则在发送框里填入的是ASCII码,无法与程序中的case条件匹配上)板子上电,复位后,发送一些数值,看看板子上的LED是否按程序变化 串口的发送和接收都已经讲解完毕了,大伙可以编写一个顶层模块,将收发模块同时调用,并与计算机进行通信我们也准备了一个程序,供大家参考《附件:uart_t_r-收发合置》。

      点击阅读更多内容
      相关文档
      Unit2 Health and Fitness语法课件-(高教版2023·基础模块2).pptx 九年级数学提升精品讲义 用配方法求解一元二次方程(原卷版).docx 九年级数学提升精品讲义 一元二次方程的根与系数的关系(解析版).docx 2025学年九年级化学优学讲练(人教版) 化学实验与科学探究(解析版).docx 九年级数学提升精品讲义 一元一次不等式与一元一次不等式组(原卷版).docx 九年级数学提升精品讲义 因式分解(解析版).docx 九年级数学提升精品讲义 相似三角形的性质(原卷版).docx 2025年 初中七年级数学 相交线与平行线 知识突破速记与巧练(原卷版).docx 九年级数学提升精品讲义 中点模型之斜边中线、中点四边形(解析版).docx 2025学年九年级化学优学讲练(人教版) 分子和原子(解析版).docx 九年级数学提升精品讲义 正方形的性质(原卷版).docx 九年级数学提升精品讲义 用因式分解法求解一元二次方程(解析版).docx 2025年 初中七年级数学 实数 知识突破速记与巧练(原卷版).docx 九年级数学提升精品讲义 应用一元二次方程(原卷版) (2).docx 2025年 初中七年级数学 相交线与平行线 压轴专练速记与巧练(解析版).docx 九年级数学提升精品讲义 用公式法求解一元二次方程(解析版).docx 2025学年九年级化学优学讲练(人教版) 化学方程式的书写(原卷版).docx 九年级数学提升精品讲义 应用一元二次方程(解析版) (2).docx 2025年 初中七年级数学 数据的收集、整理与描述 综合测试速记与巧练(解析版).docx 九年级数学提升精品讲义 中点模型之斜边中线、中点四边形(原卷版).docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.