系列文章目录
【STM32】HAL库 新建MDK工程
【STM32】HAL库 串口轮询发送
前言
使用stm32串口中断发送和中断接收
一、STM32CubeMX设置
二、代码
中断发送字符串
void Serial_SendString(char *String)
{
HAL_UART_Transmit_IT(&huart1,(uint8_t *)String,strlen(String));
}
中断发送数组
void Serial_SendArray(uint8_t *Array, uint16_t Length)
{
HAL_UART_Transmit_IT(&huart1,Array,Length);
}
主函数
/* USER CODE BEGIN PV */
char String[] = {"hello world\r\n"};
uint8_t Tarr[7] = {0x77,0x6F,0x72,0x6C,0x64,0x0D,0x0A};
/* USER CODE END PV */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
Serial_SendString(String);
HAL_Delay(1000);
Serial_SendArray(Tarr, sizeof(Tarr)/sizeof(Tarr[0]));
HAL_Delay(1000);
}
/* USER CODE END 3 */
中断接收
在主函数前开启中断,接受字节数为5
uint8_t Rarr[5] = {0};
HAL_UART_Receive_IT(&huart1,Rarr,5);
接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1,Rarr,5);
Serial_SendArray(Rarr,sizeof(Rarr)/sizeof(Rarr[0]));
}
不定长字符串接收
修改接收数组长度,改为开启串口空闲中断
uint8_t Rarr[50] = {0};
HAL_UARTEx_ReceiveToIdle_IT(&huart1,Rarr,50);
接收事件回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
Serial_SendArray(Rarr,Size);
HAL_UARTEx_ReceiveToIdle_IT(&huart1,Rarr,50);
}