在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2355|回复: 8

[求助] STM USART协议相关

[复制链接]
发表于 2020-9-17 21:21:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本人刚进入公司实习,公司让做一个和STM F10X系列功能一致的USART。已经做了一半了,但是公司没人带,用户手册上很多功能不太清晰,也不知道用来干嘛。有大佬做过吗可以咨询交流一下?
发表于 2020-9-17 22:23:44 | 显示全部楼层
你所谓的交流,该不会是想让人家给你代码吧...
 楼主| 发表于 2020-9-17 22:49:04 | 显示全部楼层
emmm,怎么可能,不是伸手党。就是做过的同僚或是熟悉协议的请教一些问题,这几天我会再upload一些问题。
发表于 2020-9-18 11:11:44 | 显示全部楼层
UART的协议搜搜应该就很清楚吧,不行去STM32官网、论坛。
 楼主| 发表于 2020-9-18 11:44:52 | 显示全部楼层
基本的start,data,stop我当然知道。但是这个USART里面有非常多的协议,比如智能卡。还有对idle frame和break frame我也不懂是用来干什么的。
发表于 2020-9-19 14:09:13 | 显示全部楼层
IDLE: 多机通讯时,跟你不相关的数据包(从机地址不是寻呼你的),你希望屏蔽,所以会有MUTE模式,就是老子不关心。但是你不可能错过所有数据包呀,怎么办?所以主机寻呼不同的从机时,会有IDEL间隙(大于1帧数据宽度的高电平)。从机可以利用这个IDLE帧终止MUTE模式。然后检测下一个寻呼地址是否跟你有关系。STM还有个WAKE设置,就是要么利用IDLE帧终止MUTE,或者再进一步直接硬件判断寻呼地址,当地址匹配后再终止MUTE模式。
BREAK:LIN总线通讯时,有个SYNC帧,发送大于13位宽度的低电平,作为同步头。
 楼主| 发表于 2020-9-21 16:22:09 | 显示全部楼层


Mucar 发表于 2020-9-19 14:09
IDLE: 多机通讯时,跟你不相关的数据包(从机地址不是寻呼你的),你希望屏蔽,所以会有MUTE模式,就是老子 ...


非常感谢您的回答!不过您的部分回答不能说服我。1.关于IDLE frame。RM0008(用户手册)中写道:1)除了在智能卡模式,其余模式下使能TE均会在1 bit time后发送一个IDLE frame。这个IDLE frame是用来唤醒接收器吗?(假设接收器配置为监测到IDLE帧唤醒)。

2)手册中写了短暂拉低TE之后恢复,会在当前frame结束后发送一个IDLE frame。这里您说可以用来唤醒我觉得很合理。但是问题是我除了参考STM的手册,还参考了一个买过来的IP的网表。仿真显示,那个网表的IP一旦拉低TE,就会马上开始发送IDLE frame,这个行为和用户手册中的描述不一致。目前我暂时做成了和网表IP核一致。那如果设计成这个样子,每次拉低TE发送IDLE frame的时机就得控制得特别特别好(过早,则上一个数据发送完之前就被IDLE覆盖;过完,则下一个数据还没发送完就开始IDLE,下个数据直接丢失了),可是公司导师又说这个IP核他们用了很久了,没有什么问题(我TM)。
3)关于您说得IDLE唤醒,是有这个机制。但是和您说的稍有出入。唤醒有两种,一种是监测到IDLE frame唤醒,另一种是address唤醒。就是说每收到一个数据,会判断MSB是否为1,如果为1则认为这个数据是一个地址,便比较这个地址是否与自己的地址匹配,如果匹配则唤醒,不匹配则进入mute模式。通常来说,如果想以Byte为单位传送数据,显然要配置每次发送9bit数据,然后MSB是1的时候就是address,这样data就是8bit的。

总结一下:
1.TE短暂拉低之后恢复这个行为如果是用来做唤醒,那么STM手册上的描述应该没错,是IP核有问题。
2.TE使能之后发送一个IDLE frame这个行为的目的仅仅是为了唤醒吗?
3.IDLE frame还有什么用法?


2.关于您说的break frame,这个对我的帮助很大,图上也有个0x55我直接人傻了(其实以前我查到过,但那时候用户手册还没有看完,理解还不够深)。不过关于这个break frame,用户手册上还有一个图我不是特别懂。为什么要设置break frame检测为11bit或是10bit?另外break frame除了LIN模式,其余模式也会用到吗?下面这个图中,为什么情形2中在break frame前还有数据2?
image.png
发表于 2020-9-21 21:14:00 | 显示全部楼层
1.所有的设计都是为了通讯协议服务的,ST的模块也不例外。我觉得你把ST的所有设计当“标准答案”并不好。IDLE帧的目的就是TX线上发送一帧的全“1”,其实你啥都不干,弄个TIMER,硬等1帧的时间也就是IDLE了。
2.多机通讯时,由于SLAVE设备很多,所以作为从机的接收器,很多时间是不接收数据的,为了省功耗也好,为了提升内核的效率也罢,反正ST设计了个MUTE模式,在MMRQ触发MUTE后,只有2种途径可以WAKE,IDLE或者ADD地址匹配。利用IDLE进行WAKE的时候,只要接收到IDLE帧就终止MUTE,然后开始接收数据包。当然上位机需要字节判断IDLE后的第一个字节数据(地址信息)是否命中,如果命中就接收整个数据包,否则再次触发MMRQ继续MUTE。而利用地址命中WAKE,只要地址命中就WAKE然后开始接收数据包,如果地址不命中就自动MUTE,就是这么简单。
3.我一直都觉得ST的IDLE触发设计的很弱智,所以我做的USART就在SBKRQ的基础上增加了SIDRQ,可以直接触发1帧的IDLE。
4.LIN通信有固定格式的,ST的BREAK就是LIN的SYNC。但是我觉得ST的设计人员偷懒,他们没有独立的设计BREAK的发送电路,而是借用TX shifter,所以只能发送10位/11位的低电平。但是根据协议,应该发送13位低电平的。
5.多想想风清扬对令狐冲说的话,设计模块就跟学习剑法一样,理解剑意忘掉剑招,你知道要设计那些功能,符合那些协议就可以了。剩下的自己学习改进即可。
 楼主| 发表于 2020-9-21 21:51:49 | 显示全部楼层


Mucar 发表于 2020-9-21 21:14
1.所有的设计都是为了通讯协议服务的,ST的模块也不例外。我觉得你把ST的所有设计当“标准答案”并不好。ID ...


感谢回复!不过我们好像用的不是一个东西。我用的是F10X系列,您用的应该是其他系列。不过还是非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 16:37 , Processed in 0.036977 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表