由 WangChong 贡献,Ai-Thinker 进行整理
大家好,今天主要要分享的其实并不是单独的技术贴。 因为技术永远都是在变化的,也是永远都学不完的。那么如何去学习快速上手的能力则变得尤为重要。 拿小安派举例,刚上手会变的很无所适从。不知道该从什么地方下手。有些人会想着,先从官方给的Examples找找看看怎么做。这无疑是一个很聪明的方法。因为可以快速的验证芯片的外设资源。然后根据在这个Example 里用到的方法去查询对应的方法定义。根据提供的API进行快速的开发。
然后,就会去想找不同的头文件定义根据注释进行学习。根据IDE进行代码跳转来查看对应的方法说明或者参数定义。但是在官方提供的代码例程中并没有对一些结构体和字段进行详细的注释说明(经验丰富的人可以忽略这一条)。很难根据结构体或者方法定义来理解和使用对应的功能。还有一点就是IDE里文件过多,频繁的上下文切换很容易忘记之前看的是什么。 我刚才详细的查看了aithinker_Ai-M6X_SDK git hub仓库。 发现了博流SDK的文档链接
官方有很详细的各种库的使用和教程,Cmake , debug ,LHal API. ETC. 
比如说我想用UART功能,那么我只需要在LHAL目录下找到详细的API说明 
点击链接后会跳转到这个页面 
在这个页面左侧的一级菜单分别是 Hal的模块, 数据结构(整个博流SDK中所有的结构体等)和文件。 我们可以忽略下方的 数据结构和文件,因为这些如果我们不明白的话,可以在函数中直接跳转过去进行查阅。
我们现在在LHAL里找到今天需要用的UART模块 
上述是一个UART模块的关系图,可以查看UART模块下具体还包含什么。
如下图所示,下图有详细的介绍了当前模块需要用到的数据结构。 和所有的方法定义。 
我们在点击上述的结构体后会跳转到对应的数据结构说明如下所示:左侧是数据结构名称,上述是UML类图,中间是字段的数据类型以及名称,最下方则是各个参数的详细说明。 
我们主要用到下面的方法,分别是初始化,发送一个char 和 接受一个char 
相信到这里,大家应该有能力自己写出一个串口的测试DEMO,下面附上我自己写的。请大佬多多指正共同学习,谢谢!
#include "board.h"
#include "bflb_uart.h"
struct bflb_device_s *uart;
int main(void)
{
board_init();
// 获取外设资源串口0
uart = bflb_device_get_by_name("uart0");
// 定义结构体用于初始化串口配置
struct bflb_uart_config_s cfg;
// 结构体配置
cfg.baudrate = 2000000;
cfg.data_bits = UART_DATA_BITS_8;
cfg.stop_bits = UART_STOP_BITS_1;
cfg.parity = UART_PARITY_NONE;
cfg.flow_ctrl = 0;
cfg.tx_fifo_threshold = 7;
cfg.rx_fifo_threshold = 7;
bflb_uart_init(uart, &cfg);
int ch;
while (1) {
// 串口接受数据
ch = bflb_uart_getchar(uart);
// 接收不到的话则返回-1, 一旦接受到的话则转发出去
if (ch != -1) {
bflb_uart_putchar(uart, ch);
}
}
}实验现象如下:在串口打开,并且软件波特率设置与代码一致时,发送的消息会被转发回来。 
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

