第四讲 串口通信之接收Word文档下载推荐.docx
- 文档编号:20207720
- 上传时间:2023-01-18
- 格式:DOCX
- 页数:7
- 大小:221.71KB
第四讲 串口通信之接收Word文档下载推荐.docx
《第四讲 串口通信之接收Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第四讲 串口通信之接收Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
在本程序中用16倍波特率时钟进行采样。
结合图示,我们讲解一下如何让采样时刻处于被采样数据的时间中间点:
1.在t1时刻若检测到低电平,就开始对这个低电平进行连续的检测2.当检测了8个时钟周期后,到达t2,此刻,若前面的8个周期都是低电平,则认为检测到了起始脉冲。
否则就认为是干扰,重新检测。
3.在检测到起始位后,再计数16个采样时钟周期就到达了第一个数据位的时间中间点t3,在此刻采样数据并进行保存。
4.然后再经过16个周期,就是第二个数据位的时间中间点,在此时刻进行采样;
然后,再经过16个周期,就是第三个数据位的时间中间点,在此时刻进行采样.一直这样采样,直到把所有的数据位采样完毕。
在理解完上面这个流程后,我们来按这个编制一下程序。
逐行解释:
11:
bclk为波特率的16倍。
这个同uart_t。
12:
一帧数据接收完毕信号,可以通知顶层模块来提取数据。
该信号在复位后为“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状态,并清零count。
82句,把当前传送线的电平状态送入到接收缓冲器rbufs,并通过83句将接收到的数据位计数器加1。
86-89:
描述采样停止位时执行的动作。
在本程序中,我们省略了对停止位的采样,这样做对功能本身不会产生影响。
87:
置r_ready为1,通知外部数据接收完毕88:
更新数据输出缓冲器89:
使状态机重新会到x_idle状态,开始下一轮的接收检测。
90-91:
描述状态机处于其它状态时的动作(假如状态机跑飞)。
在其它状态时,将状态机置为x_idle,使状态机正常工作。
以上只是编写了一个串口接收的元件,现在编写一个顶层调用模块,调用这个接收元件来接收PC机上通过“串口调试助手”发送的数据,并根据接收到的数据点亮不同的LED。
代码如下:
程序代码比较简单,就不再赘述了,大家可以自己去体会。
若有什么不明白的,请联系我们(qq:
1438801646)。
还是按串口发送中所说的那样连接好串口线,选中串口调试助手的“按十六进制发送”。
(否则在发送框里填入的是ASCII码,无法与程序中的case条件匹配上)。
板子上电,复位后,发送一些数值,看看板子上的LED是否按程序变化。
串口的发送和接收都已经讲解完毕了,大伙可以编写一个顶层模块,将收发模块同时调用,并与计算机进行通信。
我们也准备了一个程序,供大家参考附件:
uart_t_r-收发合置。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四讲 串口通信之接收 第四 串口 通信 接收