[APM32F4] APM32F4 串口接收不定长数据

[复制链接]
 楼主| Peixu 发表于 2024-12-16 18:45 | 显示全部楼层 |阅读模式
本帖最后由 Peixu 于 2025-5-30 14:49 编辑

USART 串口通信使用说明

1. 概述
本项目实现了基于 USART(通用同步异步收发传输器)的串口通信串口空闲中断接收不定期数据功能,适用于嵌入式系统开发。通过配置 USART,设备可以接收和发送数据,支持实时数据通信。本文将详细介绍项目的功能、硬件要求、软件设置及使用方法。

2. 项目功能
**数据接收**:能够通过 USART 接收数据并将其存储在缓冲区中。
**数据发送**:接收到的数据可以立即通过 USART 发送回主机,即实现回显功能。
**中断处理**:使用中断机制处理接收数据,避免 CPU 忙等待,提高系统效率。

3. 硬件要求
**开发板**:支持 APM32F411/APM32F407的微控制器开发板。
**串口连接**:通过串口与计算机或其他设备进行连接,通常使用 USB 转串口模块。

4. 软件设置 USART 配置
在代码中,用户可以设置 USART 的参数,例如波特率、数据位、停止位和奇偶校验。以下是 USART_Init 函数的参数配置示例:
  1. void USART_Init(void)
  2. {
  3.     USART_Config_T usartConfigStruct = {
  4.         .baudRate = 115200,               // 波特率设置
  5.         .hardwareFlow = USART_HARDWARE_FLOW_NONE, // 硬件流控制设置
  6.         .mode = USART_MODE_TX_RX,         // 发送和接收模式
  7.         .parity = USART_PARITY_NONE,      // 无奇偶校验
  8.         .stopBits = USART_STOP_BIT_1,     // 1个停止位
  9.         .wordLength = USART_WORD_LEN_8B   // 数据位长度为8位
  10.     };
  11.    
  12.     APM_COMInit(COM1, &usartConfigStruct);
  13.     USART_EnableInterrupt(USART1, USART_INT_RXBNE); // 启用接收中断
  14.     USART_EnableInterrupt(USART1, USART_INT_IDLE);   // 启用空闲中断
  15.     NVIC_EnableIRQRequest(USART1_IRQn, 1, 0);        // 配置中断优先级
  16. }

5. 使用方法
5.1 USART 接收中断处理
接收中断处理函数是实现数据接收的核心部分。它会在接收到数据时被调用,并将数据存储在接收缓冲区中。以下是代码实现:
  1. void USART_Receive_Isr(void)
  2. {
  3.     if (USART_ReadIntFlag(USART1, USART_INT_RXBNE) == SET)
  4.     {
  5.         uint8_t receivedByte = (uint8_t)USART_RxData(USART1);
  6.         if (rxCountUSART1 < DATA_BUF_SIZE - 1)
  7.         {
  8.             rxDataBufUSART1[rxCountUSART1++] = receivedByte; // 接收数据
  9.         }
  10.     }

  11.     if (USART_ReadIntFlag(USART1, USART_INT_IDLE) == SET)
  12.     {
  13.         USART_RxData(USART1); // 清除中断标志
  14.         
  15.         // 发送接收到的数据
  16.         USART_Write(USART1, rxDataBufUSART1, rxCountUSART1); // 直接发送接收到的数据
  17.         
  18.         rxCountUSART1 = 0; // 清空接收计数
  19.     }
  20. }

5.2 USART 发送数据
数据发送函数会逐字节将数据发送到指定的 USART 端口。以下是代码实现:
  1. void USART_Write(USART_T* usart, uint8_t *data, uint32_t length)
  2. {
  3.     for (uint32_t i = 0; i < length; i++)
  4.     {
  5.         while (USART_ReadStatusFlag(usart, USART_FLAG_TXBE) == RESET); // 等待发送缓冲区空
  6.         USART_TxData(usart, data[i]); // 逐字节发送
  7.     }
  8. }
6. 注意事项
**电源管理**:确保开发板在运行过程中有稳定的电源供应。
**串口设置一致性**:确保串口工具的设置与代码中的 USART 配置一致,包括波特率、数据位、停止位和奇偶校验。
**缓冲区大小**:DATA_BUF_SIZE 可以根据实际需求进行调整,确保能够存储所有接收的数据。
7. 总结
本项目提供了一个简单易用的串口通信空闲中断接收不定期数据功能解决方案,适合用于嵌入式开发中的数据传输。用户可以根据具体需求对代码进行修改和扩展,以适应不同的应用场景。如果在使用过程中遇到问题,请参考以上步骤进行排查和调整。APM32F4 串口接收不定期数据



OceanDepths 发表于 2024-12-20 10:20 | 显示全部楼层
很经典的空闲中断加接收中断应用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

58

帖子

0

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