| 本帖最后由 原来是wjc 于 2024-6-1 03:03 编辑 
 yorkbarney 发表于 2024-3-11 16:33支持通过外部中断/事件控制器(EXTI)来触发DMA传输。#include "gd32f3x0.h"
 
 #define BUFFER_SIZE 64
 uint8_t receive_buffer[BUFFER_SIZE];
 
 void usart0_dma_config(void)
 {
 // DMA配置代码
 }
 
 void exti0_config(void)
 {
 /* enable the EXTI GPIO clock */
 rcu_periph_clock_enable(RCU_GPIOB);
 
 /* configure button pin as input */
 gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
 
 /* enable and set EXTI line source */
 gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_0);
 
 /* configure EXTI line */
 exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
 exti_interrupt_flag_clear(EXTI_0);
 exti_interrupt_enable(EXTI_0, ENABLE);
 
 /* enable and set EXTI0_IRQn Interrupt */
 nvic_irq_enable(EXTI0_IRQn, 2U, 0U);
 }
 
 void exti0_IRQHandler(void)
 {
 /* clear EXTI line interrupt flag */
 exti_interrupt_flag_clear(EXTI_0);
 
 /* 设置DMA请求标志,启动DMA传输 */
 dma_flag_set(DMA0, DMA_CH2, DMA_INT_FLAG_G);
 }
 
 int main(void)
 {
 /* 初始化USART、DMA、外部中断等 */
 usart0_dma_config();
 exti0_config();
 
 while (1) {
 /* 在这里处理其他任务 */
 }
 
 return 0;
 }
 |