串口轮询方式发送函数HAL_UART_Transmit_IT()的具体执行过程及函数调用情况
时间: 2023-12-01 09:17:34 浏览: 32
串口轮询方式发送函数HAL_UART_Transmit_IT()的具体执行过程如下:
1. 在调用HAL_UART_Transmit_IT()函数时,将要发送的数据存储在指定的缓冲区中,并指定要发送的数据长度。
2. 函数将发送过程交给中断处理程序来完成,因此在函数中启用UART的TXE(发送数据寄存器空)中断,并将数据缓冲区指针和发送长度存储在全局变量中。
3. 函数返回,控制权返回到主程序中。
4. 当UART发送寄存器为空时,将触发TXE中断,中断处理程序将从全局变量中读取待发送的数据和发送长度,并将数据逐个发送到UART发送寄存器中,直到所有数据都已发送完毕。
5. 当所有数据都已发送完毕时,中断处理程序将禁用TXE中断,并触发TC(传输完成)中断,告知主程序发送已完成。
6. 在主程序中,可以等待TC中断触发来确认发送是否已完成,并执行后续操作。
函数调用情况如下:
1. 主程序调用HAL_UART_Transmit_IT()函数。
2. 函数启用TXE中断,并将数据缓冲区指针和发送长度存储在全局变量中。
3. 函数返回,控制权返回到主程序中。
4. 当UART发送寄存器为空时,将触发TXE中断,中断处理程序将从全局变量中读取待发送的数据和发送长度,并将数据逐个发送到UART发送寄存器中,直到所有数据都已发送完毕。
5. 当所有数据都已发送完毕时,中断处理程序将禁用TXE中断,并触发TC中断,告知主程序发送已完成。
6. 主程序可以等待TC中断触发来确认发送是否已完成,并执行后续操作。
相关问题
口轮询方式发送函数HAL_UART_Transmit_IT()的具体执行过程及函数调用情况
口轮询方式发送函数HAL_UART_Transmit_IT()的具体执行过程如下:
1. 调用该函数时,将发送数据缓存区的指针、数据长度和UART设备句柄作为参数传入。
2. 函数内部会首先判断当前是否有其他发送操作正在进行,如果有则返回错误码。
3. 接下来将发送标志位置为1,表示当前有发送操作正在进行。
4. 将发送缓存区的指针和数据长度保存到UART设备句柄中。
5. 调用HAL_UART_Transmit_IT()函数,开始发送第一个字符。
6. 发送完成后,中断处理函数会被调用,继续发送下一个字符,直到所有字符都发送完成。
7. 所有字符发送完成后,将发送标志位清零,表示发送操作已完成。
函数调用情况如下:
1. 调用HAL_UART_Transmit_IT()函数,开始发送第一个字符。
2. 发送完成后,中断处理函数被调用,调用HAL_UART_IRQHandler()函数。
3. HAL_UART_IRQHandler()函数会检查发送中断标志位,如果为1,则继续发送下一个字符,直到所有字符都发送完成。
4. 发送完成后,将中断标志位清零,并调用回调函数,通知应用程序发送完成。
阅读HAL库的串口源码,分析串口轮询方式发送函数HAL_UART_Transmit_IT()的具体执行过程及函数调用情况
HAL_UART_Transmit_IT()函数是HAL库中用于通过串口发送数据的函数,其执行过程如下:
1. 首先,函数会判断指定的串口是否处于忙碌状态,如果处于忙碌状态则返回HAL_BUSY,表示当前无法发送数据。
2. 如果串口未处于忙碌状态,则将指定的数据缓存到全局变量中,并将发送数据的长度保存到指定的变量中。
3. 然后,函数会开启串口的发送中断,并将发送状态设置为HAL_UART_STATE_BUSY_TX。这意味着串口正在发送数据,无法进行其他操作。
4. 在开启发送中断后,函数会立即返回,不会等待数据发送完成。
5. 当串口发送中断发生时,会调用HAL_UART_TxCpltCallback()回调函数,该函数中会判断当前是否还有未发送完的数据,如果有,则继续发送下一个数据,直到所有数据发送完成。
6. 当所有数据发送完成后,回调函数会将发送状态设置为HAL_UART_STATE_READY,并调用数据发送完成的回调函数HAL_UART_TxHalfCpltCallback(),表示所有数据已经发送完成。
总体来说,HAL_UART_Transmit_IT()函数的执行过程比较简单,主要是将要发送的数据缓存到全局变量中,并开启发送中断,等待中断发生后继续发送下一个数据,直到所有数据发送完成。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)