由AG32VF407 MCU手册可知, AG32VF407 MCU自带的UART串口通信共设置了5组,分别为UART0~ UART4,AG32自带5个UART接口,如需要更多,可以用cpld实现十几个甚至更多的UART,可以满足不同需求的应用场景。本文重点介绍AG32VF407 UART串口总线通信的实现方法。
由于UART0开发板已经用于DEBUG调试,这里我们以UART1为例。
我们将开发板的引脚80、81分别配置为UART1的TXD、RXD,打开example_board.ve配置文件,找到UART0_UARTRXD
PIN_69位置,仿照UART0的配置方法,增加两行:
UART1_UARTTXD PIN_80
UART1_UARTRXD PIN_81
要实现UART通信,需先对UART进行初始化,主要包括时钟、引脚工作模式、串口初始化参数设置等。时钟、引脚初始化如下:
SYS_EnableAPBClock(APB_MASK_UART1);
GPIO_AF_ENABLE(GPIO_AF_PIN(UART,1,UARTRXD));
GPIO_AF_ENABLE(GPIO_AF_PIN(UART,1,UARTTXD));
GPIO_AF_ENABLE(UART1_UARTRXD);
GPIO_AF_ENABLE(UART1_UARTTXD);
串口初始化需调用UART.c中的初始化函数:
UART_Init(UARTx(1), BAUD_RATE, UART_LCR_DATABITS_8, UART_LCR_STOPBITS_1, UART_LCR_PARITY_NONE, UART_LCR_FIFO_16);
各位的含义为:端口号,这里为UART1,波特率,数据位,停止位,奇偶校验位以及FIFO数据位。
UART.c中提供了收发子程序,分别为发送子程序UART_Send和接收子程序UART_Receive,具体使用方法可直接参考UART.c中的说明。
#include"example.h"
// Test UART1
voidTestUart1(void)
{
// Wait for existing
UART transmit to finish
while (UART_IsTxBusy(UART1));
constchartxbuf[]="Test UART!\n";
constcharrxbuf[256];
SYS_EnableAPBClock(APB_MASK_UART1);
GPIO_AF_ENABLE(GPIO_AF_PIN(UART,1,UARTRXD));
GPIO_AF_ENABLE(GPIO_AF_PIN(UART,1,UARTTXD));
GPIO_AF_ENABLE(UART1_UARTRXD);
GPIO_AF_ENABLE(UART1_UARTTXD);
UART_Init(UARTx(1), BAUD_RATE, UART_LCR_DATABITS_8, UART_LCR_STOPBITS_1, UART_LCR_PARITY_NONE, UART_LCR_FIFO_16);
UART_Send(UART1,txbuf,strlen(txbuf));
while(1)
{
intrx_len=UART_Receive(UART1,rxbuf,12,0);
UART_Send(UART1,rxbuf,rx_len);
}
}
三、运行结果
更多回帖