SMARTWATCH 学习手册有 C 基础 · 嵌入式从零开始
支线二 / CH582M 开发与蓝牙桥接 / 00

从 STM32 到 CH582M:哪些知识可以继续用

手表需要一颗能与手机无线通信的芯片。本项目把采集、界面和推理交给 STM32U575,把低功耗蓝牙与串口桥接交给 CH582M。先认清这两颗芯片怎样配合,再打开新的开发环境。

主线串口、中断、无线通信与应用协议;事件处理篇会说明与 FreeRTOS 的区别。

1 · 两颗芯片,各自运行一个程序

手机不会直接访问 STM32 的某个串口引脚。手机与 CH582M 通过低功耗蓝牙连接,CH582M 再通过板上的串口与 STM32 交换字节。STM32 不必为每个业务功能处理无线收发;CH582M 也不需要计算血氧或绘制界面。两边的程序分别编译、分别下载。

图中的相邻设备双向通信;箭头仅用于展示阅读顺序。
图中的相邻设备双向通信;箭头仅用于展示阅读顺序。 · 教学示意

2 · C 语言相同,处理器能执行的指令不同

两边都能用 C 写循环、函数、数组和指针。编译器把这些语句翻译成处理器可以执行的机器指令:项目的 STM32U575 使用 Arm Cortex-M33,CH582M 使用 RISC-V。编译给前者的固件文件不能直接下载到后者运行。换芯片首先要换匹配的编译目标、启动文件和链接脚本。

学习这条支线无需先写汇编。知道“同一段 C 可以重新编译,已经生成的机器码不能直接搬过去”,就能理解为什么工程和下载工具也要检查。

3 · 外设原理可以复用,函数名字需要重新找

已经理解的事情STM32 工程里CH582M 工程里
设置引脚模式GPIO 初始化结构与 HAL 接口GPIOA_ModeCfg 等厂商接口
配置串口UART 句柄、初始化与收发接口UART1_DefInit、UART1_BaudRateCfg
处理串口中断NVIC 与 HAL 中断处理PFIC 与 UART1_IRQHandler
提供外设实现Drivers 中的 HAL 源码StdPeriphDriver 中的驱动源码

这里比较的是本项目两套工程,并非所有 STM32 都必须用 HAL、所有 WCH 芯片都只用这些函数。引脚复用、电平、波特率和中断依旧要与实际接线一致。

4 · SDK 是什么,为什么还有一个 HAL 目录

SDK 是 Software Development Kit,即软件开发工具包。厂商把驱动、头文件、协议库、启动代码和例程整理在一起,减少从零编写的工作。本仓库已经带入 CH582M 工程所需的一组文件。

CH 工程里的 HAL 目录负责它自己的板级和蓝牙配套初始化。相同的目录名不意味着接口与 STM32 HAL 相同。判断一个函数怎么使用,先看当前工程的声明和实现,不把另一颗芯片的调用格式套过来。

5 · 从已有知识开始读目录

Main.c 是入口;peripheral.c 组织串口、连接和发送;ble_uart_service.c 定义手机能访问的蓝牙接口。后面按这个顺序展开。

动手观察

在两套工程分别找到 main。写出哪一边接传感器、哪一边提供蓝牙服务,以及它们之间实际使用哪一个串口。此时不用修改固件。

资料与代码