【蓝牙5.2 PB-03F教程】二次开发环境搭建

[复制链接]
查看4288 | 回复18 | 2024-10-16 15:19:17 | 显示全部楼层 |阅读模式
一:硬件介绍
PB-03F-Kit 是针对 PB-03F 模组设计的。开发板实物如下图。
1.png
PB-03F开发板介绍
PB-03F开发板是由深圳市安信可科技有限公司开发的蓝牙模块。使用的PHY6252这样一款高集成度的低功耗蓝牙系统级芯片(SoC),专为物联网(IoT)、移动设备、可穿戴电子设备、智能家居等各种应用而设计。
产品特性:
       支持 BLE5.2,速率支持:125Kbps,500Kbps,1Mbps,2Mbps
       拥有 64 KB SRAM,256KB flash,96 KB ROM,256bit efuse
       支持 UART/GPIO/ADC/PWM/I2C/SPI/PDM/DMA 接口
       支持多种休眠模式,深度睡眠电流小于 1uA
       支持串口本地升级和远程固件升级(FOTA)
       通用 AT 指令可快速上手
       支持二次开发,集成了 Windows 开发环境
PB-03F开发板规格书:
https://docs.ai-thinker.com/_media/pb-03f-kit%E5%BC%80%E5%8F%91%E6%9D%BF%E8%A7%84%E6%A0%BC%E4%B9%A6v1.0.0_1_.pdf
PB-03F-Kit开发板外观图
0.png
尺寸图:
01.png
板载有RGB 灯、按键、CH340等资源,可以很方便的进行二次开发。
二. 资料获取
主要在安信可科技官网或奉加微电子官网下载一些需要的开发资料。
三. 开发环境搭建
开发环境主要使用Keil5集成开发软件。
1. Keil5软件安装
keil5软件安装,百度一下教程这里就不赘述了。
2. SDK下载
在官网下载SDK,然后解压。
5.png
SDK目录结构

6.png


3. 烧录工具下载
在官网下载PhyPlusKit软件
7.png
四. 点灯程序编译(嵌入式的hello world)
1. LED原理图
开发板板载有一个RGB灯,原理图如下。
我们将点亮蓝色(Blue)的LED,所以代码要做的工作就是控制P18(GPIO_18)输出高电平。
8.png
2. 代码编写
在gpio例程的基础上修改代码即可。
打开SDK下面的example\peripheral\gpio例程,双击下图工程文件。
9.png
建议关闭低功耗模式。
因为芯片休眠了,LED的输出也会关闭。
点击魔法棒,选择C/C++选项。
10.png
宏说明:
      · CFG_SLEEP_MODE=PWR_MODE_SLEEP :使能低功耗模式,固件程序执行过程中,会在空闲过程进入睡眠,睡眠之后调试器无法进行调试跟踪,断点也失效
      · CFG_SLEEP_MODE=PWR_MOD_NO_SLEEP :关闭低功耗模式,固件程序执行过程中,处理器一直处于唤醒状态。
将CFG_SLEEP_MODE=PWR_MODE_SLEEP修改为CFG_SLEEP_MODE=PWR_MODE_NO_SLEEP。
修改后如图:
11.png
修改gpio_demo.c函数
gpio示例演示的是按键功能,这里示例写的功能太复杂了。
我们将其简化为点亮蓝色LED(GPIO_18 输出高电平)。
找到void Key_Demo_Init(uint8 task_id)将其全部注释掉。
12.png
替换为如下:
13.png
修改后的参考代码为:
  1. //void Key_Demo_Init(uint8 task_id)
  2. //{
  3. //    uint8_t i = 0;
  4. //    key_TaskID = task_id;
  5. //    LOG("gpio key demo start...\n");
  6. //    hal_gpio_init();
  7. //    hal_gpioretention_register(P20);
  8. //    hal_gpio_write(P20,1);
  9.     hal_gpio_pin2pin3_control(P2,1);
  10. //    /*
  11. //        when use key,please set the following parameters:
  12. //        1.key number,config KEY_NUM in key.h
  13. //        2.gpio used,config key_state.pin
  14. //             P00~P03:default jtag,we can use it as key when no debug.
  15. //             P04~P07,P11~P15:default gpio,use it easily.
  16. //             P08:mode select pin,cannot used as other usage.
  17. //             P09~P10,it is uart in burn mode which cannot config.it is configable when in debug mode.
  18. //             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.
  19. //             P18~P34:wakeup is supported,but interrupt is not supported,so config it as key is not suggested.
  20. //        3.idle level,config key_state.idle_level
  21. //        4.key type,if only use press and release,ignore the long press and release code
  22. //        5.taskID and callback function
  23. //    */
  24.   key_state.key[0].pin = GPIO_P14;//default gpio
  25.   key_state.key[1].pin = GPIO_P15;
  26.   key_state.key[2].pin = GPIO_P00;//default jtag
  27.   key_state.key[3].pin = GPIO_P01;
  28.   key_state.key[4].pin = GPIO_P02;
  29.   key_state.key[5].pin = GPIO_P03;
  30.   key_state.key[6].pin = GPIO_P16;//default xtal
  31.   key_state.key[7].pin = GPIO_P17;//default xtal

  32.   key_state.key[0].pin = GPIO_P09;
  33.   key_state.key[1].pin = GPIO_P10;
  34. //    key_state.key[0].pin = GPIO_P03;
  35.   key_state.key[1].pin = GPIO_P15;

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

  40. //        if(key_state.key[i].pin == GPIO_P16)
  41. //        {
  42. //            hal_pwrmgr_register(MOD_USR2,NULL,P16_wakeup_handler);
  43. //            hal_gpio_cfg_analog_io(key_state.key[i].pin,Bit_DISABLE);
  44. //            LOG("P16 is used\n");
  45. //        }
  46. //        else if(key_state.key[i].pin == GPIO_P17)
  47. //        {
  48. //            hal_pwrmgr_register(MOD_USR3,NULL,P17_wakeup_handler);
  49. //            hal_gpio_cfg_analog_io(key_state.key[i].pin,Bit_DISABLE);
  50. //            LOG("P17 is used\n");
  51. //        }
  52. //        else if((key_state.key[i].pin == GPIO_P09) || (key_state.key[i].pin == GPIO_P10))
  53. //        {
  54. //            uart_port_reconfig();
  55. //        }
  56. //    }

  57.   key_state.key[0].idle_level = HAL_LOW_IDLE;
  58.   key_state.key[1].idle_level = HAL_HIGH_IDLE;
  59. //    key_state.task_id = key_TaskID;
  60. //    key_state.key_callbank = key_press_evt;
  61. //    key_init();
  62. //    osal_start_timerEx(key_TaskID, KEY_DEMO_ONCE_TIMER, 5000);
  63. //    osal_start_reload_timer(key_TaskID, KEY_DEMO_CYCLE_TIMER, 5000);
  64. //}
  65. void Key_Demo_Init(uint8 task_id)
  66. {
  67.         key_TaskID = task_id;// 任务id,先暂时不用管。
  68.         
  69.         // 此写函数默认会调用hal_gpio_pin_init(pin,GPIO_OUTPUT);
  70.         hal_gpio_write(GPIO_P18,HAL_HIGH_IDLE); // GPIO18 输出高电平,点亮LED
  71. }
复制代码
然后点击编译,如下图所示。

14.png
这里的编译有3个警告,是因为这个c文件定义了函数却没有调用。就点亮led可以暂时先忽略此警告。
15.png
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目录下。
五. 程序烧录
1. 安装串口驱动
开发板使用的驱动芯片是CH340,所以烧录之前先安装CH340的驱动。
安装方法,搜索一下就有,就不赘述了。
2. 烧录工具
连接开发板,打开PhyPlusKit软件。打开串口COM3,选择UXTDWU。
16.gif
此时会看到右侧一直输出。说明开发板连接成功。
  1. UART TX ASCII: UXTDWU
  2. UART TX ASCII: UXTDWU
  3. UART TX ASCII: UXTDWU
  4. UART TX ASCII: UXTDWU
  5. UART TX ASCII: UXTDWU
  6. UART TX ASCII: UXTDWU
  7. UART TX ASCII: UXTDWU
  8. UART TX ASCII: UXTDWU
  9. UART TX ASCII: UXTDWU
  10. UART TX ASCII: UXTDWU
  11. UART TX ASCII: UXTDWU
  12. UART TX ASCII: UXTDWU
  13. UART TX ASCII: UXTDWU
  14. UART TX ASCII: UXTDWU
  15. UART TX ASCII: UXTDWU
  16. UART TX ASCII: UXTDWU
  17. UART TX ASCII: UXTDWU
  18. UART TX ASCII: UXTDWU
  19. UART TX ASCII: UXTDWU
  20. UART TX ASCII: UXTDWU
复制代码
长按复位按键,大概2s左右后,松开复位键。
也就是如图所示的按键。
17.png
出现UART RX: cmd>>:字样,说明已经可以开始下载程序了。波特率选项自动变为11520,是正常现象。
18.png
烧录之前必须先擦除程序。点击:Erase。擦除成功如下。
19.png
编译生成的固件在bin目录下。

20.png
选择要烧录的hex固件
双击如下图输入框,选择需要下载的.hex固件。固件位置如上图所示。
21.png
点击Write,进行程序烧录。

22.gif
烧录成功如下图

23.png
下载成功后需手动重启开发板,程序才会开始执行。
六. 实验现象
烧录工具会输出一些调试信息。
24.png
开发板LED成功点亮。夸一下,这是多么璀璨的蓝色o( ̄▽ ̄)ブ
25.png
七. 常见问题汇总
· 无法下载
1. 首先要安装CH340的驱动,其次烧录软件要选择对应的串口COM编号。在设备管理器里面可以查看。
27.png
2. 下载显示超时。一定要先擦除再进行下载。严格按照本博文的流程可以多试几次。
· LED不亮
1. 记得修改宏定义。NO_SLEEP模式
28.png
2. 程序成功编译,没有错误。
3. 烧录对应生成的HEX文件。
4.png
用心做好保姆工作
回复

使用道具 举报

bzhou830 | 2024-10-16 16:04:20 | 显示全部楼层
园长又开始出手了
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

lazy | 2024-10-16 16:12:00 | 显示全部楼层
给园长点赞
回复 支持 反对

使用道具 举报

King6688 | 2024-10-16 18:45:52 | 显示全部楼层
连园长都会做硬件开发了
回复 支持 反对

使用道具 举报

iiv | 2024-10-16 20:59:39 | 显示全部楼层
完蛋了,园长越来越厉害了
回复 支持 反对

使用道具 举报

爱笑 | 2024-10-17 08:40:11 | 显示全部楼层
King6688 发表于 2024-10-16 18:45
连园长都会做硬件开发了

哈哈哈
用心做好保姆工作
回复 支持 反对

使用道具 举报

大猫的鱼 | 2024-10-17 08:52:11 | 显示全部楼层
腻害腻害
回复

使用道具 举报

WildboarG | 2024-10-19 08:34:39 | 显示全部楼层
学习
回复

使用道具 举报

OldNewman | 2024-10-24 13:50:33 | 显示全部楼层
好文,学习了
回复 支持 反对

使用道具 举报

410080781 | 2024-11-1 14:56:02 | 显示全部楼层
太详细了,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则