1、stm32串口发送占用的时间
答:做嵌入式以来,一直自认为在两个MCU之间的串口通信很占用时间,让我感觉很是不爽。经过一番查找资料后发现并没有我想象的那么糟糕。
串口发送数据:
发送数据在软件层面来看是按照字节来发送的。USARTx->DR = (Data & (uint16_t)0x01FF);CPU只需要把一个字节的数据填充到DR寄存器中就可以了,然后具体的发送过程是由硬件来完成,单字节的发送过程中不消耗CPU。但是为什么我们使用串口来发送连续的数据时为什么还是感觉到这么慢,而且连续发送的过程中CPU不能去做其他任务呢?究其原因是因为我们为保证数据发送的完整性在发送过程中加入了while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){} 这条语句来等待发送结束。让CPU白白浪费在while的死循环中,等待的时间为 1(字节)x10(位) / 使用的波特率bps = 死循环时间。如果使用115200bps波特率的话,等待时间为86us。。由此来看其实发送数据的时间几乎全部都花费在了等待上(两次发送的这段时间间隔是必须要有的,但是这段时间的CPU可以去做其他任务)。时间间隔必须要有是因为在硬件发送的过程中是需要这段时间来按位发送电平信息的。如下图所示:发送完一个字节(10位,开始位+8bit数据+结束位)产生一个TXE标志位,然后接着发送下一字节数据
|