吃~鱼 2024-02-01 11:08 采纳率: 66.7%
浏览 7

1、STM32串口发送使用USART_FLAG_TXE与使用USART_FLAG_TC,发送X个字节的占用时间的差异是后者比前者多用 X*(CPU往数据寄存器中填充数据用时) 吗

1、STM32串口发送使用USART_FLAG_TXE与使用USART_FLAG_TC,发送X个字节的占用时间的差异是后者比前者多用 X*(CPU往数据寄存器中填充数据用时) 吗?
2、发送移位寄存器中的数据往外发送的过程用时多少?

  • 写回答

2条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-01 11:10
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    1. 在STM32的USART串口发送数据时,使用USART_FLAG_TXE(发送数据寄存器空标志)和USART_FLAG_TC(发送完成标志)控制发送流程会有不同的占用时间。当使用USART_FLAG_TXE时,通常是在检测到发送数据寄存器为空时(即上一次的数据已经被移位寄存器开始发送),立即填充下一个待发送的数据。这样可以实现连续发送,理论上等待时间只包括CPU执行判断标志、读写数据寄存器以及可能的总线仲裁等操作的时间。

    而使用USART_FLAG_TC来控制发送,则会在每个字节发送完成后(整个帧发送完毕,包括所有停止位)才去填充下一个数据。这意味着对于X个字节的连续发送,后者在等待发送完成标志置位的过程中会增加额外的延迟,这个延迟等于每个字节从数据寄存器转移到移位寄存器并完成全部发送(包括起始位、数据位、校验位和停止位)所需的时间。所以,使用USART_FLAG_TC比使用USART_FLAG_TXE多用的时间不一定是简单的X*(CPU往数据寄存器中填充数据用时),而是包含了每个字节的实际传输时间。

    1. 发送移位寄存器中的数据往外发送的过程用时取决于具体的USART配置,包括波特率设置。例如,如果USART配置为9600波特率,那么发送一个8位数据(加上可能的起始位1位、停止位1或2位,如果有校验位则再加上1位)所需要的时间是: 总时间 = (1 + 数据位数 + 停止位数) / 波特率 以9600波特率、8位数据、1位停止位计算,单个字节的发送时间为: 总时间 = (1 + 8 + 1) / 9600 ≈ 104 微秒

    请注意实际应用中还需要考虑CPU中断处理、上下文切换等因素对时间的影响。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月1日

悬赏问题

  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败