07----GD32E103RBT6----DMA测试代码[测试通过]

bsp_dma.h

#ifndef __BSP_DMA_H
#define __BSP_DMA_H

#include "gd32e10x.h"

#define USART_RX_DMA  DMA0
#define USART_RX_DMA_CHANNEL     DMA_CH5

#define USART_RX_DMA_CLOCK   RCU_DMA0

#define USART_DR_ADDRESS        (USART1+0x04)

void USART_RX_DMA_Config(uint8_t* Memory_Base_Address,uint8_t Transfer_Number);
#endif

bsp_dma.c

#include "bsp_dma.h"

/*!
    \brief      配置DMA0_CHl5,这样USART2_Rx就能发出这个通道的DMA请求
    \param[in]  Transfer_Number: 需要传输的数据个数
    \param[out] Memory_Base_Address:存储器的首地址
    \retval     none
*/
void USART_RX_DMA_Config(uint8_t* Memory_Base_Address,uint8_t Transfer_Number)
{
	dma_parameter_struct dma_init_struct; 
	rcu_periph_clock_enable(USART_RX_DMA_CLOCK);
	
	dma_init_struct.periph_addr=USART_DR_ADDRESS;
	dma_init_struct.periph_width=DMA_PERIPHERAL_WIDTH_8BIT;
	dma_init_struct.memory_addr=(uint32_t)Memory_Base_Address;
	dma_init_struct.memory_width=DMA_MEMORY_WIDTH_8BIT; 
	dma_init_struct.number=Transfer_Number;
	dma_init_struct.priority=DMA_PRIORITY_ULTRA_HIGH; 
	dma_init_struct.periph_inc=DMA_PERIPH_INCREASE_DISABLE;
	dma_init_struct.memory_inc=DMA_MEMORY_INCREASE_ENABLE; 
	dma_init_struct.direction=DMA_PERIPHERAL_TO_MEMORY; 
	dma_circulation_disable(USART_RX_DMA, USART_RX_DMA_CHANNEL);
	dma_init(USART_RX_DMA, USART_RX_DMA_CHANNEL, &dma_init_struct); 
	
	dma_channel_enable(USART_RX_DMA, USART_RX_DMA_CHANNEL);
}

main.c

uint8_t dma_receive_data[20];
//uint8_t dma_receive_data_element_index=0;


void test_dma(void)
{
	USART_TX_GPIO_Config();
	USART_RX_GPIO_Config();
	MAX485_EN_GPIO_Config();
	USART_Config();
	usart_interrupt_disable(DEBUG_USARTx, USART_INT_RBNE);
	USART_RX_DMA_Config(dma_receive_data,8);
	
	gpio_bit_set(MAX485_EN_GPIO_PORT,MAX485_EN_GPIO_PIN);
	USART_SendArray(ay,8);
	gpio_bit_reset(MAX485_EN_GPIO_PORT,MAX485_EN_GPIO_PIN);
	usart_dma_receive_config(DEBUG_USARTx,USART_DENR_ENABLE);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值