【GD32F427开发板试用】-02-UART0 串口测试
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:申小林
首先说一下,我这里使用的PA9和PA10两个引脚,但是,需要对板子的硬件做改动,因为在原理图中PA9除了作为串口的输出脚以外,还作为USB供电电源的检测脚,具体的连接如下图,可以在原理图中很轻易的找到,硬件改动需要移除掉三个元件:Q1、E10、C54 如下图:
最开始我想的是去除两个电容应该就可以了,然后将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)); }}
下面看一下效果图
好了,这个串口的设置以及分享就到这里。