stm32wb55 基于rtt的ble sample制作过程

准备活动

硬件

  • stm32wb55 nucleo开发板
  • stm32wb55 dangle

软件

  • rtthread stm32wb55 bsp
  • st官方 stm32wb固件包

开发环境

  • keil MDK
  • vscode
  • rtthread env

概述

本文的目的是将ST官方的STM32WB55 固件包里的BLE sample移植到RT-Thread,最终变为rtt生态的一个软件包,让更多开发者都可以直接做基于rtt开箱即用。

移植前准备

生成基于rtt的stm32wb55的最小工程

首先需要clone rtthread的stm32wb55的bsp,然后创建基本的工程,这一步很简单,从官方github仓库clone最新的代码,然后定位到stm32wb55的bsp,使用env scons --dist生成wb55最小工程。如下所示:


xph@XPHPC D:\GitHub\rt-thread\bsp\stm32\stm32wb55-st-nucleo
> scons --dist
scons: Reading SConscript files ...
make distribution....
=> stm32wb55-st-nucleo
=> start dist handle
=> copy stm32 bsp library
=> copy bsp drivers
=> components
=> include
=> libcpu
=> src
=> tools
update mdk5 project
update iar project
done!

然后用keil打开,编译烧录到nucleo开发板中验证。当开发板LED1蓝灯开始闪烁,同时串口有打印信息输出,则表示基于rtthread的最小工程生成成功。

 \ | /
- RT -     Thread Operating System/ | \     4.0.3 build Jan  7 20212006 - 2020 Copyright by rt-thread team
msh >

st官方固件包删除不相关代码

我们从最基础的beacon工程开始移植,删除其他不必要的工程文件和文件夹,方便代码分析工具分析和定位。如果工程文件夹太多,诸如vscode source insight这类代码工具就很难做到精确跳转。
如下图所示,我只保留基于keil mdk的beacon工程,其他的不相干的工程全部删除。

检查的方法也很简单,在固件包中搜索一下main.c函数,看一下有没有多余的就行了。
然后打开这个beacon工程,编译一下,没有错误,没有警告,那么准备工作就做好了。

移植

我的移植思路是,将ST官方的sample当作rtt中的一个线程,这样子即不影响其他线程的使用移植起来也比较方便。

工程创建

  1. 创建ibeacon线程
static int ibeacon_thread_init(void)
{rt_thread_t ibeacon_thread;ibeacon_thread = rt_thread_create("ibeacon",ibeacon_thread_entry,RT_NULL,1024,2,10);if (ibeacon_thread != RT_NULL){rt_thread_startup(ibeacon_thread);}return RT_EOK;
}INIT_APP_EXPORT(ibeacon_thread_init);
  1. 将st官方sample中的main函数移植过来,放在ibeacon线程的入口函数中
static void ibeacon_thread_entry(void *parameter)
{LOG_D("ibeacon thread entry...");/*** The OPTVERR flag is wrongly set at power on* It shall be cleared before using any HAL_FLASH_xxx() api*/__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);HAL_Init();Reset_Device();Init_Exti();MX_GPIO_Init();MX_RTC_Init();/* Init code for STM32_WPAN */APPE_Init();while (1){UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);rt_thread_mdelay(10);}
}
  1. 将STM32_WPAN中间件整体复制过来,然后根据st的sample工程将BLE相关文件都加进去

  2. 编译,根据编译错误将缺失的文件加入到工程中去,直到编译完成

关于文件的分组

  1. STM32_WPAN这个文件夹里面存放的是ST关于无线协议的中间件,包括BLE、thread、zigbee等等,所以移植的时候直接整体搬过去就好了,至于里面的东西可以暂不做考虑。
  2. STM32WB特有的低功耗管理组件和列表单独做通用分组

  1. 其他需要用到的文件统一放到ibeacon分组中

移植注意事项

以上工作全部完成后,编译运行后程序运行正常,但是通过nrf connect是无法扫描到beacon的,对比分析后发现两部分地方需要修改。

中断处理函数需要移植

之前的固有印象是STM32的HAL库中断处理函数全都是虚函数方式然后通过注册回调函数来最终执行用户自己的中断服务函数。这也是忽略该步骤的重要原因之一,因为之前的STD或者寄存器版本没有写中断服务函数是会编译报错的。

将以下三个中断服务函数放在ibeacon线程.c文件中。

/*** ! RTC timeserver处理中断服务函数
*/
void RTC_WKUP_IRQHandler(void)
{HW_TS_RTC_Wakeup_Handler();
}/*** ! IPCC 通讯收发中断处理函数
*/
void IPCC_C1_TX_IRQHandler(void)
{HW_IPCC_Tx_Handler();return;
}void IPCC_C1_RX_IRQHandler(void)
{HW_IPCC_Rx_Handler();return;
}

这三个中断服务函数主要是用来处理CPU1和CPU2之间的通讯的,这部分内容后面再介绍。

link文件需要更改

STM32WB是一颗双核MCU,他们共享了部分flash和RAM,所以不能像传统的单核M4内核那样定义link文件,需要将部分flash和RAM资源留出来给协处理器使用。具体的更改直接参考ST的sample工程中的link文件。

经过以上两步的修改,编译烧录后就可以正常使用了。

备注

名词解释

  • ACI: Application command interface 应用层命令接口
  • CLI: Command line interface 命令行接口

stm32wb55 基于rtt的ble sample制作过程相关推荐

  1. 基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)

    基于STM32F103C8T6的循迹避障小车完整制作过程 本文适合小白观看 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程中也参考了很多大神分享的资料,学到 ...

  2. 开源ESP32彩屏WIFI/BLE智能万用表制作过程:1.外壳与屏幕选型

    开源ESP32彩屏WIFI/BLE智能万用表制作过程:1.外壳与屏幕选型 一.前言 二.为什么制作万用表 三.选择外壳 四.选择屏幕 一.前言 小伙伴们大家好,去年7月份开始全职创业已经过去一整年了, ...

  3. stm32 基于TouchGFX显示视频动画的详细制作过程和讲解

    stm32 使用TouchGFX显示太空人动画详细制作过程 文章目录 1.素材处理 2.Touchgfx移植 3.使用控件animated image 4.仿真和烧录看效果 5.增加启动和暂停控制 1 ...

  4. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施...

    基于能力的计算机应用基础课程过程化考核标准构建与实施 <计算机应用基础>是高职院校中一门实用性和操作性很强的公共基础课,在提高学生的计算机应用能力和信息素养上发挥着重要作用,为专业课的学习 ...

  5. 通过WiFi控制智能小车机器人制作过程详解

    之前发的作品都是基于蓝牙控制的智能小车机器人,由于蓝牙的传输范围比较小,所以控制距离的局限性比较大,并且通过蓝牙传输视频会明显出现卡屏的现象. 而通过WiFi方式控制智能小车机器人能达到100米左右的 ...

  6. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施.doc...

    基于能力的计算机应用基础课程过程化考核标准构建与实施 基于能力的计算机应用基础课程过程化考核标准构建与实施 <计算机应用基础>是高职院校中一门实用性和操作性很强的公共基础课,在提高学生的计 ...

  7. TTS数据制作过程分享

    TTS数据制作过程分享 本文来自:数据堂AI开放实验室 概述: TTS(Text To Speech)又称语音合成,是一种将文本转化成相应语音的技术.TTS技术从诞生到现在已经有200多年的历史.在1 ...

  8. Unite 2018|基于照片建模的游戏制作流程

    Unity之前发布了了全新的实时渲染作品<死者之书>的预告片,Unity引擎的画面表现又一次提升到全新的高度.这个Demo的场景包含大量的树木.植被.岩石等素材,非常接近真实照片的感觉.在 ...

  9. 营销型网站的概念及设计制作过程中的注意事项

    营销型网站的提出: 1. 企业网站在国内发展从技术角度经历了两大发展阶段,第一阶段是以静态HTML为代表的企业网站建设,这个阶段ASP技术尚未发展到全面普及应用的程度,更多的企业网站建设在满足企业信息 ...

最新文章

  1. DB2命令行查看执行计划
  2. [蓝桥杯2019初赛]质数-质数筛or 水题
  3. python识别简单训练模型_使用已经得到的keras模型识别自己手写的数字方式
  4. IO之 Properties类加载文件
  5. curaengine linux编译,CuraEngine开源程序解读
  6. JSP的9个内置对象-session
  7. Memcache 客户端
  8. 如何让putty像secureCRT一样支持多标签 - 趁我还年轻 - 博客频道 - CSDN.NET - Opera
  9. (附源码)计算机毕业设计ssm公立医院绩效考核系统
  10. 计算机运行黑屏显示器正常,电脑主机运行正常显示器黑屏怎么办
  11. 最新IP数据库 全球IP数据库 IP城市数据库 2019年6月版
  12. 【CSP201609-3】炉石传说【模拟】
  13. 【无标题】基于javaweb、java的管理系统毕设计与实现怎样选题思路分享
  14. js获取上一个页面url
  15. 电脑计算机软件硬盘不足,电脑提示磁盘空间不足怎么办
  16. Excel用函数把时间戳格式和日期格式相互转换
  17. 电脑连上了WIFI但打不开网页
  18. 嵌入式数据库-SQLite的基本使用
  19. PS2018学习笔记(19-24节)
  20. 有高血压的少碰这五种毒!它们的伤害悄无声息~

热门文章

  1. 基于Spring boot框架开发的电商网站系统
  2. 自律是最大程度的自由
  3. 淘宝SEO定义、优化淘宝SEO的技巧,优化店铺,流量、排名不是问题
  4. 计算机网络中删除自己的共享,如何删除我的电脑中共享文档
  5. 优秀的管理者都需要做好这四点
  6. JS 位数不够自动左补0
  7. 记一次攻防演练之vcenter后渗透利用
  8. 《精彩网址大全——工商经济科学教育卷》前言
  9. 求两数的最大公约数算法
  10. 3 、OpenCvSharp 图片转视频