0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的USART发送数据时如何使用TXE和TC标志呢?

工程师邓生 来源:未知 作者:刘芹 2023-10-26 11:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32的USART发送数据时如何使用TXE和TC标志呢?

USART 是 STM32 中非常重要的外设之一,用于串行通信,其中包括串口通信(RS232RS485)、SPI 和 I2C 等多种串行通信协议。USART 在 STM32 中有多个实例,包括 USART1、USART2 等,其特性和功能也不完全相同。

在发送数据时,USART 需要使用 TXE 和 TC 标志位。TXE 表示数据寄存器空,表示 USART 数据发送寄存器中的数据已被全部发送出去,可以直接写入新的数据。TC 标志表示传输完成,表示 USART 发送完全部数据,且寄存器都为空。

下面我们来看一下 STM32 的 USART 发送数据时如何使用 TXE 和 TC 标志位。

1.USART 数据寄存器有两种模式:8 位模式和 9 位模式。如果使用 8 位模式发送数据,则每次发送数据将用一个 8 位的数据寄存器。

2.如果使用 9 位模式发送数据,每次发送的数据将使用两个寄存器:数据寄存器和控制寄存器。数据寄存器用于存储 8 位的数据,而控制寄存器的最高位(第9 位)用于存储数据的第 9 位。

3.在发送数据之前需要配置 USART 的一些参数,例如波特率、数据位数、停止位等。在配置完成后,可以使用 USART_SendData 函数向数据寄存器写入数据。函数原型如下:

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

其中,USARTx 为 USART 模块的实例,Data 为要发送的数据。由于 STM32 采用的是 Little-Endian 模式,因此在 9 位模式下,Data 的后 8 位会被写入到数据寄存器中,而前一位则会被写入到控制寄存器的最高位中。

4.当数据寄存器中的数据已被全部发送出去时,TXE 标志位会被置为 1,此时可以直接写入新的数据。因此,可以使用 while 循环来判断 TXE 标志位是否被置为 1,一旦被置为 1,就可以调用 USART_SendData 函数发送下一组数据。代码如下:

while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

USART_SendData(USARTx, Data);

其中,USARTx 为 USART 模块的实例,Data 为要发送的数据。

5.在发送完全部数据后,TC 标志位会被置为 1,此时表示数据全部发送完成。可以使用 while 循环来等待 TC 标志位被置位为 1,以便确认数据发送是否成功。代码如下:

while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);

6.串口发送数据时还需要注意的是,如果发送的数据过于频繁,会导致 USART TX 缓冲区溢出。因此,在每次发送之前需要判断 USART 的 TX 缓冲区是否为空,只有当 TX 缓冲区为空时才能进行下一次发送。可以使用 USART_GetFlagStatus 函数来判断 TXE 标志位是否被置位为 1。

以上就是 STM32 的 USART 发送数据时如何使用 TXE 和 TC 标志位的详细介绍。在实际开发中,需要根据具体的硬件和应用环境进行针对性设置和调整,才能保证 USART 的正常工作和数据传输的稳定性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RS485
    +关注

    关注

    40

    文章

    1314

    浏览量

    85588
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371054
  • 数据寄存器
    +关注

    关注

    0

    文章

    33

    浏览量

    8200
  • USART
    +关注

    关注

    1

    文章

    201

    浏览量

    32915
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【道生物联TKB-623评估板试用】3. 基于 STM32 与 TKB-623 的无线超声波测距系统设计与实现

    1,USART_IT_RXNE) == SET) { // 将接收到的数据发送回去 USART_SendData(USART2,
    发表于 11-07 01:20

    STM32F103长时间运行,串口发送失败怎么解决?

    STM32F103长时间运行,串口发送失败,目前定位到一致卡在USART_FLAG_TC判断那里,我们采用轮询的方式发送数据,然后判断
    发表于 07-30 07:55

    STM32串口发送数据USART_FLAG_TC无法置位怎么解决?

    STM32串口发送数据,在经过一段时间的数据发送,大概200ms发送一下,一次
    发表于 07-29 11:44

    STM32f103,直接操作寄存器,实现IIC的发送

    命令字节 I2C_WaitEvent(I2C_SR1_TXE);// 等待DR寄存器空 I2C2->DR = cmd;// 写入命令字节 // 4. 连续发送数据数组 for (uint16_t i = 0
    发表于 06-25 10:18

    stm32N657配置USART2,可以发送,但是为什么无法进入接收中断

    https://gitee.com/liu-qingchang/code/tree/master/stm32n6 main函数和usart代码 使用stm32N657这块评估板,使用cubeMX配置
    发表于 06-18 07:13

    STM32学习USART之基础篇(可下载)

    今天分享 USART 设计前的基础知识我们先来了解一下有关通信的基本概念:通信:两个设备之间进行数据交换时,称这个过程为两个设备间的通信并行通信:设备之间的数据是以一位一位的二进制数进行传输的,并行
    发表于 03-31 15:07 4次下载

    STM32F107的USART2为什么进不了中断?

    刚开始学STM32,手里有一块公司的板子,板子上的USB接到FT232R,再从FT232R接到MCU的PD5(USART2TX)和PD6(USART2RX)。 我尝试了公司的代码,应该是用标准库写
    发表于 03-14 16:57

    stm32f103USART2为什么无法收发信息?

    ){USART_SendData(USART2, Byte);while (USART_GetFlagStatus(USART2, USART_FL
    发表于 03-12 06:22

    STM32F427串口接收和发送中断同时使能,为什么会出现接收中断丢数的情况?

    STM32F427芯片,针对UART7开启串口接收缓存区非空中断RXNE和串口传输完成中断TC. 1.单测试收发都没有任何问题。 2.将串口与PC机连接,PC端通过串口助手发送数据给测
    发表于 03-11 07:05

    STM32L451CEU6发送0x80会收到0x00的数据发送0x01会收到0x7F的数据,为什么?

    使用STM32L451CEU6型号的芯片,在用usart(PA9、PA10)进行串口通信时,发送0x55在PC端可以收到正确的数据,但是发送
    发表于 03-07 08:44

    STM32H750 FDCAN发送异常的原因?

    最近在调CANopen,用的芯片是STM32H750VBT6,发现按照ST的例程生成简单的测试程序后,只要执行一次发送后,CAN模块就会自动一直往外发送这帧数据,查看寄存器发现
    发表于 03-07 08:42

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代码初始化是空的,为什么?

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代码初始化是空的,参考其他代码做了初始化操作,可以通过HAL_USART_Transmit接口
    发表于 03-07 07:48

    串口数据错乱?从标志位设置入手

    导读在串口通信开发中,数据错乱是常见问题。本文将快速介绍串口标志位的作用及配置方法,帮助解决数据传输错误。有用户反馈“串口应用层数据错乱、与发送
    的头像 发表于 02-11 11:35 1360次阅读
    串口<b class='flag-5'>数据</b>错乱?从<b class='flag-5'>标志</b>位设置入手

    STM32CubeMX生成的代码中串口如何发送数据

    是NODEA_USART_TX和NODEA_USART_RX,而开发板A和Debugger开发板的连接如下:通过查看CH443K芯片的引脚可以得到,SEL引脚的高低电
    的头像 发表于 01-13 21:02 2051次阅读
    <b class='flag-5'>STM32</b>CubeMX生成的代码中串口如何<b class='flag-5'>发送</b><b class='flag-5'>数据</b>?

    AT32F407在USART2 DMA发送数据时,接包接到了要发送数据,程序还是处于等待传输完成的标识判断中,为什么?

    型号AT32F407,在USART2DMA发送数据时,接包已经接到了要发送数据,但是程序还是处于等待传输完成的标识判断中,卡死了。请教一下
    发表于 12-19 06:48