
编译软件: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的方式进行发送数据。 |
STM32N6坛友评测出炉,来围观(第二波预约继续)
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32N6570-DK评测】2.最简点灯
【STM32C0测评】Nucleo-C092开发板使用PWM控制板载LED呼吸灯
【STM32C0测评】Nucleo-C092板卡外部中断控制板载LED灯
【NUCLEO-U083RC评测】SLEEP_MODE、STOP_MODE、STANDBY_MODE简要测试