> 文档中心 > 【GD32F427开发板试用】-02-UART0 串口测试

【GD32F427开发板试用】-02-UART0 串口测试


本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:申小林

首先说一下,我这里使用的PA9和PA10两个引脚,但是,需要对板子的硬件做改动,因为在原理图中PA9除了作为串口的输出脚以外,还作为USB供电电源的检测脚,具体的连接如下图,可以在原理图中很轻易的找到,硬件改动需要移除掉三个元件:Q1、E10、C54 如下图:

【GD32F427开发板试用】-02-UART0 串口测试

最开始我想的是去除两个电容应该就可以了,然后将PD2的控制引脚置高就可以了,但是实际上测试还是不行,索性直接把这三个去掉就可以了。

硬件修改完成之后,就开始编辑代码了,我这里使用了串口的接收中断,接收到的数据原样返回,并且完成闪灯和定时发送的任务,这里就直接上代码了

#include "DRV_UART.h"#define UART_Clock      RCU_USART0#define UART_IO_Clock   RCU_GPIOA#define UART_IO_Port    GPIOA#define UART_TXD_Pin    GPIO_PIN_9#define UART_RXD_Pin    GPIO_PIN_10void UART_Init(void){    rcu_periph_clock_enable( UART_Clock);//--使能串口时钟    rcu_periph_clock_enable(UART_IO_Clock);     //--使能IO时钟    /* connect port to USARTx_Tx */    gpio_af_set(UART_IO_Port, GPIO_AF_7,UART_TXD_Pin);//--设置TXD管脚复用--    /* connect port to USARTx_Rx */    gpio_af_set(UART_IO_Port, GPIO_AF_7, UART_RXD_Pin);//--设置RXD管脚复用--    /* configure USART Tx as alternate function push-pull */    gpio_mode_set(UART_IO_Port, GPIO_MODE_AF, GPIO_PUPD_PULLUP,UART_TXD_Pin);//--设置发送管脚模式    gpio_output_options_set(UART_IO_Port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,UART_TXD_Pin);  //--设置发送管脚模式    /* configure USART Rx as alternate function push-pull */    gpio_mode_set(UART_IO_Port, GPIO_MODE_AF, GPIO_PUPD_PULLUP,UART_RXD_Pin);      //--设置接收脚模式    gpio_output_options_set(UART_IO_Port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,UART_RXD_Pin); //--设置接收脚模式    /* USART configure */    usart_deinit(USART0);    usart_baudrate_set(USART0,115200);    usart_receive_config(USART0, USART_RECEIVE_ENABLE);    //--使能接收    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);  //--使能发送    //--    usart_enable(USART0);//--使能串口-- nvic_irq_enable(USART0_IRQn, 0, 0);    usart_interrupt_enable(USART0, USART_INT_RBNE);//--使能接收中断--    //    usart_interrupt_enable(USART0, USART_INT_TBE); //--使能发送中断--    //    //--由于PD2控制三极管,上拉PA9,所以这里先将PD2上拉--排除三极管对PA9的影响--    rcu_periph_clock_enable(RCU_GPIOD);     //--使能IO时钟    gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP,GPIO_PIN_2);//--    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2);  //--设置    gpio_bit_set(GPIOD, GPIO_PIN_2);}unsigned char Data=0;void USART0_IRQHandler(void){    if((RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) &&(RESET != usart_flag_get(USART0, USART_FLAG_RBNE)))    { /* Read one byte from the receive data register */Data=usart_data_receive(USART0);usart_data_transmit(USART0,Data);    }//    if((RESET != usart_flag_get(USART0, USART_FLAG_TBE)) &&(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE)))//    {// /* Write one byte to the transmit data register */// usart_data_transmit(USART0,0xff);//    }}void UART0_Transmit(unsigned char *Data,unsigned int Lenth){    int i=0;    for(i=0;i<Lenth;i++)    { usart_data_transmit(USART0,Data[i]); while(RESET == usart_flag_get(USART0, USART_FLAG_TC));    }}/*-------------------  end of  the  files  -------------------------*/

主函数代码很简单

int main(void){    unsigned char Data[]={"this is a UART0 Test Demo\r\n" };    systick_config();    LED_Init();    UART_Init();    while(1)     { Led_Test(); UART0_Transmit(Data,sizeof(Data));    }}

下面看一下效果图

【GD32F427开发板试用】-02-UART0 串口测试

好了,这个串口的设置以及分享就到这里。

中评网简体版