硬件接口说明
引脚名称开发者可在硬件资源图中查看。
注意: (1)串口GND引脚一定要连接到开发板的GND引脚上。
程序设计
API分析
头文件
#include "lz_hardware.h"
注意:实际头文件可参考uart.h
LzUartInit()
unsigned int LzUartInit(unsigned int id, const UartAttribute *param);
描述:
初始化uart设备。
参数:
返回值:
返回LZ_HARDWARE_SUCCESS为成功,反之为失败
LzUartDeinit()
unsigned int LzUartDeinit(unsigned int id);
描述:
释放uart设备。
参数:
返回值:
返回LZ_HARDWARE_SUCCESS为成功,反之为失败
LzUartRead()
unsigned int LzUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
描述:
串口读操作。
参数:
返回值:
成功返回读取数据长度
LzUartWrite()
unsigned int LzUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
描述:
串口写操作。
参数:
返回值:
成功返回发送数据长度
主要代码分析
这部分代码为uart初始化的代码。首先用 LzUartDeinit() 函数将串口释放掉;其次用 PinctrlSet()将GPIO0_PB6复用为UART0_RX_M0,GPIO0_PB7复用为UART0_TX_M0。最后调用 LzUartInit()函数初始化uart。
LzUartDeinit(UART_ID);
attr.baudRate = 115200;
attr.dataBits = UART_DATA_BIT_8;
attr.pad = FLOW_CTRL_NONE;
attr.parity = UART_PARITY_NONE;
attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK;
attr.stopBits = UART_STOP_BIT_1;
attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK;
PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
ret = LzUartInit(UART_ID, &attr);
if (ret != LZ_HARDWARE_SUCCESS)
{
printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);
return;
}
具体uart写操作如下:
ret = LzUartWrite(UART_ID, str, strlen(str));
if (ret != LZ_HARDWARE_SUCCESS)
{
printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret);
return;
}
编译调试
修改 BUILD.gn 文件
修改 vendor/lockzhiner/lingpi/sample 路径下 BUILD.gn 文件,指定 b6_uart 参与编译。
"b6_uart",
在主目录下输入编译命令。
hb build -f
运行结果
示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志,串口0显示如下:
HelloWorld!
HelloWorld!
HelloWorld!
HelloWorld!
...
注意:如果你使用MobaXterm,并且发现串口0能打印,但是换行有问题,则: (1)在MobaXterm界面中按住右边的Ctrl按键 + 右击鼠标,弹出菜单,选择 Change terminal settings...,将2个选项勾选上即可。
原作者:王小彬 Gitee