STM32Cube_串口的使用
一配置串口 这里以串口2为例 如下配置
二配置中断优先级如下图
三生成代码并在代码里增加串口接收中断初始化
void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
HAL_UART_Receive_IT(&huart2,&aRxbuff,1);
}
四 重定义void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)函数和void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
uint32_t timeout=0;
uint32_t maxDelay=0x1FFFF;
Send_Uart1[SendLen++]=aRxbuff;
if(aRxbuff==’\n’)
{
Send_Data(Send_Uart1,SendLen);
memset(Send_Uart1,0,sizeof(Send_Uart1));
SendLen=0;
}
timeout=0;
while (HAL_UART_GetState(&huart2) != HAL_UART_STATE_READY)//等待就绪
{
timeout++;超时处理
if(timeout>maxDelay) break;
}
HAL_UART_Receive_IT(&huart2, &aRxbuff, 1);
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
uint32_t isrflags = READ_REG(huart->Instance->SR);
if((__HAL_UART_GET_FLAG(huart, UART_FLAG_PE))!=RESET)
{
READ_REG(huart->Instance->DR);
__HAL_UART_CLEAR_PEFLAG(huart);
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_PE);
}
if((__HAL_UART_GET_FLAG(huart, UART_FLAG_FE))!=RESET)
{
READ_REG(huart->Instance->DR);
__HAL_UART_CLEAR_FEFLAG(huart);
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_FE);
}
if((__HAL_UART_GET_FLAG(huart, UART_FLAG_NE))!=RESET)
{
READ_REG(huart->Instance->DR);
__HAL_UART_CLEAR_NEFLAG(huart);
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_NE);
}
if((__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE))!=RESET)
{
READ_REG(huart->Instance->CR1);
__HAL_UART_CLEAR_OREFLAG(huart);
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_ORE);
}
}
详情见代码工程 附上