ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F4] STM32F407:USART的【 RTS 信号】之深度疑问 。

[复制链接]
1715|9
 楼主 | 2015-4-27 17:24 | 显示全部楼层 |阅读模式
:) 最近 要开始 写 串口的 代码了。所以得 做功课:

CTS 的 测试 很简单顺利——CTS 只要为‘1’就会冻结
USART、使它暂停 发送数据,如果冻结时间 超过了
2个数据,就会 丢弃 前面一个数据。。。

RTS 的 测试:就感觉与手册有些不一致,原本期望
看见:每个数据 结束 都会有 RTS 窄脉冲,可是却没有。

——附带 逻辑分析捕捉 数据文件—— RTS疑问.rar (9.06 KB, 下载次数: 5)
 楼主 | 2015-4-27 19:30 | 显示全部楼层
:lol 疑问 解决了,收到数据 必须去读 RTS就正常。
  /* Infinite loop */
  unsigned int j,k;
  USART1->CR1 = USART1->CR1 | 0x20 ;    // 打开 USART1 接收中断 。
  while (1)
  {
    for (k=0;k<8000;k++)
    {
      j++;
    }
    // TIM2->CCR4 = 2000;

    USART1->DR = 0xf2;
    USART3->DR = 0xf3;
    USART6->DR = 0xf6;
   
    for (k=0;k<12000;k++)
    {
      j++;
    }
    // TIM5->CCR4 = 4000;

  }
——————————————————————————————————
中断里面,收到数据 必须去读。
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
  PB(2) = 1;  //——————————逻辑指示——
  MyTemp_1 = USART1->DR;
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
  PB(2) = 0;  //——————————逻辑指示——
  /* USER CODE END USART1_IRQn 1 */
}

RTS正常了.jpg

使用特权

评论回复

评分

参与人数 1威望 +11 收起 理由
mmuuss586 + 11 赞一个!
| 2015-4-27 19:33 | 显示全部楼层

解决了就好;

使用特权

评论回复
| 2015-4-27 20:23 | 显示全部楼层
因为 RTS 是流控制位
如果RTS流控制被使能 (RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效(接低电平)。当接收寄存器内有数据到达时,nRTS被释放,由此表明希望在当前帧结束时停止数据传输。
为了继续接收下一帧数据, 你得读取收到的数据以清空接收寄存器

使用特权

评论回复
 楼主 | 2015-4-28 13:48 | 显示全部楼层
本帖最后由 caosix 于 2015-4-28 13:58 编辑
airwill 发表于 2015-4-27 20:23
因为 RTS 是流控制位
如果RTS流控制被使能 (RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效 ...


你叙述 很正确。。我也了解 RTS 的用意。。

这里的 意外是::如果 我不去 读出 已经收到的 数据,

那、RTS 就会变高电平,但是 当收到 第二个数据后:却会 一直 变为 低电平

(=允许 对方 继续发数据):这才是我感觉意外。

使用特权

评论回复
| 2015-4-28 17:41 | 显示全部楼层
caosix 发表于 2015-4-28 13:48
你叙述 很正确。。我也了解 RTS 的用意。。

这里的 意外是::如果 我不去 读出 已经收到的 数据,

读取收到的数据目的是可以清空接收寄存器

使用特权

评论回复
| 2019-1-9 19:58 | 显示全部楼层
楼主你好,我也正要用到RTS,CTS硬件流。这方面的资料和例程很少。我理解的RTS CTS都可以人为软件去操作(拉高 或拉低), 当需要接收数据时,拉低RTS, 但是在STM32 USART控制寄存器里面没找到这个RTS操作位 只有一个使能位。如何去操作RTS信号勒,很疑惑,看了你们帖子的讨论视乎有点似懂非懂。
“如果RTS流控制被使能 (RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效(接低电平)。当接收寄存器内有数据到达时,nRTS被释放,由此表明希望在当前帧结束时停止数据传输。”  

当接收寄存器内有数据到达时。 这个接收寄存器内数据到达多少个,RTS就会被拉高? 这个有效数据(接收多少个数据)的个数怎么去设置? 不会接收一个数据,RTS就被拉高吧?

我这主MCU和子MCU交换数据,一次性可能要发送,接收8个数据。
如果方便,能否借鉴下你的程序?谢谢。能留个联系方式吗。扣扣:309697801.谢谢

使用特权

评论回复
| 2019-1-10 17:13 | 显示全部楼层
楼主你好,我也正要用到RTS,CTS硬件流。这方面的资料和例程很少。我理解的RTS CTS都可以人为软件去操作(拉高 或拉低), 当需要接收数据时,拉低RTS, 但是在STM32 USART控制寄存器里面没找到这个RTS操作位 只有一个使能位。如何去操作RTS信号勒,很疑惑,看了你们帖子的讨论视乎有点似懂非懂。
“如果RTS流控制被使能 (RTSE=1),只要USART接收器准备好接收新的数据,nRTS就变成有效(接低电平)。当接收寄存器内有数据到达时,nRTS被释放,由此表明希望在当前帧结束时停止数据传输。”  

当接收寄存器内有数据到达时。 这个接收寄存器内数据到达多少个,RTS就会被拉高? 这个有效数据(接收多少个数据)的个数怎么去设置? 不会接收一个数据,RTS就被拉高吧?

我这主MCU和子MCU交换数据,一次性可能要发送,接收8个数据。
如果方便,能否借鉴下你的程序?谢谢。能留个联系方式吗。扣扣:309697801.谢谢

使用特权

评论回复
 楼主 | 2019-1-11 17:25 | 显示全部楼层
jsh560 发表于 2019-1-10 17:13
楼主你好,我也正要用到RTS,CTS硬件流。这方面的资料和例程很少。我理解的RTS CTS都可以人为软件去操作(拉 ...

抱歉,,抱歉,,俺 都很久 没有 搞 技术了 。

建议你 写 正式程序之前,实测 RTS CTS 功能。

因为 搞技术 太累,太辛苦 ——看看 20亿美元 俺的帖子

【[size=13.333333969116211px] [size=13.333333969116211px]看看美国佬给【华为】的【圣诞大礼】(解析:禁止报道令)

使用特权

评论回复
 楼主 | 2019-1-11 17:32 | 显示全部楼层
jsh560 发表于 2019-1-10 17:13
楼主你好,我也正要用到RTS,CTS硬件流。这方面的资料和例程很少。我理解的RTS CTS都可以人为软件去操作(拉 ...



俺的 疑惑,后来 已经 解决了 。。建议你们 实测 RTS CTS 功能。


使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表