0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用星闪BS25开发板NL001测试官方sdk中的外设程序uart

蓝牙 来源:蓝牙 2024-01-02 11:30 次阅读

内容简介

本文利用星闪BS25开发板NL001测试一下官方sdk中的外设程序uart,以便熟悉外设的基本操作。

测试工具

Operating system:Windows 10 home

deveco-device-tool-all-in-one:1.1.1_beta2

DevTools_CFBB:1.0.5

Compiler:CFBB IDE 1.0.3

Sdk:20230928

BurnTool:5.0.34

DebugKits_CFBB:3.0.98

Python:3.8.10

VSCode:1.66.2

Here we go

首先用“python build.py standard-bs25-app-evb menuconfig”配置工程为uart:

536352bc-a63a-11ee-8b88-92fbcf53809c.png

这里配置为interrupt方式。

编译后烧录到板子上测试,默认程序就能跑起来。首先保持烧录口(AP15和AP14)连接到电脑的UART口,打开串口调试助手查看log,上电后如下:

53798ae6-a63a-11ee-8b88-92fbcf53809c.png

尝试在串口发送123后返回数据:

53888d70-a63a-11ee-8b88-92fbcf53809c.png

明显默认程序运行正常,并且收到的数据也正常,默认程序是通过A_P15(TXD)、A_P14(RXD)与串口调试助手连接的,参数为115200、8、1、N。

想要自己整一下代码,把AP12(tx)、AP13(rx)两个引脚注册到UART1上面,然后uart1收到数据后再重新在uart1上发送出去,uart0(AP15 TX, AP14 RX)继续保留打印系统log的功能(该部分在os其他地方初始化了,并不是在uart_demo.c中初始化的)。

整了一下代码:

53a1759c-a63a-11ee-8b88-92fbcf53809c.png

53b3f76c-a63a-11ee-8b88-92fbcf53809c.png

53cc4e0c-a63a-11ee-8b88-92fbcf53809c.png

53dce406-a63a-11ee-8b88-92fbcf53809c.png

#include "pinctrl.h"

#include "uart.h"

#include "watchdog.h"

#include "osal_debug.h"

#include "cmsis_os2.h"

#include "app_init.h"

#define UART_BAUDRATE115200

#define UART_DATA_BITS3 //3实际上是对应了UART_DATA_BIT_8,见uart_data_bit_t

#define UART_STOP_BITS1

#define UART_PARITY_BIT0 //UART_PARITY_NONE,见uart_parity_t

#define UART_TRANSFER_SIZE16

#define CONFIG_UART_INT_WAIT_MS5

#define UART_TASK_STACK_SIZE0x1000

#define UART_TASK_DURATION_MS500

#define UART_TASK_PRIO(osPriority_t)(17)

static uint8_t g_app_uart_rx_buff[UART_TRANSFER_SIZE] = { 0 };

static uint8_t g_app_uart_int_rx_flag = 0;

static uint8_t g_app_uart_int_rx_len = 0;

static uart_buffer_config_t g_app_uart_buffer_config = {

.rx_buffer =g_app_uart_rx_buff,

.rx_buffer_size =UART_TRANSFER_SIZE

};

static void app_uart_init_pin(void)

{

uapi_pin_set_mode(S_AGPIO12,6);

uapi_pin_set_mode(S_AGPIO13,6);

}

static void app_uart_init_config(void)

{

uart_attr_t attr = {

.baud_rate = UART_BAUDRATE,//115200

.data_bits =UART_DATA_BITS, //8

.stop_bits =UART_STOP_BITS, //1

.parity =UART_PARITY_BIT //UART_PARITY_NONE

};

uart_pin_config_t pin_config ={

.tx_pin =S_AGPIO12,//S_MGPIO0,

.rx_pin =S_AGPIO13,//S_MGPIO1,

.cts_pin = PIN_NONE,

.rts_pin = PIN_NONE

};

uapi_uart_init(UART_BUS_1,&pin_config, &attr, NULL, &g_app_uart_buffer_config);

}

static void app_uart_read_int_handler(const void *buffer, uint16_tlength, bool error)

{

unused(error);

if (buffer == NULL || length ==0)

{

osal_printk("uart%dint mode transfer illegal data! ", UART_BUS_1);

return;

}

uint8_t *buff = (uint8_t*)buffer;

if(memcpy_s(g_app_uart_rx_buff, length, buff, length) != EOK)

{

osal_printk("uart%dint mode data copy fail! ", UART_BUS_1);

return;

}

g_app_uart_int_rx_flag = 1;

g_app_uart_int_rx_len = length;

}

static void app_uart_write_int_handler(const void *buffer, uint32_tlength, const void *params)

{

unused(buffer);

unused(length);

unused(params);

uint8_t *buff = (void *)buffer;

osal_printk("uart%d writedata[] =", UART_BUS_1);

for (uint8_t i = 0; i

{

osal_printk("%d", buff[i]);

}

osal_printk(" ");

}

static void *uart_task(const char *arg)

{

unused(arg);

/* UART pinmux. */

app_uart_init_pin();

/* UART init config. */

app_uart_init_config();

osal_printk("uart%d intmode register receive callback start! ", UART_BUS_1);

if(uapi_uart_register_rx_callback(UART_BUS_1,UART_RX_CONDITION_FULL_OR_SUFFICIENT_DATA_OR_IDLE,

1, app_uart_read_int_handler) == ERRCODE_SUCC) {

osal_printk("uart%dint mode register receive callback succ! ", UART_BUS_1);

}

while (1)

{

osDelay(UART_TASK_DURATION_MS);

while(g_app_uart_int_rx_flag != 1) {

osDelay(CONFIG_UART_INT_WAIT_MS);

}

g_app_uart_int_rx_flag = 0;

osal_printk("uart%dint mode send back! ", UART_BUS_1);

if(uapi_uart_write_int(UART_BUS_1, g_app_uart_rx_buff, g_app_uart_int_rx_len, 0,

app_uart_write_int_handler) == ERRCODE_SUCC)

{

osal_printk("uart%d int mode send back succ! ",UART_BUS_1);

}

g_app_uart_int_rx_len = 0;

}

return NULL;

}

static void uart_entry(void)

{

osThreadAttr_t attr;

attr.name ="UartTask";

attr.attr_bits = 0U;

attr.cb_mem = NULL;

attr.cb_size = 0U;

attr.stack_mem = NULL;

attr.stack_size =UART_TASK_STACK_SIZE;

attr.priority = UART_TASK_PRIO;

if(osThreadNew((osThreadFunc_t)uart_task, NULL, &attr) == NULL) {

/* Create task fail. */

}

}

/* Run the uart_entry. */

app_run(uart_entry);

由于电脑只有一个串口,不能同时连接AP15,AP14和AP12,AP13两个UART口进行测试,所以进行了以下测试:

53f7dd88-a63a-11ee-8b88-92fbcf53809c.png

从测试结果来看,UART0和UART1都已经能正常工作了,并且UART0是在引脚AP15和AP14上,UART1是工作在AP12和AP13上面,本例子程序只是对UART1进行了初始化,所以看来UART0是在系统其他地方进行了配置,并且通过调用osal_prink函数可以往UART0进行debug log发送。

所以个人感觉,UART0在万不得已的情况下就不要去动它了,串口就用其他的UART BUS好了,除非其他的都不够用了,那就再去研究一下怎么去使用UART0,对自己好一点,别乱折腾。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99973
  • 串口调试
    +关注

    关注

    2

    文章

    263

    浏览量

    24473
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83475
  • vscode
    +关注

    关注

    1

    文章

    146

    浏览量

    7376

原文标题:遥遥领先,星闪芯片BS25外设程序测试—uart

文章出处:【微信号:TalkBT,微信公众号:蓝牙】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何选择和编译海思星闪BS25 SDK下的sle mouse工程

    本文介绍如何选择和编译海思星闪BS25 SDK下的sle mouse工程。本文假设开发环境已经搭建完毕,具体搭建流程请参考《遥遥领先,华为海思星闪芯片BS25
    的头像 发表于 10-27 11:23 3215次阅读
    如何选择和编译海思星闪<b class='flag-5'>BS25</b> <b class='flag-5'>SDK</b>下的sle mouse工程

    星闪BS25开发板NL001初体验

    最近拿到了一块星闪BS25开发板NL001,做一个山寨版的“开箱”吧。
    的头像 发表于 11-17 09:17 3906次阅读
    星闪<b class='flag-5'>BS25</b><b class='flag-5'>开发板</b><b class='flag-5'>NL001</b>初体验

    如何搭建星闪BS25开发环境

    星闪(SparkLink)不多做介绍,有兴趣可以自行查找资料,简单来说就是一种新型的无线规范,理想是取代Bluetooth和Wifi,并且解决了一些蓝牙和wifi的痛点。BS25是某国内厂商推出的一颗支持星闪的SOC,本文介绍如何搭建星闪BS25
    的头像 发表于 11-18 17:14 1984次阅读
    如何搭建星闪<b class='flag-5'>BS25</b><b class='flag-5'>开发</b>环境

    用BurnTool给星闪芯片BS25烧写程序

    本文介绍用BurnTool给星闪芯片BS25烧写程序
    的头像 发表于 11-22 09:49 1226次阅读
    用BurnTool给星闪芯片<b class='flag-5'>BS25</b>烧写<b class='flag-5'>程序</b>

    华为星闪BS25 SDK中GADC设置的陷阱

    用华为星闪 BS25 SDK 做产品中发现 GADC中的 一个小陷阱。
    的头像 发表于 12-01 14:01 977次阅读
    华为星闪<b class='flag-5'>BS25</b> <b class='flag-5'>SDK</b>中GADC设置的陷阱

    利用星闪BS25开发板NL001测试SDK外设程序

    本文利用星闪BS25开发板NL001测试一下官方sdk中的
    的头像 发表于 12-22 10:49 1122次阅读
    <b class='flag-5'>利用</b>星闪<b class='flag-5'>BS25</b><b class='flag-5'>开发板</b><b class='flag-5'>NL001</b><b class='flag-5'>测试</b><b class='flag-5'>SDK</b>中<b class='flag-5'>外设</b><b class='flag-5'>程序</b>

    6410官方MODE原理图,海天雄6410的开发板

    6410官方MODE原理图,包括底板和核心两部分~!对开发ARM的有很大帮助!增加海天雄6410的
    发表于 08-04 10:21

    如何利用官方开发板(DA14580 Bluetooth Smart development Kit-Pro)测功耗

    本文主要介绍如何利用官方开发板DA14580/581/583 Bluetooth Smart development Kit-Pro(下文简称KitPro) 和软件SmartSnippets来
    发表于 04-01 09:27

    【博流 BL-HWC-G1 开发板试用】使用GPIO点灯(官方SDK

    在之前的两篇文章,我分别分享了博流 BL-HWC-G1 开发板上,官方sdk和openharmony的基本使用。官方
    发表于 11-22 19:06

    解决BS25 1.0.T20.12版本开发工具默认SDK无法编译的问题

    本文介绍在BS25 1.0.T20.12版本开发工具下,默认的SDK无法编译的问题。
    的头像 发表于 11-08 09:40 554次阅读
    解决<b class='flag-5'>BS25</b> 1.0.T20.12版本<b class='flag-5'>开发</b>工具默认<b class='flag-5'>SDK</b>无法编译的问题

    如何用BurnTool给海思的星闪芯片BS25烧写程序

    本文介绍用BurnTool给海思的星闪芯片BS25烧写程序
    的头像 发表于 11-14 09:08 2153次阅读
    如何用BurnTool给海思的星闪芯片<b class='flag-5'>BS25</b>烧写<b class='flag-5'>程序</b>?

    海思星闪BS25开发板NL001初体验

    最近拿到了一块星闪BS25开发板NL001,做一个山寨版的“开箱”吧。
    的头像 发表于 11-15 10:01 3011次阅读
    海思星闪<b class='flag-5'>BS25</b><b class='flag-5'>开发板</b><b class='flag-5'>NL001</b>初体验

    华为星闪 SLE 开发板 BS25SDK 初探

    星闪BS25开发板SDK初步接触
    的头像 发表于 11-15 16:01 2135次阅读

    华为星闪SLE开发板BS25SDK初探2

    按照上一篇文章的接口定义连接鼠标标传感器 paw3395,SDK提供的样板程序“sel_mouse_with_dongle”能正常工作。
    的头像 发表于 11-18 12:08 1961次阅读

    解决星闪芯片BS25 1.0.T20.12版本开发工具默认SDK无法编译的问题

    本文介绍在BS25 1.0.T20.12版本开发工具下,默认的SDK无法编译的问题。
    的头像 发表于 11-21 09:08 695次阅读
    解决星闪芯片<b class='flag-5'>BS25</b> 1.0.T20.12版本<b class='flag-5'>开发</b>工具默认<b class='flag-5'>SDK</b>无法编译的问题