【STM32】4—UART串口(查询模式)

目录

0 实验预期效果

1 相关原理图

2 硬件配置

3 软件配置 

        USART相关知识           

        STM32CubeMX配置        ​

4 代码编写

        函数理解

        串口发送 

        串口接收 

        代码编写


0 实验预期效果

        完成串口数据的接收和发送

 1 相关原理图

2 硬件配置

        DAPLINK、STM32F407VET6:

        TXD —— PA10              注意!!!!一定要看清!!!不要接错!!TXD是接PA10!!!

        RXD —— PA9                注意!!!!一定要看清!!!不要接错!!RXD是接PA9!!!

        GND —— GND

        5V —— 5V

3 软件配置 

        USART相关知识           

        USART 简介、功能说明、框图见博客:【STM32】基于STM32F407实现串口通信_Max_Shy的博客-CSDN博客_stm32f407串口通信

        STM32CubeMX配置        

        ①点击USATR1;
        ②设置MODE为异步通信(Asynchronous) ;
        ③基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit,无校验位,1位停止位 ,接收和发送都使能;
        ④GPIO引脚设置 USART1_RX/USART_TX;
 

4 代码编写

        函数理解

         HAL库UART函数库介绍见博客:【STM32】基于STM32F407实现串口通信_Max_Shy的博客-CSDN博客_stm32f407串口通信串口通讯知识梳理及在Stm32上的应用(HAL库)_冬瓜~的博客-CSDN博客

        串口发送 

        打开 stm32f4xx_hal_uart.c 文件,可找到函数:

/**
  * @brief  Sends an amount of data in blocking mode.
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
  *         of u16 provided through pData.
  * @param  huart Pointer to a UART_HandleTypeDef structure that contains
  *               the configuration information for the specified UART module.
  * @param  pData Pointer to data buffer (u8 or u16 data elements).
  * @param  Size  Amount of data elements (u8 or u16) to be sent
  * @param  Timeout Timeout duration
  * @retval HAL status
  */

/**
  * @brief  串口的发送函数
  * @param   huart      串口句柄
  * @param   pData      需要发送数组的指针(必须为uint8_t型数组,因为串口是单字节发送的)
  * @param   Size       数组的字节数
  * @param   Timeout    超时时间(在指定时间内未完成数据发送则返回HAL_TIMEOUT)
  * @retval  HAL_status  返回值 HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT    */
 
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

         第一个参数是要使用的串口句柄地址,比如要使用U(S)ART1,参数就设置为U(S)ART1的句柄地址&huart1;
        第二个参数是要发送的数据缓冲区首地址;
        第三个参数是发送的数据长度,这里可以直接用sizeof()函数获取发送缓冲区的长度;
        第四个参数是超时时间,单位是ms,如果超过设置的时间,则函数返回HAL_TIMEOUT,如果设置为HAL_MAX_DELAY,处理器就会一直等到数据发送完成再执行下一条语句。

        串口接收 

        打开 stm32f4xx_hal_uart.c 文件,可找到函数: 

/**
  * @brief  Receives an amount of data in blocking mode.
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
  *         of u16 available through pData.
  * @param  huart Pointer to a UART_HandleTypeDef structure that contains
  *               the configuration information for the specified UART module.
  * @param  pData Pointer to data buffer (u8 or u16 data elements).
  * @param  Size  Amount of data elements (u8 or u16) to be received.
  * @param  Timeout Timeout duration
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

        同HAL_UART_Transmit()函数一样,这个函数也有四个参数:
        第一个参数是要使用的串口句柄地址,比如要使用U(S)ART1,参数就设置为U(S)ART1的句柄地址&huart1;
        第二个参数是接受数据的缓冲区首地址;
        第三个参数是接受的数据长度,这里可以直接用sizeof()函数获取接受缓冲区的长度;
        第四个参数是超时时间,单位是ms,如果超过设置的时间,则函数返回HAL_TIMEOUT,如果设置为HAL_MAX_DELAY,处理器就会一直等到接受到设置好的数据数量再执行下一条语句。

        代码编写

int main(void)
{
  /* USER CODE BEGIN 1 */
	char str[12] = "Hello World\n";
	char recv_buf[12] = {0};
  /* USER CODE END 1 */

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART1_UART_Init();


  while (1)
  {
    /* USER CODE BEGIN 2 */
	HAL_UART_Transmit(&huart1, (uint8_t*)str, 12, 0xFFFF);
    /* USER CODE END 2 */
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
    //接收12个字节的数据,不超时
    if(HAL_OK == HAL_UART_Receive(&huart1, (uint8_t*)recv_buf, 12, 0xFFFF))
    {
      //将接收到的数据发送
      HAL_UART_Transmit(&huart1, (uint8_t*)recv_buf, 12, 0xFFFF);
    }
  }
  /* USER CODE END 3 */
}

        波特率调为115200

 

【本文参考博客:【STM32Cube_06】使用USART发送和接收数据(查询模式)_Mculover666的博客-CSDN博客

【STM32】基于STM32F407实现串口通信_Max_Shy的博客-CSDN博客_stm32f407串口通信

串口通讯知识梳理及在Stm32上的应用(HAL库)_冬瓜~的博客-CSDN博客

【CubeIDE】STM32 HAL库史上最详细教程(一):UART串口收发_Nack'BT的博客-CSDN博客_stm32cubeide串口通信

串口通讯知识梳理及在Stm32上的应用(HAL库)_冬瓜~的博客-CSDN博客

【本文仅作为个人学习记录,不出于任何商业目的。】

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值