HAL库中断方式进行串口通信

前言

软件版本:
    STM32CubeMX:6.30
    KEIl:5.31
    FlyMcu:0.188
    SSCOM: 5.13.1
硬件:
    STM32F103C8T

一、通过CubeMX配置项目

1.设置RCC

2.设置SYS

 

3.设置USART

 

4.设置NVIC

 

5.创建项目

 

二、代码部分

  • main.c文件,在文件中定义缓冲区大小

/* USER CODE BEGIN PD */

#define LENGTH 10   // 接收缓冲区大小

/* USER CODE END PD */

  • 定义缓冲区和标志位:
  • /* USER CODE BEGIN PV */

    uint8_t RxBuffer[LENGTH];   // 接收缓冲区
    uint8_t Rxflag = 0;    // 标志位,0为接收未完成,1为接

    /* USER CODE END PV */

  • 定义接收成功信息
  • HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH);  // 使能接收中断
    char data[] = "\nReveive Success\n";  // 接收成功信息

  • 在while循环中发送成功信息和接收到的信息

  • if (Rxflag == 1){ // 若数据接收完成
        Rxflag = 0;  // 清除标志位
        HAL_UART_Transmit(&huart1, (uint8_t *)data, 18, 0xFFFF);  // 接收成功信息
        // 发送接收到的字符
        HAL_UART_Transmit_IT(&huart1, (uint8_t*)RxBuffer, LENGTH);
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库提供了一些函数和宏定义来帮助我们配置和使用串口中断,以实现多机通信。下面是一个简单的示例代码,演示如何使用HAL库实现串口中断多机通信: ```c #include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); // 启用串口中断 HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_data, 1); while (1) { // 主循环 } } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART2) { if (rx_data[0] == 0xAA) // 接收到数据头 { // 接收数据 HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_data, 7); } else // 接收到数据 { // 处理数据 // ... // 继续接收数据 HAL_UART_Receive_IT(&huart2, (uint8_t *)rx_data, 1); } } } static void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); } } ``` 在上面的代码中,我们启用了USART2的中断接收模式,当接收到数据时,会调用`HAL_UART_RxCpltCallback`函数进行处理。在该函数中,我们可以根据接收到的数据进行相应的处理,并继续启用中断接收模式以接收下一帧数据。例如,当接收到数据头0xAA时,我们启用中断接收模式以接收接下来的7个字节的数据;当接收到数据时,我们可以进行相应的处理,例如打印到终端或者进行数据解析等等。 需要注意的是,在使用多机通信时,需要对数据帧进行设计,例如在数据帧中添加数据头、数据长度、校验位等等,以确保数据的正确性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值