[其他ST产品] STM32CubeMX串口通讯

[复制链接]
 楼主| t61000 发表于 2023-1-27 11:29 | 显示全部楼层
代码解析

其实也没什么可以说的。就讲解一下中断服务函数部分。
__HAL_UART_GET_FLAG()

    (1)因为串口中断由多种行为引起,比如主控发送数据可以引起,主控接收到数据也可以引起。所以我们需要知道到底是那种行为引起的中断。

    (2)一般只要了解接收中断即可,所以我只讲接收中断部分。
 楼主| t61000 发表于 2023-1-27 11:52 | 显示全部楼层
  1.         if(__HAL_UART_GET_FLAG( &huart1, UART_FLAG_RXNE ) != RESET)
  2.         {               
  3.         }
 楼主| t61000 发表于 2023-1-27 11:56 | 显示全部楼层
(1)huart1就是你在串口初始化的时候STM32CubeMX定义的。你复制后面这个部分写在huart1位置即可。

(2)后面的UART_FLAG_RXNE表示接收中断。

(3)如果是接收中断,__HAL_UART_GET_FLAG()将会返回SET,如果不是接收中断返回RESET。这个if就是用来判断是否为接收中断,如果是接收中断进入if语句。
 楼主| t61000 发表于 2023-1-27 11:58 | 显示全部楼层
7210263d34bc6e4d59.png
READ_REG()和WRITE_REG()

这个不是函数,是宏定义。我们鼠标点击READ_REG,然后按F12。即可查看他的定义。

    #define WRITE_REG(REG, VAL)   ((REG) = (VAL))
     
    #define READ_REG(REG)         ((REG))
 楼主| t61000 发表于 2023-1-27 11:58 | 显示全部楼层
(1)其实这个就是直接寄存器操作,操作DR寄存器。

(2)无论是发送的数据还是接收的数据我们都存放在DR寄存器中,如果是发送数据,那么就让DR寄存器写入数据。如果是接收数据,那么就将DR寄存器的数据存入变量中。

(3)所以READ_REG()是读取数据,WRITE_REG()是发送数据。
 楼主| t61000 发表于 2023-1-27 11:59 | 显示全部楼层
 楼主| t61000 发表于 2023-1-27 12:00 | 显示全部楼层
如果要更改发送接收数据的串口怎么办?
  1. /*****usart.c*****/
  2. UART_HandleTypeDef huart1;  //假如这个是串口1的结构体
  3. UART_HandleTypeDef huart2;  //假如这个是串口2的结构体

  4. /***stm32f1xx_it.c***/

  5. void USART1_IRQHandler(void)  //串口1中断函数
  6. {
  7.   uint8_t ch=0;
  8.   
  9.         if(__HAL_UART_GET_FLAG( &huart1, UART_FLAG_RXNE ) != RESET)
  10.         {               
  11.     ch=( uint16_t)READ_REG(huart1.Instance->DR);
  12.     WRITE_REG(huart1.Instance->DR,ch);

  13.         }
  14. }

  15. void USART2_IRQHandler(void) //串口2中断函数
  16. {
  17.   uint8_t ch=0;
  18.   
  19.         if(__HAL_UART_GET_FLAG( &huart2, UART_FLAG_RXNE ) != RESET)
  20.         {               
  21.     ch=( uint16_t)READ_REG(huart2.Instance->DR);
  22.     WRITE_REG(huart2.Instance->DR,ch);

  23.         }
  24. }
 楼主| t61000 发表于 2023-1-27 12:02 | 显示全部楼层
实验
软件准备

需要一个串口工具。gitee仓库自取
 楼主| t61000 发表于 2023-1-27 12:03 | 显示全部楼层
材料准备

需要一个TTL转串口模块。TX——RX,GND——GND,3.3——3.3。
 楼主| t61000 发表于 2023-1-27 12:05 | 显示全部楼层
1777863d34cfe35110.png

实验结果

电脑发送什么,单片机就回什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部