HAL串口轮询方式发送函数、串口中断方式接收数据的使用

使用GD32的串口0(STM32是串口1)发送字符串到PC机  接收PC端串口助手发送过来的数据 

CUBEMX时钟配置,SYS,RCC,USART1

HAL_UART_Transmit(&huart1,txbuf,sizeof(txbuf),sizeof(txbuf));      //轮询方式发送函数    
HAL_Delay(1000);

中断接收

先定义全局变量:uint8_t rxbuf[7]={1};

HAL_UART_Receive_IT(&huart1,rxbuf,7);          //串口中断服务函数

/* USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    HAL_UART_Transmit(&huart1,rxbuf,7,7);
    HAL_UART_Receive_IT(&huart1,rxbuf,7);
}

      接收到数据后,我们用轮询函数发回去,然后我们希望下一次上位机发送数据过来的时候下位机还能接收,使用要重新使能接收中断。

/* USER CODE END 4 */

串口轮询方式发送函数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中断触发来确认发送是否已完成,并执行后续操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值