2、实现串口的初始化以及DMA收发功能—这里以USART2为例
- //usart_dma.c文件
- #include "usart_dma.h"
- //<<<<<<<<<<<<<<<<宏定义<<<<<<<<<<<<<<<<
- #define USART_TX_RX_BUFF_LEN 256//DMA缓存数据大小
- #define USART_DMA_IDLE 0//DMA状态空闲
- #define USART_DMA_BUSY 1//DMA状态忙
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<结构定义<<<<<<<<<<<<<<<<
- #pragma pack(1)
- typedef struct
- {
- uint8_t dma_tx_buf[USART_TX_RX_BUFF_LEN];//缓存DMA要发送的数据
- uint8_t dma_rx_buf[USART_TX_RX_BUFF_LEN];//缓存DMA接收到的数据
- uint8_t dma_tx_state;//DMA发送状态
- uint8_t dma_rx_state;//DMA接收状态
- }USART_DataInfo;
- #pragma pack()
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- USART_DataInfo g_usart_DataInfo;
- /*
- 串口初始化,使用DMA模式
- */
- void gd32_usart_dma_init(void)
- {
- usart_deinit(USART2);
- usart_disable(USART2);
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_USART2);
- /* connect port to USARTx_Tx */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
- /* connect port to USARTx_Rx */
- gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
- nvic_irq_enable(USART2_IRQn,1,0);
-
- usart_interrupt_enable(USART2,USART_INT_IDLE); //空闲中断
- //usart_interrupt_enable(USART2,USART_INT_RBNE);//接收中断
- usart_baudrate_set(USART2,38400);//波特率设置
- usart_parity_config(USART2,USART_PM_NONE);//校验位设置
- usart_word_length_set(USART2,USART_WL_8BIT);//数据位设置
- usart_stop_bit_set(USART2,USART_STB_1BIT);//停止位设置
- usart_hardware_flow_rts_config(USART2, USART_RTS_DISABLE);//
- usart_hardware_flow_cts_config(USART2, USART_CTS_DISABLE);//硬件流控设置
- usart_data_first_config(USART2,USART_MSBF_LSB);//发送模式--LSB
- usart_transmit_config(USART2,USART_TRANSMIT_ENABLE);//发送使能
- usart_receive_config(USART2,USART_RECEIVE_ENABLE);//接收使能
- usart_enable(USART2);//使能串口
- gd32_usart_dma_tx_init();//DMA发送初始化
- gd32_usart_dma_rx_init();//DMA接收初始化
- }
|