GD32的库比较糟糕当时完全是参考STM32的驱动来的,当然我也知道直接用ST的库可以,但是原因比较特殊就不多说了。
代码就不贴了,以后用GD的机会我想不会太多。
先初始化串口,使能串口,使能接受完成中断。
再初始化DMA通道。贴一段
1 int fputc(int ch, FILE *f) 2 { 3 usart_data_transmit(USART0, (uint8_t)ch); 4 while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); 5 return ch; 6 }
1 void uart0_dma_config(void) 2 { 3 dma_single_data_parameter_struct dma_init_struct; 4 /* enable DMA1 */ 5 rcu_periph_clock_enable(RCU_DMA1); 6 /* deinitialize DMA channel7(USART0 tx) */ 7 dma_deinit(DMA1, DMA_CH7); 8 dma_init_struct.direction = DMA_MEMORY_TO_PERIPH; 9 dma_init_struct.memory0_addr = (uint32_t)tx_buffer0; 10 dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; 11 dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT; 12 dma_init_struct.number = TXBUFF_SIZE; 13 dma_init_struct.periph_addr = USART0_DATA_ADDRESS; 14 dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; 15 dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH; 16 dma_single_data_mode_init(DMA1, DMA_CH7, dma_init_struct); 17 /* configure DMA mode */