1# 小凌派-RK2206开发板基础外设开发——串口打印显示 2 3本示例将演示如何在小凌派-RK2206开发板上使用额外串口打印 4 5 6 7## 硬件接口说明 8 9引脚名称开发者可在硬件资源图中查看。 10 11| 引脚名称 | 功能描述 | 12| :-------- | :----------------- | 13| GPIO0_PB6 | UART0_RX_M0 串口RX | 14| GPIO0_PB7 | UART0_TX_M0 串口TX | 15| GND | 电源地引脚 | 16 17### 硬件连接 18 19安装图如下所示: 20 21 22注意: 23(1)串口GND引脚一定要连接到开发板的GND引脚上。 24 25## 程序设计 26 27### API分析 28 29#### 头文件 30 31```c 32#include "lz_hardware.h" 33``` 34 35注意:实际头文件可参考[uart.h](/device/soc/rockchip/rk2206/hardware/include/lz_hardware/uart.h) 36 37#### LzUartInit() 38 39```c 40unsigned int LzUartInit(unsigned int id, const UartAttribute *param); 41``` 42 43**描述:** 44 45初始化uart设备。 46 47**参数:** 48 49| 名字 | 描述 | 50| :---- | :---------------------------------------------------------------------------------------- | 51| id | 串口ID | 52| param | 串口配置参数,详情可参考[uart.h](/device/soc/rockchip/rk2206/hardware/include/lz_hardware/uart.h) | 53 54**返回值:** 55 56返回LZ_HARDWARE_SUCCESS为成功,反之为失败 57 58#### LzUartDeinit() 59 60```c 61unsigned int LzUartDeinit(unsigned int id); 62``` 63 64**描述:** 65 66释放uart设备。 67 68**参数:** 69 70| 名字 | 描述 | 71| :--- | :----- | 72| id | 串口ID | 73 74**返回值:** 75 76返回LZ_HARDWARE_SUCCESS为成功,反之为失败 77 78#### LzUartRead() 79 80```c 81unsigned int LzUartRead(unsigned int id, unsigned char *data, unsigned int dataLen); 82``` 83 84**描述:** 85 86串口读操作。 87 88**参数:** 89 90| 名字 | 描述 | 91| :------ | :----------------------- | 92| id | 串口ID | 93| data | 串口读取数据后存放的地址 | 94| dataLen | 串口读取数据的个数 | 95 96**返回值:** 97 98成功返回读取数据长度 99 100#### LzUartWrite() 101 102```c 103unsigned int LzUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen); 104``` 105 106**描述:** 107 108串口写操作。 109 110**参数:** 111 112| 名字 | 描述 | 113| :------ | :----------------- | 114| id | 串口ID | 115| data | 串口写入数据的地址 | 116| dataLen | 串口写入数据的个数 | 117 118**返回值:** 119 120成功返回发送数据长度 121 122### 主要代码分析 123 124这部分代码为uart初始化的代码。首先用 `LzUartDeinit()` 函数将串口释放掉;其次用 `PinctrlSet()`将GPIO0_PB6复用为UART0_RX_M0,GPIO0_PB7复用为UART0_TX_M0。最后调用 `LzUartInit()`函数初始化uart。 125 126```c 127LzUartDeinit(UART_ID); 128 129attr.baudRate = 115200; 130attr.dataBits = UART_DATA_BIT_8; 131attr.pad = FLOW_CTRL_NONE; 132attr.parity = UART_PARITY_NONE; 133attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK; 134attr.stopBits = UART_STOP_BIT_1; 135attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK; 136 137PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); 138PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); 139 140ret = LzUartInit(UART_ID, &attr); 141if (ret != LZ_HARDWARE_SUCCESS) 142{ 143 printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret); 144 return; 145} 146``` 147 148具体uart写操作如下: 149 150```c 151ret = LzUartWrite(UART_ID, str, strlen(str)); 152if (ret != LZ_HARDWARE_SUCCESS) 153{ 154 printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret); 155 return; 156} 157``` 158 159## 编译调试 160 161### 修改 BUILD.gn 文件 162 163修改 `vendor/lockzhiner/lingpi/sample` 路径下 BUILD.gn 文件,指定 `b6_uart` 参与编译。 164 165```r 166"b6_uart", 167``` 168 169在主目录下输入编译命令。 170 171```shell 172hb build -f 173``` 174 175### 运行结果 176 177示例代码编译烧录代码后,按下开发板的RESET按键,通过串口助手查看日志,串口0显示如下: 178 179```c 180HelloWorld! 181HelloWorld! 182HelloWorld! 183HelloWorld! 184... 185``` 186 187注意:如果你使用MobaXterm,并且发现串口0能打印,但是换行有问题,则: 188(1)在MobaXterm界面中按住右边的Ctrl按键 + 右击鼠标,弹出菜单,选择 `Change terminal settings...`,如下图所示: 189 190 191 192(2)将2个选项勾选上即可。如下图所示: 193 194 195 196