前言上次评测自建了一个工程,但是面对BLE协议栈这种庞然大物,再加上本人是初次接触,完全是不了解的状态,单独跑了几个固件包里面的实例工程,老实说效果非常炫酷,但是实际做起来一窍不通。还好官网的资料丰富,论坛大神给劲,根据提示找到了LAT1309 一步一步创建STM32WBA BLE_Custom。至此,终于是能够建立一个基于CubeMX建立的个人工程了。 建立工程过程工程的环境如下: <ul><li>STM32CubeMX 6.9.1</li><li>MDK-ARM 5.38</li><li>STM32Cube FW_WBA V1.1.0</li></ul> 将CubeMX更新到最新版之后它会自动下载需要的固件包,虽然LAT1309中已经说得很详细,但是固件包与开发环境还是有所区别,所以特意说明 建立工程的整体过程可以说是非常的简单无脑,除了最基本的时钟电源等等,但是又因为是官方出品的开发板,所以直接建立一个基于NUCLEO的工程就行,直接把串口按键LED都调通了,也就是说我得工作在CubeMX这里直接点一下就完成了。然后为了建立一个基于BLE的工程,直接在Middleware and Software Packs处跟随"STM32_WPAN"的提示就能完成全部组件的建立 图1 STM32_WPAN 在此处,只需要把鼠标悬停在STM32_WPAN上就可以知道下一步需要什么组件,一共是需要ADC、CRC、RAMCFG、ICACHE、RNG、RF和RTC。这里只需要跟随官方文档依次建立就能启动STM32_WPAN。 最后建立完成STM32_WPAN所需要的依赖项之后就能进行BLE协议栈的设置了。根据最近的学习,大致了解了一个自定义服务一共有三个特征,分别给三个特征建立不同的功能属性之后应该就能跑起来了 KEIL设置官方文档演示的是基于IAR工程的生成,我是基于KEIL工程的生成,自然而然的遇到了一些小问题 首先是在app_entry.c中第111行CubeMX生成了一个static void SystemPower_Config(void)的函数声明,第267行也生成了static void SystemPower_Config(void)的函数定义,但是这个函数在main.h中又被引用,所以将app_entry.c中该函数的声明定义前的static去除 图2 main.h中的声明 然后如果生成的代码必须在KEIL的Options中的Asm处Language/Code Generation栏的Assembler Option更改为armclang(Arm Syntax) 图3 更改Asm 最后在编译时会冒出很多关于内存的错误,需要在Options中的Link处更改ScatterFile,我是直接拿了官方例子中的sct文件放在KEIL工程的根目录。 图4 更改Linker 更改了ScatterFile之后,还更改了Misc controls为 -diag_suppress 6654 -diag_suppress 6775 至于原因暂时不清楚,没有仔细研究过这方面 更改完上述三个问题之后,就能继续跟着官方文档作者的脚步继续前进了 图5 编译完毕 实验现象将编译完成的程序下载到板子之后,可以通过手机进行连接,串口也会输出相应的信息 图6 初始化串口输出 在使用手机上的 ST BLE ToolBox进行连接之后还会输出更多信息。 图7 手机连接 然后能够使用ToolBox上的Sevices进行输入输出,但是在实验中发现并没有开启全部的功能,在手机APP上一通乱按之后,程序会直接闪退,应该是遇到没有响应的功能了 总结因为对BLE协议栈与芯片功能的不熟悉,被迫使用了CubeMX生成代码,但是实际体验下来,效果非常的好,只需要点击就能启动硬件模块,然后还能通过提示来启动工程所需要的硬件依赖项。虽然最后在工程编译的时候遇到了一些问题,但是都无伤大雅,快速的解决之后如愿把工程跑了起来。很方便,争取之后的项目中多多使用。 本次的测验中还存在没有使用的BLE协议栈功能,等待继续深入了解蓝牙之后重新使用CubeMX再次生成工程解决手机APP闪退的问题。 |
拷打cubemx【001】——艰难的选型路
【STM32N6570-DK评测】4.800MHz的点灯
【STM32N6570-DK评测】1.你好N6
兔哥的杂谈【002】——如何性价比更高地去编译STM32
【STM32N6570-DK评测】2.最简点灯
【STM32N6570-DK评测】3.从外部flash启动
【圣诞专享活动】使用TouchGFX做GUI显示:圣诞快乐&Merry Christmas!
X-NUCLEO-IKS4A1实现手势滑动
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
使用蓝牙的时候,你能把主频调到100MHz吗?我在主频为16M的时候,蓝牙可以正常初始化,主频设置成100MHz的时候,在初始化蓝牙协议栈的时候挂了,蓝牙协议栈又不给开源,只给了一个Lib
牛!!!!