当前位置: 代码迷 >> 综合 >> CUBEMX+HAL库实现STM32串口(不定长度)收发
  详细解决方案

CUBEMX+HAL库实现STM32串口(不定长度)收发

热度:36   发布时间:2023-11-13 16:41:58.0

CUBEMX+HAL库实现STM32串口接收(不定长度)并发送

      • 首先新建一个CUBEMX工程
      • 选择你自己开发板的芯片型号
      • 设置时钟和串口
      • 设置时钟为72MHZ
      • 设置串口中断
      • 点击小齿轮生成KEIL5的工程
      • 设置工程名称及存放位置
      • 点击Open Project直接打开生成的32工程
      • 在main.c下添加以下变量
      • 添加以下函数打开串口一接收中断
      • 添加以下串口接收中断回调函数
      • 整个工程开发完毕,直接编译并烧录到单片机
      • 打开串口助手给单片机发送数据,可以看到单片机返回来的数据
      • 这是我自己建立的工程

首先新建一个CUBEMX工程

在这里插入图片描述

选择你自己开发板的芯片型号

在这里插入图片描述

设置时钟和串口

在这里插入图片描述

设置时钟为72MHZ

在这里插入图片描述

设置串口中断

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

点击小齿轮生成KEIL5的工程

在这里插入图片描述

设置工程名称及存放位置

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

点击Open Project直接打开生成的32工程

在这里插入图片描述

在main.c下添加以下变量

在这里插入图片描述

uint8_t RxByte;
uint8_t RxBuff[256];
uint16_t Rx_Count;

添加以下函数打开串口一接收中断

在这里插入图片描述

HAL_UART_Receive_IT(&huart1,&RxByte,1);

添加以下串口接收中断回调函数

在这里插入图片描述

/* USER CODE BEGIN 4 */
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_RxCpltCallback can be implemented in the user file*/RxBuff[Rx_Count++]=RxByte;if(RxByte==0x0A){
    while(HAL_UART_Transmit_IT(&huart1,RxBuff,Rx_Count)==HAL_OK);Rx_Count=0;}if(Rx_Count>=254) //数据超出缓存区,报错,可修改缓存区大小{
    Rx_Count=0;uint8_t errInfo[]="too many data!!!\r\n";while(HAL_UART_Transmit_IT(&huart1,errInfo,18)==HAL_OK);}while(HAL_UART_Receive_IT(&huart1,&RxByte,1)==HAL_OK);
}
/* USER CODE END 4 */

整个工程开发完毕,直接编译并烧录到单片机

打开串口助手给单片机发送数据,可以看到单片机返回来的数据

在这里插入图片描述

这是我自己建立的工程

这是我自己建立的工程