STM32F407串口记录
实现串口接收功能,首先要在while(1)前面开启串口接收中断,HAL_UART_Receive_IT(&huart4, &buffer, 1);//接收中断标志位RXNEIE置一
uint8_t ABB[3]={0x11,11,12};
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == UART4)
{
HAL_UART_Receive_IT(&huart4, &rx_buffer, 1);
HAL_UART_Transmit_IT(&huart4, ABB, 3);实现数组数据发送
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_5, GPIO_PIN_RESET);
}
实现串口回显功能
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == UART4)
{
HAL_UART_Receive_IT(&huart4, &rx_buffer, 1);
HAL_UART_Transmit_IT(&huart4, &rx_buffer, 1);
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_5, GPIO_PIN_RESET);
}
上面两种功能均使用HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)回调函数,这种函数本质上是用void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)来处理这个接收回调函数,然而HAL_UART_IRQHandler里面可以处理所有和串口中断相关的功能。下面使用这个函数来进行串口的回显功能
uint16_t buffer123;//定义收发的数据
void UART4_IRQHandler(void)
{
/* USER CODE BEGIN UART4_IRQn 0 */
/* USER CODE END UART4_IRQn 0 */
// HAL_UART_IRQHandler(&huart4);这个函数会清除接收标志位
/* USER CODE BEGIN UART4_IRQn 1 */
if((__HAL_UART_GET_FLAG(&huart4, UART_FLAG_RXNE) != RESET)&& (__HAL_UART_GET_IT_SOURCE(&huart4, UART_IT_RXNE) != RESET)){//获取接收标志位,以及接收中断使能
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_5, GPIO_PIN_RESET);
buffer123=UART4->DR&0xFFFF;//将数据寄存器里面接收到的低八位数据传给变量
__HAL_UART_ENABLE_IT(&huart4, UART_IT_TXE);//开启发送中断使能
}
if((__HAL_UART_GET_FLAG(&huart4, UART_FLAG_TXE) != RESET)&& (__HAL_UART_GET_IT_SOURCE(&huart4,UART_IT_TXE) != RESET)){//获取发送标志位,以及发送中断使能
UART4->DR = buffer123;//将数据传给发送寄存器
__HAL_UART_DISABLE_IT(&huart4, UART_IT_TXE);//关闭发送使能,不然会一直发送
}
/* USER CODE END UART4_IRQn 1 */
}
更多推荐

所有评论(0)