STMCU小助手
发布时间:2022-2-19 18:23
|
问题: 在某些串行工业总线协议中,如 Profibus,每帧发送的数据长度不定,导致接收方在接收数据时无法确定帧的结束点。 调研:+ @; e! b; w# N2 T STM32 系列产品的定时器具有 slave reset 模式。利用该功能可以捕获总线上的设定长度的空闲位。 , B( O6 Z9 j# ?( e, K 结论: 本例程在 STM3220G-EVAL 上实现了 USART 空闲帧的检测,空闲帧的长度可配置。在 Profibus 协议中,空闲帧长度为 33 位。检测到空闲帧后,接收方认为该帧结束,停止 DMA 接收数据。8 L" C2 L2 q$ J+ P& j, ^ 6 ?4 q5 F0 A: ?, ? 处理: 该例程可在 STM3220G-EVAL 上运行。使用 USART6 的 DMA 方式收发数据,使用 TIM9 的 Slave Reset 模式: TIM9_CH1 用于捕获串口的接收数据波形,并在下降沿将 TIM9 的计数器清零;TIM9_CH2 用于输出比较,监测是否收到连续 33 位的高电平,即空闲帧;PG8 用于输出空闲帧信号,每次检测到空闲帧时信号点平翻转。
示波器波形图: {* V* R8 `, a/ h" e 6 l; q7 f: y- R' f6 @; t" }& [
建议:9 o1 o- N9 {# X2 C8 Y2 Z3 Y( ] 本例程的缺陷:如果帧中最后的一个数据为 0xFF 时,将会被做为空闲帧的一部分处理。但是在Profibus 协议中,最后一个数据可自行定义。 在本例程的基础上,也可实现 SPI 等其它串行协议的断帧处理。 {# o4 k2 I' b3 l3 D, @ |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版