STM32 串口

本文详细介绍了STM32的串口通信过程,包括发送和接收的步骤,如设置发送使能位TE、处理TXE和TC位,以及接收使能位RE和RXNE位。还提及了奇偶校验、数据位长度、停止位和通信模式等关键参数的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:TX管脚首先发送最低位,同样,RX管脚也最先接收最低位。

起始位为低,停止位为高。

1.发送

(1)发送使能位TE--在CR1中

USART_InitStructure.USART_Mode = USART_Mode_Tx;

USART_Init(USARTx, &USART_InitStructure);

设置完TE位后,STM32会发送一个空闲帧

(2)TXE位

清零:一般通过往数据寄存器DR中写数据完成

置位:硬件置位,表明:

        ·数据已经从TDR转移到移位寄存器中,数据已经开始发送;

         ·TDR为空,下一个数据可以写入DR中,而不会覆盖前面的数据

            if(USART_GetITStatus(USARTx, USART_IT_TXE) != RESET)
            {
                pch->TxCtr++;
                MB_TxByte(pch);                                 /* Send next byte                               */
            }

如果TXEIE位为1,将产生发送中断。

(3)TC位

置位:发送完成一个帧之后,TC位被硬件置1,如果USART_CR1中的TCIE被置1.将产生一个中断。

清零:软件操作完成:1.读一次USAR_SR 2.写一次USART_DR

if(USART_GetITStatus(USARTx, USART_IT_TC) != RESET)

2.接收

(1)RE

USART_InitStructure.USART_Mode = USART_Mode_Rx;

USART_Init(USARTx, &USART_InitStructure);

设置RE位后,将使能接收端开始寻找起始位。

(2)RXNE

置1:RXNE被置1表明移位寄存器的内容被转移到RDR中,即数据已经接收到并可以读取了。如果RXNEIE为1,将产生中断。

清零:在单缓冲模式下(DMA为多缓冲模式),清零RXNE通过软件读取USART_DR完成。

            if(USART_GetITStatus(USARTx, USART_IT_RXNE) != RESET)
            {
                c          = USART_ReceiveData(USARTx);         /* Read the character from the UART             */
             }

RXNE位必须在下一个数据接收完成之前被清零,否则将产生溢出错误USART_FLAG_ORE置1。

溢出期间接收到的数据将丢失。

3.奇偶校验

M位为数据位长度,PCE位为奇偶校验使能位。

奇偶校验位包含在数据位中。

4.通信分为同步和异步通信,同步通信利用时钟同步信号,从而得知数据的开始和结束。UART为异步通信,利用事先在发送和接收端统一的数据格式来判断数据的开始和结束,同步信号。

        USART_InitStructure.USART_BaudRate = baud;                  /* Configure USART */
        USART_InitStructure.USART_WordLength = bits;
        USART_InitStructure.USART_StopBits = stops;
        USART_InitStructure.USART_Parity = parity;
串口通过收发端统一这些信息,规定数据帧的格式,实现信号同步。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值