STM32Cube IDE配置串口发送与接收

此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart

串口与中断配置如下

在生成的main函数中,添加开启串口接收中断

  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  LED2(OFF);
  HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRx1Buffer, 1);//使能串口接收中断
  printf("************FreeRTOS********************\r\n");

  /* USER CODE END 2 */

然后在接收中断回调函数中写接收过程

/* USER CODE BEGIN 4 */
/**
  * @brief  Rx Transfer completed callbacks.
  * @param  huart pointer to a UART_HandleTypeDef structure that contains
  *                the configuration information for the specified UART module.
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_UART_TxCpltCallback could be implemented in the user file
   */
    if(huart->Instance == huart1.Instance)
    {
        if(bRx1_complete != 0)
            return;

        if(Uart1_Rx_Cnt >= 255)
        {
            Uart1_Rx_Cnt = 0;
            memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
        }
        else
        {
            Uart1_RxBuff[Uart1_Rx_Cnt] = aRx1Buffer;
            Uart1_Rx_Cnt++;
            if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D))
            {
                Uart1_Rx_Cnt= 0;
                bRx1_complete = 0;
            }
        }
    }
    HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRx1Buffer, 1);
}

/* USER CODE END 4 */

调试结果如下:

原文地址:https://www.cnblogs.com/lizhiqiang0204/p/11659957.html

时间: 2024-10-15 23:58:23

STM32Cube IDE配置串口发送与接收的相关文章

stm32cube生成工程 串口发送和接收

1.printf函数重定向 ①以stm32f103rct6的usart1为例,打开cube,配置好RCC和USART1,生成mdk程序. ②打开工程,在main.c中 /* USER CODE BEGIN Includes */下面添加 #include“stdio.h” /* USER CODE BEGIN PV */下面添加 int fputc(int ch, FILE *f){ USART1->DR=(uint8_t)ch; while((USART1->SR&0X40)==0)

单片机C51串口发送、接收寄存器

所以,发送和接收寄存器可使用同一地址,编写验证程序(发送和接收是独立空间):读取一个数(1)->发送一个数(2)->再读取得1则是独立空间 不知道STM32串口寄存器和C51串口寄存器是否同样道理 STM32串口寄存器:STM32的发送与接收是通过数据寄存器USART_DR来实现的,这是一个双寄存器,包含了TDR和RDR,对它读操作,读取的是RDR寄存器的值,对它的写操作,实际上是写到TDR寄存器的:当向该寄存器写数据的时候,串口就会自动发送,当收到收据的时候,也是存在该寄存器内. 同步与异步

关于单片机串口发送和接收的问题

串口初始化过程: 1.确定T/C1的工作方式--TMOD 2.设置T/C初始值----------------------------TH1.TH2 3.启动T/C-----------------------------------TR1 4.串行口的控制------------------------------SCON 5.串口在中断方式下,需要开CPU和源中断----IE 总结:不一定需要使用中断函数,可以在main函数里面的while里面判断RI和TI是否等于1, 如果不使用中断函数i

串口发送二进制数据

串口想要利用Mscomm控件发送任何数据 不管是什么类型的都得转换成VARIANT型的变量,顺便提醒一下 想要串口发送和接收(好像尤指接收)二进制数据 要把那个InputMode 设置为 1  ( Binary ), 0 代表的是 Text. 再有一个vc不管只是vc,而是所有针对于Windows的开发环境而言,只要他是在WIN API的基础上的都有BYTE这个类型,这个类型顾名思义就是一个字节,比如你想发送的127  = 0xFF,你可以BYTE byVal = 0xFF;还有你如果用的是 M

stm32RS485串口通信——中断接收发送数据

功能:通过PC机的串口调试助手发送数据给串口A,串口B接收到串口A发送的数据,再由串口B将接收到的数据返回给PC机的串口调试助手. PC->串口A->串口B->PC. 实验平台:stm32f407 /********************************************************************* 本平台具有六个串口: com1  485 com2 com3  232 需一个管脚控制DTU com4 485 com5  调试串口  TTL com6

串口通信基础,接收,发送数据

通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种.它们的区别是: 串行通信的分类 1.按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输:    半双工:允许数据在两个方向上传输.但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信:它不需要独立的接收端和发送端,两者可以合并一起使用一个端口.    全双工:允许数据同时在两个方向上传输.因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端.

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方

C# ---串口发送接收数据实例

硬件设备: pH/ORP 电导率/TDS/盐度 溶解氧 2000/3000/5000/5500 变送器/控制器 设定: P-08:RS-485输出设定 P-11:485传输设定 设定这俩种的ID号 根据ID,对串口发送请求:接收串口返回的数据. C# ---串口发送接收数据实例

L2CAP数据发送和接收

ACL 链路在 Bluetooth 中非常重要,一些重要的应用如 A2DP, 基于 RFCOMM 的应用.BNEP等都要建立 ACL 链路,发送/接收ACL 包.跟大家一起来分析 ACL 包发送/接收流程,以及涉及到的重要 command/event. (一) ACL包发送 以下的图是各种应用层使用 L2CAP 的 API:L2CA_DataWrite 发送数据流的过程,此API继续往下走,我仅分析了正常数据流的走向(临时没有考虑别的情况). watermark/2/text/aHR0cDovL