从 STM32 到 CH582M:哪些知识可以继续用
手表需要一颗能与手机无线通信的芯片。本项目把采集、界面和推理交给 STM32U575,把低功耗蓝牙与串口桥接交给 CH582M。先认清这两颗芯片怎样配合,再打开新的开发环境。
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。写出哪一边接传感器、哪一边提供蓝牙服务,以及它们之间实际使用哪一个串口。此时不用修改固件。