GD32E23x 串口0和1 DMA+空闲中断

GD32E23x 串口0和1DMA+空闲中断


这是一个从EmbeddedBuilder工程中移植过来的Keil工程,基于GD32E23x 创建使用。

  • 🎉大部分功能代码实现,基于AI辅助完成生成。
  • ✨功能经过烧录硬件验证。
🔧硬件平台
  • 🌿芯片型号:GD32E23x系列
  • 🌿开发环境:Keil MDK

📄功能说明

⚙️时钟配置
  • 外部高速时钟(HXTAL):8MHz晶振
  • 外部低速时钟(LXTAL):32.768KHz晶振(可选,通过宏ENABLE_LXTAL配置)
  • 内部低速时钟(IRC40K):40KHz RC振荡器(默认使用)
  • 系统时钟:72MHz(PLL倍频9倍)
  • APB1时钟:72MHz
  • APB2时钟:72MHz
📡串口外设
🔌USART0
  • 引脚:PB6(TX), PB7(RX)
  • 波特率:115200
  • 数据位:8位
  • 校验位:无
  • 停止位:1位
  • 功能:空闲中断 + DMA接收
  • DMA通道:DMA_CH2
  • 接收缓冲区:32字节
  • printf重定向:默认输出到USART0
🔌USART1
  • 引脚:PA2(TX), PA3(RX)
  • 波特率:115200
  • 数据位:8位
  • 校验位:无
  • 停止位:1位
  • 功能:空闲中断 + DMA接收
  • DMA通道:DMA_CH4
  • 接收缓冲区:256字节
📤串口输出函数
  • printf():标准printf函数,默认输出到USART0
  • usart_printf(USARTx, format, ...):可指定串口输出的格式化函数
💡LED指示灯
  • 引脚:PC13
  • 功能:RTC闹钟中断触发时翻转
🕐RTC实时时钟
  • 时钟源:内部RC40KHz(默认)或外部LXTAL 32.768KHz
  • 功能:
    • 实时时钟显示
    • 闹钟中断:默认每分钟第9秒触发
    • 闹钟中断时翻转LED指示灯
🔄DMA配置
  • DMA_CH2:USART0_RX接收
  • DMA_CH4:USART1_RX接收
  • 传输方向:外设到内存
  • 数据宽度:8位
  • 优先级:高优先级

📑使用说明

📝串口使用示例
💻USART0使用
c 复制代码
// 标准printf输出到USART0
printf("Hello from USART0\n");

// 发送数据
USART0_SendData("Send to USART0\n");
💻USART1使用
c 复制代码
// 指定串口输出
usart_printf(USART1, "Hello from USART1\n");

// 发送数据
USART1_SendData("Send to USART1\n");
📥串口接收处理
  • USART0和USART1都使用DMA+空闲中断接收
  • 接收完成后自动回显数据
  • USART1接收的数据会通过USART0打印显示
⚙️RTC配置
  • gd32e23x_hal_init.c中设置ENABLE_LXTAL宏选择RTC时钟源
    • #define ENABLE_LXTAL 0:使用内部RC40KHz(默认)
    • #define ENABLE_LXTAL 1:使用外部LXTAL 32.768KHz

🛠引脚分配


外设 功能 引脚 复用功能
USART0 TX PB6 AF0
USART0 RX PB7 AF0
USART1 TX PA2 AF1
USART1 RX PA3 AF1
LED - PC13 GPIO

🎯DMA通道映射

DMA通道 外设 功能
DMA_CH2 USART0 RX接收
DMA_CH4 USART1 RX接收

⛳注意事项

  1. 串口0和串口1的DMA接收使用不同的DMA通道,不会产生冲突
  2. printf默认输出到USART0,如需输出到USART1请使用usart_printf(USART1, ...)
  3. RTC时钟源在编译时通过宏定义选择,修改后需重新编译
  4. 接收缓冲区大小可根据实际需求调整

🔖编译说明

  • 使用Keil MDK打开Template.uvprojx工程文件
  • 选择对应的芯片型号(GD32E230C8等)
  • 编译生成Project.hex文件
  • 使用DAP-Link或GD-Link下载器烧录程序

📚程序源码

c 复制代码
通过网盘分享的文件:HAL_UART0_1_DMA.rar
链接: https://pan.baidu.com/s/13FXxC_ktdhwWO7fd9dZenA?pwd=kpsb 提取码: kpsb