/*
1.使用STM32CubeMX生成的库,配置有中断使能(也就是会生成中断函数) HAL_UART_Receive_IT()函数中的__HAL_LOCK(huart);
去掉HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)函数中不调用 __HAL_LOCK(huart);和__HAL_UNLOCK(huart);
函数调用HAL_UART_RxCpltCallback()接收串口数据
HAL_UART_Receive_IT(&huart1, (u8 *)&Rx_Buff1, 1); //使能中断
//串口数据接受
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
que_Write(&Rx1_que,Rx_Buff1);
HAL_UART_Receive_IT(&huart1, (u8 *)&Rx_Buff1, 1);
}
}
2.使用STM32CubeMX生成的库,不配置有中断使能,自己写接收中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); //直接使能接收中断
void USART1_IRQHandler(void)
{
unsigned char dat;
#if 1 //HAL函数版
if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE))
{
dat = __HAL_UART_FLUSH_DRREGISTER(&huart1);
}
#else //寄存器版
if(USART1->SR&(1<<5))
{
dat = USART1->DR;
}
#endif
}
*/
STM32 HAL库使用串口一些经验
于 2020-03-09 00:45:28 首次发布