你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USART上的RTS是如何设置和应用的?

[复制链接]
dashiz 提问时间:2018-11-25 21:27 /
大家都知道USARTRXTX这两个引脚的功能,它们是USART串行通信最常见和必不可少的两个引脚。但是USART的其他引脚如USART_RTSUSART_CTS都没有说明,查了很多资料,有帖子提到是硬件流控制,在进行串口初始化的时候,把下面定义的

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

改成下面三种即可实现硬件流控制。

USART_HardwareFlowControl_RTS

USART_HardwareFlowControl_CTS

USART_HardwareFlowControl_RTS_CTS


我的疑惑是那对应RTS的GPIO引脚不需要定义了吗?STM32的任何GPIO引脚应用前都要初始化定义一下。
不知有没有人用过?

收藏 评论8 发布时间:2018-11-25 21:27

举报

8个回答
zjczm 回答时间:2018-11-26 10:39:22
GPIO应该需要remap的吧,初始化串口时有没有实现?可以跟踪程序分析一下。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

ssssss 回答时间:2018-11-26 11:07:08
工作这么久了, 就只用n 8 1 配置

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

废鱼 回答时间:2018-11-26 11:31:16
如果需要用RTS的时候,需要进行配置。这个主要是用于全串口时使用。一般就用235。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

chifen 回答时间:2018-11-26 12:19:59
Rts和cts是硬件流,需要手动打开和关闭的,需要配制才有的

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

dashiz 回答时间:2018-11-26 14:35:44
zjczm 发表于 2018-11-26 10:39
GPIO应该需要remap的吧,初始化串口时有没有实现?可以跟踪程序分析一下。

公司前人在基于STM32L151上做的项目,用的是RX、TX和RTS这三个Pin,在程序里也提到用RTS,但我就没发现RTS的初始化之类的命令。该串口初始化的代码如下:
  USART_InitTypeDef USART_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);      
   
  /* Connect PXx to USARTx_Rx*/
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
   
  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  USART_InitStructure.USART_BaudRate = 2400;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx ;
  /* USART configuration */
  USART_Init(USART2, &USART_InitStructure);
     
  USART_ITConfig(USART2,USART_IT_RXNE, ENABLE);
   
  /* Enable the xxx gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* Enable USART */
  USART_Cmd(USART2, ENABLE);
  
只用了PA2和PA3这两个RX和Tx端口,硬件控制流为USART_HardwareFlowControl_None也就是说没用到。所以我怀疑在这个程序中PA1(RTS)就是个普通的GPIO。
飞的山一样高 回答时间:2018-11-26 15:05:41
不用怀疑,PA1此时就是普通GPIO口,流控比你想的简单,其实就是多两路GPIO来限制主从机的发送,用的场景其实很少,一般来说两个芯片通讯,其中一个会进入低功耗的情况下才会使用。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

dashiz 回答时间:2018-11-26 22:12:05
zc1107473010 发表于 2018-11-26 15:05
不用怀疑,PA1此时就是普通GPIO口,流控比你想的简单,其实就是多两路GPIO来限制主从机的发送,用的场景其 ...

嗯,的确很少见到用RTS、CTS的实际案例,真不理解为啥STM32芯片为啥坚持USART。
stm32学习hpdj 回答时间:2018-11-27 06:51:47
学习了
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版