当前位置:首页 > 单片机 > 单片机
[导读]硬件流控制使用 nCTS 输入和 nRTS 输出可以控制 2 个器件间的串行数据流。如图显示了在这种模式 下如何连接 2 个器件:分别向 USART_CR3 寄存器中的 RTSE 位和 CTSE 位写入 1,可以分别使能 RTS 和 CTS 流 控制。RTS

硬件流控制
使用 nCTS 输入和 nRTS 输出可以控制 2 个器件间的串行数据流。如图显示了在这种模式 下如何连接 2 个器件:

分别向 USART_CR3 寄存器中的 RTSE 位和 CTSE 位写入 1,可以分别使能 RTS 和 CTS 流 控制。

RTS 流控制
如果使能 RTS 流控制 (RTSE=1),只要 USART 接收器准备好接收新数据,便会将 nRTS 变 为有效(连接到低电平)。当接收寄存器已满时,会将 nRTS 变为无效,表明发送过程会在 当前帧结束后停止。下图图显示了在使能 RTS 流控制的情况下进行通信的示例。

CTS 流控制
如果使能 CTS 流控制 (CTSE=1),则发送器会在发送下一帧前检查 nCTS。如果 nCTS 有效 (连接到低电平),则会发送下一数据(假设数据已准备好发送,即 TXE=0);否则不会进 行发送。如果在发送过程中 nCTS 变为无效,则当前发送完成之后,发送器停止。
当 CTSE=1 时,只要 nCTS 发生变化,CTSIF 状态位便会由硬件自动置 1。这指示接收器是 否已准备好进行通信。如果 USART_CR3 寄存器中的 CTSIE 位置 1,则会产生中断。下图 显示了在使能 CTS 流控制的情况下进行通信的示例。

注意:停止帧的特殊行为:当使能 CTS 流后,发送器发送停止信号时将不检查 nCTS 输入状态。

USART中断

USART 中断事件被连接到相同的中断向量(请参见图 270)。
● 发送期间:发送完成、清除以发送或发送数据寄存器为空中断。
● 接收期间:空闲线路检测、上溢错误、接收数据寄存器不为空、奇偶校验错误、LIN 断路检测、噪声标志(仅限多缓冲区通信)和帧错误(仅限多缓冲区通信)
如果相应的使能控制位置 1,则这些事件会生成中断。

USART的配置模式

使用 DMA 进行连续通信
使用 DMA 进行发送
将 USART_CR3 寄存器中的 DMAT 位置 1 可以使能 DMA 模式进行发送。当 TXE 位置 1 时, 可将数据从 SRAM 区(通过 DMA 配置,参见 DMA 部分)加载到 USART_DR 寄存器。要 映射一个 DMA 通道以进行 USART 发送,请按以下步骤操作(x 表示通道编号):
1.在 DMA 控制寄存器中写入 USART_DR 寄存器地址,将其配置为传输的目标地址。每次 发生 TXE 事件后,数据都会从存储器移动到此地址。
2. 在 DMA 控制寄存器中写入存储器地址,将其配置为传输的源地址。每次发生 TXE 事件 后,数据都会从这个存储区域加载到 USART_DR 寄存器中。
3. 在 DMA 控制寄存器中配置要传输的总字节数。
4. 在 DMA 寄存器中配置通道优先级
5. 根据应用的需求,在完成一半或全部传输后产生 DMA 中断。
6. 向 SR 寄存器中的 TC 位写入 0,将其清零。
7. 在 DMA 寄存器中激活该通道。
当达到在 DMA 控制器中设置的数据传输量时,DMA 控制器会在 DMA 通道的中断向量上产 生一个中断。
在发送模式下,DMA 对所有要发送的数据执行了写操作(DMA_ISR 寄存器中的 TCIF 标志 置 1)后,可以对 TC 标志进行监视,以确保 USART 通信已完成。在禁止 USART 或进入 停止模式前必须执行此步骤,以避免损坏最后一次发送。软件必须等待直到 TC=1。TC 标志 在所有数据发送期间都必须保持清零状态,然后在最后一帧发送结束后由硬件置 1。

使用 DMA 进行接收
将 USART_CR3 寄存器中的 DMAR 位置 1 可以使能 DMA 模式进行接收。接收数据字节 时,数据会从 USART_DR 寄存器加载到 SRAM 区域中(通过 DMA 配置,参见 DMA 规 范)。要映射一个 DMA 通道以进行 USART 接收,请按以下步骤操作:
1.在 DMA 控制寄存器中写入 USART_DR 寄存器地址,将其配置为传输的源地址。每次发 生 RXNE 事件后,数据都会从此地址移动到存储器。
2. 在 DMA 控制寄存器中写入存储器地址,将其配置为传输的目标地址。每次发生 RXNE 事 件后,数据都会从 USART_DR 寄存器加载到此存储区。
3. 在 DMA 控制寄存器中配置要传输的总字节数。
4. 在 DMA 控制寄存器中配置通道优先级。
5. 根据应用的需求,在完成一半或全部传输后产生中断。
6. 在 DMA 控制寄存器中激活该通道。
当达到在 DMA 控制器中设置的数据传输量时,DMA 控制器会在 DMA 通道的中断向量上产 生一个中断。在中断子程序中,USART_CR3 寄存器中的 DMAR 位应由软件清零。
注意:如果 DMA 用于接收,则不要使能 RXNEIE 位。

多缓冲区通信中的错误标志和中断生成
在多缓冲区通信中,如果事务中发生任何错误,都会在当前字节后放置错误标志。如果中断使能置 1,则会产生中断。在单字节接收过程中,与 RXNE 一同置位的帧错误、上溢错误和噪声标志具有单独的错误标志中断使能位(USART_CR3 寄存器中的 EIE 位);如果该位置 1, 则会因其中任何一个错误而在当前字节后产生中断。

STM32F4库
串口配置流程
使能USART时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE);//1和6USART
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE);//2、3、4、5USART
使能GPIO
RCC_AHB1PeriphClockCmd();//IO可以是TX,RX,CTS和SCLK
设置外设的复用功能
1、GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);//将引脚连接到相应的复用功能
2、通过GPIO_InitStruct->GPIO_Mode_AF配置引脚到相应复用功能
3、通过GPIO_PuPd,GPIO_OType和GPIO_Speed选择IO的上下拉,IO类型和IO速度
4、(异步)通过USART_Init()配置Baud Rate,Word Length,Stop Bit,Parity,硬件数据了,模式(发送接收)。
USART_InitStructure.USART_BaudRate = 115200; /* 波特率 */
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_Mode_Tx; USART_Init(USART1,&USART_InitStructure);
5、对于同步模式通过USART_ClockInit()使能时钟和polarity,phase和last bit
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);
void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);
6、如果需要使能中断,那么使能NVIC并通不过函数USART_ITConfig使能相应中断位
7、当使用DMA模式时
——通过DMA_Init()函数配置DMA
——通过函数USART_Cmd()激活需要带的通道
8、通过USART_Cmd()使能USART
9、当使用DMA时,通过DMA_Cmd()使能DMA
10、Multi-Processor,LIN,half-duplex,Smartcard,IrDA详见M4权威指南

为了获得更高的波特率,可以通过函数 USART_OverSampling8Cmd()设置 8倍的过采样(默认是 16 倍的过采样),这个函数 需要在时钟RCC_APBxPeriphClockCmd()之后, USART_Init() 之前调用。
void USART_DeInit(USART_TypeDef* USARTx)通过复位时钟实现

数据传输函数
通过函数USART_ReceiveData()来读取寄存器USART_DR的数值这个数据来自RDR缓存器;通过函数USART_SendData()实现对寄存器USART_DR的写操作,数据将被存储到TDR缓存器上。
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data));

/* Transmit Data */
USARTx->DR = (Data & (uint16_t)0x01FF);
}

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
/* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx));

/*ReceiveData*/

return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}

DMA传输和管理函数
函数USART_DMACmd用于使能DMA的发送和接收请求
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
{
/* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DMAREQ(USART_DMAReq)); assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)
{
/* Enable the DMA transfer for selected requests by setting the DMAT and/or DMAR bits in the USART CR3 register */
USARTx->CR3 |= USART_DMAReq;
}
else
{
/* Disable the DMA transfer for selected requests by clearing the DMAT and/or DMAR bits in the USART CR3 register */
USARTx->CR3 &= (uint16_t)~USART_DMAReq;
}
}

中断标志管理函数
查询模式
(#) USART_FLAG_TXE : to indicate the status of the transmit buffer register
(#) USART_FLAG_RXNE : to indicate the status of the receive buffer register
(#) USART_FLAG_TC : to indicate the status of the transmit operation (#) USART_FLAG_IDLE : to indicate the status of the Idle Line
(#) USART_FLAG_CTS : to indicate the status of the nCTS input
(#) USART_FLAG_LBD : to indicate the status of the LIN break detection (#) USART_FLAG_NE : to indicate if a noise error occur
(#) USART_FLAG_FE : to indicate if a frame error occur
(#) USART_FLAG_PE : to indicate if a parity error occur
(#) USART_FLAG_ORE : to indicate if an Overrun error occur
在查询模式,建议使用下面两个函数:
(+) FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
(+) void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭