USART_FLAG_TC与 USART_FLAG_TXE之间的区别,各自的用途 - 附举例代码及说明

USART_FLAG_TC与 USART_FLAG_TXE之间的联系,各自的用途

  • 名词解释(STM32固件库使用手册)

    • USART_FLAG_TXE发送数据寄存器空标志位
    • USART_FLAG_TC发送移位寄存器发送完成标志位Alt
  • 串口发送数据过程介绍

转入数据 - 软件操作
转入数据 - 硬件自动操作
发送数据 - 硬件自动操作
CPU
发送数据寄存器 TRD
发送移位寄存器
TX
  • USART_FLAG_TXE的用途:

    • 发送数据寄存器里的数据被全部取完时,该寄存器是空的,那么该标志位就会被置1。通过这个标志位的值可以判断发送数据寄存器中的数据有没有完全被取走,当该寄存器是空的时候,可以提醒CPU继续往该寄存器里存入新的数据;

  • USART_FLAG_TC的用途:

    • 发送移位寄存器里的每个字节通过TX脚一位一位发送出去之后,该标志位值就会被置1。通过这个标志位的值可以判断发送移位寄存器里的数据有没有被全部发送出去;

  • USART_FLAG_TXE和USART_FLAG_TC之间的联系:

    • 结合上面流程图来进行说明,实际上发送移位寄存器通过TX脚发送数据这个过程是比较耗时的,所以在此过程进行时,可通过判断当USART_FLAG_TXE = 1,即发送数据寄存器里的数据已被全部转入发送移位寄存器时,就让CPU往发送数据寄存器转入新的数据。
    • 发送移位寄存器把数据帧全部发送出去之后,可通过判断USART_FLAG_TC = 1,证明数据帧的最后一个字节都已经通过TX脚发送完了。

  • 代码举例

    
    /******************  发送一个字节  *****************************/
    void UART4_SendByte(uint8_t byte )
    {
    	/* CPU 将一个字节转入到 发送数据寄存器(TDR) */
    	USART_SendData(UART4, byte );
    		
    	/* 等待 发送数据寄存器(TDR)  将该字节全部转入到 发送移位寄存器 */
    	while (USART_GetFlagStatus(UART4, USART_FLAG_TXE) == RESET);	
    }
    
    
    /***************  发送指定长度的数据帧 *************************/
    void UART4_SendArray(uint8_t *array, uint32_t length)
    {
    	uint32_t  k = 0;
    
    	/* CPU 将数据帧里的每个字节按顺序转入 发送移位寄存器*/
        do 
        {
           UART4_SendByte( *(array + k) );
           k++;
        } while(k < length);
    		
    	/* 等待 发送移位寄存器  将数据帧的最后一个字节的最后一位发送出去,整个数据帧发送完毕  */
    	while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);
    }
    

  • 欢迎纠正,(づ ̄3 ̄)づ╭❤~
    如果有帮助到你,能点个赞吗?ღ( ´・ᴗ・` ) 比心
  • 40
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小肥丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值