【PB03F 超详细-环境搭建】蓝牙5.2安信可PB-03F-Kit开发板二次开发环境搭建

标题

本博文介绍安信可PB-03F-Kit开发板的基本情况、开发环境搭建,以及以点亮LED为例介绍程序编写和固件烧录的操作流程。

0.硬件介绍

PB-03F-Kit 是针对 PB-03F 模组设计的。开发板实物如下图。
在这里插入图片描述

PB03模组介绍

PB-03是由深圳市安信可科技有限公司开发的蓝牙模块。使用的PHY6252这样一款高集成度的低功耗蓝牙系统级芯片(SoC),专为物联网(IoT)、移动设备、可穿戴电子设备、智能家居等各种应用而设计。

支持BLE5.2。芯片 内置 64 KB SRAM,256KB flash,96 KB ROM。
最重要的是强大且便宜。仅5元左右。
规格书介绍的特性如下:
在这里插入图片描述
其他详情可以参考安信可官网的规格书。

PB-03F-Kit开发板介绍

开发板外观图:
在这里插入图片描述
尺寸图:
在这里插入图片描述

板载有RGB 灯、按键、CH340等资源,可以很方便的进行二次开发。
在这里插入图片描述

1.资料获取

主要去安信可官网或奉加微下载一些需要的开发资料。

1.1 安信可官网

进入安信可官网下载一些需要的资料,如规格书等等。
操作图:安信可官网:
请添加图片描述

1.2 奉加微官网

官网链接:www.phyplusinc.com
下载需要的资料即可。
在这里插入图片描述

2.开发环境搭建

开发环境主要使用Keil5集成开发软件。

2.1 Keil5软件安装

keil5软件安装,百度一下教程这里就不赘述了。

2.2 SDK下载

在官网下载SDK,然后解压。
在这里插入图片描述

SDK目录结构

在这里插入图片描述

2.3.烧录工具下载

在官网下载PhyPlusKit软件
在这里插入图片描述

3.点灯程序编译(嵌入式的hello world)

3.1 LED原理图

开发板板载有一个RGB灯,原理图如下。
我们将点亮蓝色(Blue)的LED,所以代码要做的工作就是控制P18(GPIO_18)输出高电平
在这里插入图片描述

3.2 代码编写

在gpio例程的基础上修改代码即可。
打开SDK下面的example\peripheral\gpio例程,双击下图工程文件。
在这里插入图片描述
建议关闭低功耗模式。
因为芯片休眠了,LED的输出也会关闭。
点击魔法棒,选择C/C++选项。
在这里插入图片描述
宏说明:

  • CFG_SLEEP_MODE=PWR_MODE_SLEEP :使能低功耗模式,固件程序执行过程中,
    会在空闲过程进入睡眠,睡眠之后调试器无法进行调试跟踪,断点也失效
  • CFG_SLEEP_MODE=PWR_MOD_NO_SLEEP :关闭低功耗模式,固件程序执行过
    程中,处理器一直处于唤醒状态。

CFG_SLEEP_MODE=PWR_MODE_SLEEP修改为CFG_SLEEP_MODE=PWR_MOD_NO_SLEEP
修改后如图:
在这里插入图片描述
修改gpio_demo.c函数
gpio示例演示的是按键功能,这里示例写的功能太复杂了。
我们将其简化为点亮蓝色LED(GPIO_18 输出高电平)。
找到void Key_Demo_Init(uint8 task_id)将其全部注释掉。
在这里插入图片描述
替换为如下
在这里插入图片描述
修改后的参考代码为:

//void Key_Demo_Init(uint8 task_id)
//{
//    uint8_t i = 0;
//    key_TaskID = task_id;
//    LOG("gpio key demo start...\n");
//    hal_gpio_init();
//    hal_gpioretention_register(P20);
//    hal_gpio_write(P20,1);
    hal_gpio_pin2pin3_control(P2,1);
//    /*
//        when use key,please set the following parameters:
//        1.key number,config KEY_NUM in key.h
//        2.gpio used,config key_state.pin
//             P00~P03:default jtag,we can use it as key when no debug.
//             P04~P07,P11~P15:default gpio,use it easily.
//             P08:mode select pin,cannot used as other usage.
//             P09~P10,it is uart in burn mode which cannot config.it is configable when in debug mode.
//             P16~P17:xtal pin,when use this pins,please use rc as system frequency.config hal_rtc_clock_config(CLK_32K_RCOSC) in hal_init first.
//             P18~P34:wakeup is supported,but interrupt is not supported,so config it as key is not suggested.
//        3.idle level,config key_state.idle_level
//        4.key type,if only use press and release,ignore the long press and release code
//        5.taskID and callback function
//    */
  key_state.key[0].pin = GPIO_P14;//default gpio
  key_state.key[1].pin = GPIO_P15;
  key_state.key[2].pin = GPIO_P00;//default jtag
  key_state.key[3].pin = GPIO_P01;
  key_state.key[4].pin = GPIO_P02;
  key_state.key[5].pin = GPIO_P03;
  key_state.key[6].pin = GPIO_P16;//default xtal
  key_state.key[7].pin = GPIO_P17;//default xtal

  key_state.key[0].pin = GPIO_P09;
  key_state.key[1].pin = GPIO_P10;
//    key_state.key[0].pin = GPIO_P03;
  key_state.key[1].pin = GPIO_P15;

//    for(i = 0; i < HAL_KEY_NUM; ++i)
//    {
//        key_state.key[i].state = HAL_STATE_KEY_IDLE;
//        key_state.key[i].idle_level = HAL_LOW_IDLE;

//        if(key_state.key[i].pin == GPIO_P16)
//        {
//            hal_pwrmgr_register(MOD_USR2,NULL,P16_wakeup_handler);
//            hal_gpio_cfg_analog_io(key_state.key[i].pin,Bit_DISABLE);
//            LOG("P16 is used\n");
//        }
//        else if(key_state.key[i].pin == GPIO_P17)
//        {
//            hal_pwrmgr_register(MOD_USR3,NULL,P17_wakeup_handler);
//            hal_gpio_cfg_analog_io(key_state.key[i].pin,Bit_DISABLE);
//            LOG("P17 is used\n");
//        }
//        else if((key_state.key[i].pin == GPIO_P09) || (key_state.key[i].pin == GPIO_P10))
//        {
//            uart_port_reconfig();
//        }
//    }

  key_state.key[0].idle_level = HAL_LOW_IDLE;
  key_state.key[1].idle_level = HAL_HIGH_IDLE;
//    key_state.task_id = key_TaskID;
//    key_state.key_callbank = key_press_evt;
//    key_init();
//    osal_start_timerEx(key_TaskID, KEY_DEMO_ONCE_TIMER, 5000);
//    osal_start_reload_timer(key_TaskID, KEY_DEMO_CYCLE_TIMER, 5000);
//}
void Key_Demo_Init(uint8 task_id)
{
	key_TaskID = task_id;// 任务id,先暂时不用管。
	
	// 此写函数默认会调用hal_gpio_pin_init(pin,GPIO_OUTPUT);
	hal_gpio_write(GPIO_P18,HAL_HIGH_IDLE); // GPIO18 输出高电平,点亮LED
}

然后点击编译,如下图所示。
在这里插入图片描述
这里的编译有3个警告,是因为这个c文件定义了函数却没有调用。就点亮led可以暂时先忽略此警告。
在这里插入图片描述

After Build - User command #2: fromelf.exe .\Objects\gpio_demo.axf --i32combined --output .\bin\gpio_demo.hex

注意这一行的 --output .\bin\gpio_demo.hex告诉了我们输出的gpio_demo.hex固件在bin目录下

4.程序烧录

4.1 安装串口驱动

开发板使用的驱动芯片是CH340,所以烧录之前先安装CH340的驱动。
安装方法,搜索一下就有,就不赘述了。

4.2 烧录工具

连接开发板,打开PhyPlusKit软件。打开串口COM3,选择UXTDWU。请添加图片描述
此时会看到右侧一直输出。说明开发板连接成功。

UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU
UART TX ASCII: UXTDWU

长按复位按键,大概2s左右后,松开复位键。
也就是如图所示的按键。
在这里插入图片描述

出现UART RX: cmd>>:字样,说明已经可以开始下载程序了。波特率选项自动变为11520,是正常现象。
在这里插入图片描述
烧录之前必须先擦除程序。点击:Erase。擦除成功如下。
在这里插入图片描述

编译生成的固件在bin目录下。
在这里插入图片描述
选择要烧录的hex固件
双击如下图输入框,选择需要下载的.hex固件。固件位置如上图所示。

在这里插入图片描述
点击Write,进行程序烧录。

请添加图片描述
烧录成功如下图
在这里插入图片描述
下载成功后需手动重启开发板,程序才会开始执行。

5.实验现象

烧录工具会输出一些调试信息。
在这里插入图片描述
开发板LED成功点亮。夸一下,这是多么璀璨的蓝色o( ̄▽ ̄)ブ
在这里插入图片描述

6.资料汇总打包下载

打包下载链接:打包下载
在这里插入图片描述

7.常见问题汇总

  • 无法下载
    1.首先要安装CH340的驱动,其次烧录软件要选择对应的串口COM编号。在设备管理器里面可以查看。
    在这里插入图片描述
    2.下载显示超时。一定要先擦除再进行下载。严格按照本博文的流程可以多试几次。
  • LED不亮
    1.记得修改宏定义。NO_SLEEP模式
    在这里插入图片描述
    2.程序成功编译,没有错误。
    3.烧录对应生成的HEX文件。
  • 18
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值