STM32CubeMX生成串口USART相关程序

一、时钟的配置

在这里插入图片描述

在这里插入图片描述

二、USART的配置

1、引脚配置

在这里插入图片描述

2、中断及其他配置

在这里插入图片描述

三、LED的配置(GPIO)

在这里插入图片描述
在这里插入图片描述

四、工程的配置

在这里插入图片描述
使用的HAL库版本为:

在这里插入图片描述

五、代码

生成的串口中断代码如下:

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

HAL_UART_IRQHandler为串口中断回调函数,其中包含一个中断接收虚回调函数(HAL_UART_RxCpltCallback),我们可以自己在虚函数中实现自己想要的功能(即我们的单片机串口接收到数据就会进入中断,去执行HAL_UART_RxCpltCallback中的内容)。调用关系如下图所示:

在这里插入图片描述
虚函数的实现如下:

/*__weak */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  //UNUSED(huart);
	if(huart->Instance==USART1)
	{
		
		HAL_GPIO_TogglePin(Led0_GPIO_Port, Led0_Pin);
		HAL_UART_Receive_IT(&huart1,aRxBuffer1,1);// 重新使能串口1接收中断
		
	}
}

主要功能就是我们的单片机串口接收到数据后,LED0发生状态翻转。
在这里插入图片描述
如上图所示,发送1时,开发板上LED0会发生状态翻转。

/**
  * @brief Receive an amount of data in interrupt mode.
  * @param huart UART handle.
  * @param pData pointer to data buffer.
  * @param Size amount of data to be received.
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
{
  /* Check that a Rx process is not already ongoing */
  if(huart->RxState == HAL_UART_STATE_READY)
  {
    if((pData == NULL ) || (Size == 0U))
    {
      return HAL_ERROR;
    }

    /* Process Locked */
    __HAL_LOCK(huart);

    huart->pRxBuffPtr = pData;
    huart->RxXferSize = Size;
    huart->RxXferCount = Size;

    /* Computation of UART mask to apply to RDR register */
    UART_MASK_COMPUTATION(huart);

    huart->ErrorCode = HAL_UART_ERROR_NONE;
    huart->RxState = HAL_UART_STATE_BUSY_RX;

    /* Process Unlocked */
    __HAL_UNLOCK(huart);

    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
    SET_BIT(huart->Instance->CR3, USART_CR3_EIE);

    /* Enable the UART Parity Error and Data Register not empty Interrupts */
    SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);

    return HAL_OK;
  }
  else
  {
    return HAL_BUSY;
  }
}

HAL_UART_Receive_IT函数可以使能串口处于中断接收模式,所以在函数初始化时,需要调用一次,在进入中断接收回调函数中,处理完想要执行的功能后,需要再次调用一次,重新使能串口接收中断。

代码记录:
STM32_Deal_A002

以上,仅为本人自用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值