硬件:正点原子战舰开发板(STM32F103ZET6)
软件:MDK5,STM32CubeMX
下面讲解使用HAL库配置串口1,使串口1可以使用中断接收字节并原样返回。
1. STM32CubeMX对串口1作如下配置
2. 添加如下代码
uint8_t uart1_rxbuf[10]; // 用于存放接收到的数据
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/*
* 把全局变量uart1_rxbuf[10]注册到HAL库里面去,接收中断来临的时候,HAL库会把
* 接收到的数据存入这个变量
*/
HAL_UART_Receive_IT(&huart1, uart1_rxbuf, 1);
}
/*
* 这个函数是一个weak函数,HAL库接收到数据的时候会调用它,你可以重写它,HAL库里
* 原本的它什么也不做
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit(&huart1, uart1_rxbuf, 1, 100); // 把收到的字节原样发送出去
HAL_UART_Receive_IT(&huart1, uart1_rxbuf, 1); // 重新注册一次,要不然下次收不到了
}