gd32 串口dma发送数据
时间: 2023-09-18 21:10:35 浏览: 418
以下是使用GD32的DMA发送数据的基本步骤:
1. 首先,需要配置UART的GPIO口和参数(如波特率、数据位、停止位、校验位等)。
2. 然后,需要启用DMA传输功能,并配置DMA的通道、传输模式、数据长度、数据方向等参数。
3. 编写发送数据的函数,将要发送的数据存储到一个缓冲区中,并将缓冲区地址和数据长度传递给DMA。
4. 在主程序中调用发送数据的函数,DMA会自动将数据从缓冲区传输到UART的数据寄存器中,完成数据发送。
下面是一个简单的示例代码:
```c
// 配置UART的GPIO口和参数
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
usart_receive_config(USART0, USART_RECEIVE_DISABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
// 启用DMA传输功能并配置DMA参数
dma_deinit(DMA_CH0);
dma_circulation_disable(DMA_CH0);
dma_memory_to_memory_disable(DMA_CH0);
dma_periph_to_memory_enable(DMA_CH0);
dma_periph_address_config(DMA_CH0, (uint32_t)&USART_DATA(USART0));
dma_memory_address_config(DMA_CH0, (uint32_t)buffer);
dma_transfer_direction_config(DMA_CH0, DMA_MEMORY_INCREMENT_MODE, DMA_PERIPHERAL_FIXED_MODE);
dma_transfer_size_config(DMA_CH0, data_len);
dma_channel_priority_config(DMA_CH0, DMA_PRIORITY_HIGH);
dma_transfer_trigger_mode_config(DMA_CH0, DMA_TRIGGER_MODE_SOFTWARE);
dma_transfer_enable(DMA_CH0);
// 发送数据的函数
void send_data(const uint8_t *data, size_t len) {
memcpy(buffer, data, len);
dma_transfer_number_config(DMA_CH0, len);
dma_interrupt_flag_clear(DMA_CH0, DMA_INT_FLAG_TRANSFER);
dma_channel_enable(DMA_CH0);
}
// 在主程序中调用发送数据的函数
uint8_t data[] = {0x01, 0x02, 0x03};
send_data(data, sizeof(data));
```
在上面的示例中,我们使用了DMA_CH0通道进行数据传输,传输方向为从内存到外设,数据长度为data_len。在发送数据时,我们将要发送的数据存储到了一个名为buffer的缓冲区中,并将缓冲区地址和数据长度传递给DMA。DMA会自动将数据从缓冲区传输到USART0的数据寄存器中,完成数据发送。
阅读全文
相关推荐


















