在厂家提供的例程中,基本都是通过串口来提供信息输出的,但在实际的应用中,不但要使用Printf函数来输出信息,也需要字节发送功能来与外部的串行通讯设备进行控制和数据交换。
为此,尝试了一下字节数据的发送功能,经测试使用下面的函数就可得到此功能,其函数内容如下:
void Test_Uartx(UART_Type *UARTx)
{
uint8_t TestTxData[3] = {0x55, 0x4A, 0x01};
uint8_t i;
volatile uint8_t tmp08;
Uartx_Init(UARTx); //初始化uartx配置
//查询发送数组
for(i = 0; i < 3; i++)
{
FL_UART_WriteTXBuff(UARTx,TestTxData[i]); //将发送数据写入发送寄存器
while(FL_SET !=
FL_UART_IsActiveFlag_TXBuffEmpty(UARTx));
//等待发送完成
}
//转发接收到的数据
while(1)
{
if(FL_SET ==
FL_UART_IsActiveFlag_RXBuffFull(UARTx)) //等待接收到一个字节
{
tmp08 =
FL_UART_ReadRXBuff(UARTx); //uart接收中断标志可通过读取rxreg清除
FL_UART_WriteTXBuff(UARTx,
tmp08); //将收到的数据发送回去
}
}
}
测试该函数的主程序为:
int main(void)
{
MF_Clock_Init();
MF_SystemClock_Config();
FL_Init();
MF_Config_Init();
UserInit();
Test_Uartx(UART0);
while(1)
{
LED0_TOG();
FL_DelayMs(1000);
}
}
经程序的编译下载,其运行效果如图1所示。
图1 字节数据收发测试
其中,首先接收的3个字节是通过程序发送的,而其后的几个字节则是在完成发送处理后,对所接收到的数据进行回显。
从开发板的原理图可知,其直接通过了2个串行接口,但UART1是为了红外收发测试而设的,使用在测试时只好利用UART0来进行测试。
图2 串行接口
有了串口的字节发送功能做保障,后面就可以放心地进行串行设备控制了。
更多回帖