在AT32F421的例程中,提供了多种串口通讯的示例,这就为用户的各种需求带来了极大的便利。
这里仅举2个示例来测试,一个是进行片内2个串口间的数据通讯,另一个则是向外发送信息,并由电脑来接收显示。
1. 片内的串口通讯
开发板的串口1所使用的引脚为:
Tx--- PA.9
Rx---PA.10
串口2所使用的引脚为:
Tx--- PA. 2
Rx---PA. 3
由于是进行片内的串口通讯,故2个串口间的连接应交叉连接。在程序下载后,其运行效果如图1所示(3个LED灯被点亮),若断开测试连接,则如图2所示(3个LED熄灭)。
图1 正常效果
图2 异常效果
实现该功能的主体程序为:
while(TxCounter < TxBufferSize)
{
USART_SendData(USART1, TxBuffer[TxCounter++]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TDE) == RESET);
while(USART_GetFlagStatus(USART2, USART_FLAG_RDNE) == RESET);
RxBuffer[RxCounter++] = (USART_ReceiveData(USART2) & 0x7F);
}
TransferStatus = Buffercmp(TxBuffer, RxBuffer, TxBufferSize);
if(TransferStatus == PASSED)
{
AT32_LEDn_ON(LED2);
AT32_LEDn_ON(LED3);
AT32_LEDn_ON(LED4);
}
就是将存放在数组TxBuffer的内容由串口1发送给串口2,若收发一致则点亮3个LED灯。
uint8_t TxBuffer[] = "Buffer Send from USART1 to USART2 using Flags";
值得一提还有通讯的波特率,竟达到230400bps,如果用一般的串口助手,恐怕都找不到这个值。
USART_InitStructure.USART_BaudRate = 230400;
2. 向外发送数据
在进行该测试时,需使用USB转串口模块,并与串口1的引脚交叉连接,见图3所示。
图3 测试连接
这次的通讯波特率就不同于片内通讯了,不过也不低,为115200bps,其执行效果见图4所示。
图4 测试效果
其主程序极为简单,只有区区几行语句。
int main(void)
{
UART_Print_Init(115200);
printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");
while (1);
}
本帖最后由 jinglixixi 于 2021-5-3 17:00 编辑
谢谢分享,期待后续!