Let's Do!ST NUCLEO-WBA55CG无线MCU开发大作战。
开发板开箱
开发板介绍
NUCLEO-WBA52CG是一款支持Bluetooth®低功耗的无线超低功耗开发板,内嵌有符合Bluetooth®低功耗SIG 5.3规范且功能强大的超低功耗无线电模块。
ARDUINO® Uno V3连接支架和ST morpho接头利用多种专用屏蔽提供了一种扩展STM32 Nucleo开放式开发平台功能的简单方法。
开发板功能介绍
基于Arm® Cortex®‑M33内核的超低功耗无线STM32WBA52CG微控制器,具有1 MB的Flash存储器和128 KB的SRAM,采用UFQFPN48封装
MCU射频开发板 (MB1863):
支持Bluetooth® 5.3规范的2.4 GHz射频收发器
带TrustZone®、MPU、DSP和FPU的Arm® Cortex® M33 CPU
集成式PCB天线
三个用户LED
三个用户和一个复位按钮
板连接器:
USB Micro-B
ARDUINO® Uno V3扩展连接器
ST morpho接头,用于所有STM32 I/O的完全访问
灵活的供电选项:ST-LINK、USB VBUS或外部电源
具有USB重新枚举功能的板上STLINK-V3MODS调试器/编程器:大容量存储器、虚拟COM端口和调试端口
STM32CubeWB MCU软件包提供全面的免费软件库和示例
支持多种集成开发环境 (IDE),包括IAR Embedded Workbench®、MDK-ARM,以及STM32CubeIDE
官方数据手册:
https://www.st.com.cn/resource/en/data_brief/nucleo-wba55cg.pdf
板载资源介绍
项目介绍
使用NUCLEO-WBA55CG开发板+20A MOS驱动板+TP4056充电板+锂电池+灯管/灯带,制作一个可以调节亮度的灯!
材料展示
材料连接
锂电池的正负极分别连接至TP4056充放电小板的B+和B-端口,以确保能量的稳定传输;
充放电小板的OUT+和OUT-端口依次与MOS驱动板的+V输入端和-V输入端相连,形成电源的输入通道;
MOS驱动板的+V输出端和-V输出端分别与灯带的正负极相接,从而驱动灯带的发光;
NUCLEO-WBA55CG开发板支持USB供电,亦可通过充放电小板的OUT+端接+5V,OUT-端接GND进行供电,提供灵活的电源选择;
NUCLEO-WBA55CG开发板的A1和VCC端口连接至MOS驱动板的控制引脚,以实现精确的信号控制。
该系统的工作原理是通过NUCLEO-WBA55CG开发板的PA6(A1)端口输出PWM信号,通过微信小程序蓝牙连接开发板,调节小程序上的滑块改变PWM占空比,进而调节MOS驱动板的输出电流,实现对灯带亮度的精确控制,从而达到用户期望的照明效果。
依据数据手册所载信息(参见上图),PA6与CN3的第30脚实现连接,第16脚提供3V3电压,上述两脚均与MOS驱动板的控制引脚相连。
开发环境搭建
STM32CubeMX
我们需要使用STM32CubeMX进行开发板的相关功能配置,下载地址:https://www.st.com.cn/zh/development-tools/stm32cubemx.html
STM32CubeWBA
官方示例代码,下载地址:https://www.st.com.cn/zh/embedded-software/stm32cubewba.html
https://www.st.com.cn/content/ccc/resource/technical/software/firmware/group2/41/ec/7d/37/46/36/4c/b2/stm32cubewba-v1-5-0/files/stm32cubewba-v1-5-0.zip/jcr:content/translations/en.stm32cubewba-v1-5-0.zip
或者在git客户端或者Powershell中使用以下命令拉取
gh repo clone STMicroelectronics/STM32CubeWBA
好吧,不单独下载也可以通过STM32CubeMX中进行下载!
我们需要用到的例程:STM32Cube_FW_WBA_V1.4.0\Projects\NUCLEO-WBA55CG\Applications\BLE下的BLE_p2pServer
使用STM32CubeMX打开工程
接下来就可以使用STM32CubeMX的图形化界面进行端口配置。
STM32CubeIDE
https://www.st.com.cn/zh/development-tools/stm32-ides.html
官网下载软件,着实有点费劲!
第一次用的时候得选一个地方来保存工作文件,你可以改位置或者就用默认的。
庐山真面目。
英文看着不带劲,来跟着汉化一下吧。
https://download.eclipse.org/technology/babel/update-site/R0.17.1/2019-12/
经过漫长的等待,终于可以选取简体中文了!
一路Next
必须同意,否则你懂的!
速度快不快,得看网络状况。
如果网速真的很差劲,那就直接下载安装包,然后尝试在本地安装吧。
选取从https://download.eclipse.org/technology/babel/update-site/R0.17.1/2019-12/下载的压缩包。
安装完成后重启即可看到汉化界面,不过只是部分汉化,凑合着看吧。
Keil uVision5
Keil是一款常用的MCU开发IDE工具,相比大家应该都安装了吧,再次就不在赘述。与STM32CubeIDE二选一安装即可!
项目生成
存在诸多问题,索性从头开始!
Example Selector 中搜索 BLE_p2pServer
示例项目创建完毕会自动打开
时钟频率默认为16MHz,最高可以设置为100MHz,我们保持默认即可。
PWM配置,选择TIM2, Channel4通道选择PWM Generation CH4,对应端口为PA6
根据默认的时钟频率16MHz,进行如上配置
配置完毕之后即可进行代码生成,根据自己的喜好二选一即可。
在Project Manager中进行Toolchain/IDE的选择,具体而言,若选择MDK-ARM,则将生成相应的Keil工程;若选择STM32CubeIDE,则将生成对应的STM32CubeIDE工程;对于其他选项,操作原理相同。
选择完毕点击GENERATE CODE开始生成对应的工程文件。
生成完毕,点击Open Project则会调用对应的IDE打开项目。
STM32CubeIDE项目
如果你之前没下载过STM32CubeWBA,在你生成代码的时候,系统会提醒你下载。记得确保你的网络能正常访问GitHub哦。
点击Open Project 就会调用STM32CubeIDE打开项目文件。
Keil uVision5项目
切换到MDK-ARM后重新生成代码。
同样点击Open Project 会自动调用Keil打开项目。
项目编译STM32CubeIDE编译代码
17:17:51 Build Finished. 0 errors, 0 warnings. (took 25s.27ms)
STM32CubeIDE代码编译通过!
Keil uVision5编译代码
哎呀,又出问题了!
编译报错
根据项目生成步骤,重新生成文件,再次折腾!
不出意外,又报错了!
Common各子目录下文件重复?遗失?唯独RFContrel下缺失文件
手动移除所有带有黄色感叹号的.c .s文件后,重新编译,通过日志文件可以看出编译成功了!
顺利生成.hex固件
再次尝试STM32CubeIDE编译,结果也失败了
于是......
重新生成项目后编译又成功了!
但是,Keil项目又遇到麻烦了,也许/大概/只能生成一种IDE项目!
事实告诉我们,挑一个IDE就够了,别乱搞了!
代码修改
Keil uVision5项目
mian.c 中改动地方如下:
开启PWM:
/* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); /* USER CODE END 2 */
p2p_server_app.c 中改动地方如下:
/* USER CODE BEGIN Includes */ #include "app_bsp.h" extern TIM_HandleTypeDef htim2; /* USER CODE END Includes */
/* USER CODE BEGIN PV */ uint16_t pwmValue; /* USER CODE END PV */
设置占空比:
P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */ } if(p_Notification->DataTransfered.p_Payload[0] == 0x03) { pwmValue = p_Notification->DataTransfered.p_Payload[1] * 20; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,pwmValue); } /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */ break;
群友指导代码修改:
开启PWM
/* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); /* USER CODE END 2 */
设置占空比
/* USER CODE BEGIN PFP */ int dt=0; /* USER CODE END PFP */
/* USER CODE BEGIN 3 */ for(dt=1;dt < 499; dt++) { __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt); HAL_Delay(10); } for(dt=499;dt > 0; dt--) { __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, dt); HAL_Delay(10); } } /* USER CODE END 3 */ }
ST BLE TOOL
这个APP上的开关控制着开发板上的LED灯,可以用来打开或者关闭LED灯。这表示代码已经成功烧录,开发板工作正常。
微信小程序
小程序控制代码我们直接使用老师修改过的示例代码,或者基于微信官方模板进行修改。
小程序创建
首先安装好微信开发者工具
双击.wxss文件调用微信开发者工具打开
点击信任并运行后会自动进行编译
点击预览,会生成预览二维码,使用微信扫码即可进行体验。
当然也可以先打开微信开发者工具,导入小程序代码
权限问题
可能遇到的问题是:运行权限问题,可以点击测试号申请测试小程序
https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html
扫描申请即可
可以通过以上入口修改AppID
修改AppID后正式上传
好几年前搞得小程序,今天可算派上用场了!
使用演示
开关可以点亮或者熄灭开发板上的LED1,调整滑块即可调节灯带亮度,滑动至最左侧则熄灭灯带。
学习感受
跟着老师的视频一步步来设置,但到了PWM那块,视频突然跳到小程序的讲解去了。而且之前代码编译的时候就出错了,所以我直接用了官方的示例代码来创建,结果没留意到代码里改了些什么。再加上视频有点模糊,新手看起来真的挺头疼的!不过多亏了群里的朋友热心帮忙,还有老师的耐心指导,我总算把问题解决了,灯带也亮起来了!真心感谢大家!