编译软件:MDK5.38a 一:参考第三篇printf输出配置参数,这里不再介绍 二:代码编写 l 首先串口时钟使能,GPIO时钟使能: __HAL_RCC_USART2_CLK_ENABLE(); l GPIO端口模式设置: __HAL_RCC_GPIOA_CLK_ENABLE(); l 串口参数初始化:HAL_UART_Init(&huart2) l 开启中断并且初始化 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); l 使能串口中断函数: 编写串口发送、接收中断函数: 串口中断回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口中断回调函数 { uint8_t temp =0; if (huart == &huart2) {
/串口发送正常函数/
/利用串口发送中断,导致少发送字节,在视频中进行测试/ // HAL_UART_Transmit_IT(&huart2,&temp,1);
} } 注意需要在串口初始化中编写,串口接收中断函数,否则串口2的中断部分不能正常进入。 正常的交互如下所示: 用该函数发送会出现HAL_UART_Transmit_IT(&huart2,&temp,1); 然后我查了一下两个函数的区别: HAL_UART_Transmit为阻塞式发送函数,意思就是说发送数据时候会一直等待数据发送完成后才会返回。 而HAL_UART_Transmit_IT 是非阻塞式的发送函数,即发送数据时候,不会等待数据发送完成,而是立即返回,数据发送完成后会触发中断函数。 因此,如果使用HAL_UART_Transmit发送数据时候,程序会一直阻塞在该函数处,直到数据发送完成后才会继续执行下一条指令,而如果使用HAL_UART_Transmit_IT发送数据,则程序会立即返回,可以指继续执行下一条质量,数据发送完成后会触发中断函数,在中断函数中进行数据发送完成后的处理。 所以在我们使用的串口发送数据,需要根据当前函数操作进行判断使用哪种发送函数,如果数据量不大的情况下,可以使用HAL_UART_Transmit,如果数据量较大的情况下,可以使用串口接收的空闲中断方式,待接收完成所有的数据包后,在进行数据的发送,或者是使用CPU资源,使用DMA的方式进行发送数据。 |
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED
【NUCLEO-WB09KE评测】USART的printf和GPIO的使用
【STM32H7S78-DK评测】步进电机控制介绍一与tensorflow安装与测试
【STM32H7S78-DK评测】XIP模板问题处理与电机控制
【STM32H7S78-DK评测】开发板初识与工程模板创建
【STM32H7S78-DK评测】使用FatFs文件系统读取SD卡文件
【NUCLEO H533RE评测分享】高性能和低成本双Buff加持的NUCLEO H533RE
【NUCLEO-H533RE评测】+09 低功耗测试
【NUCLEO-H533RE评测】+08 初识FreeRtos