1. 环境搭建与工程模板
任务目标
在STM32CubeIDE中创建一个空工程,集成TFLite Micro静态库,编译一个调用TensorFlow Lite for Microcontrollers运行时版本号接口的最小示例,并烧录至开发板通过串口打印验证环境可用。
环境依赖
- STM32CubeIDE 1.13+(含GCC arm-none-eabi工具链)
- STM32F407G-DISC1开发板(板载ST-Link/V2)
- TFLite Micro源码(v2.14.0,从GitHub克隆)
- STM32CubeF4固件包(通过CubeIDE的Embedded Software Packages管理器安装)
工程配置步骤
- 新建STM32CubeIDE工程,选择MCU为STM32F407VGT6,初始化时钟为168MHz主频。
- 在CubeMX配置USART2(PA2/PA3)为异步模式,波特率115200,8N1。
- 将TFLite Micro源码中的
tensorflow目录复制到工程根目录下。 - 在工程属性 → C/C++ Build → Settings → Tool Settings → MCU GCC Compiler → Include paths中添加:
${workspace_loc:/${ProjName}/tensorflow} - 在MCU GCC Linker → Libraries中添加:
tensorflow-microlib(若需自行编译静态库,见下文说明)。
关键完整代码
以下代码为main.c中用户代码区的完整实现(替换自动生成的/* USER CODE BEGIN 0 */至/* USER CODE END 4 */之间的内容):
/* USER CODE BEGIN 0 */
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
#include "tensorflow/lite/version.h"
#include <stdio.h>
#include <string.h>
static void USART2_Print(const char* str) {
HAL_UART_Transmit(&huart2, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
}
static char print_buf[64];
int tflite_env_check_main(void) {
// 获取TFLite Micro运行时版本字符串
const char* version = TFLITE_VERSION_STRING; // 来自 version.h
// 构造输出信息
snprintf(print_buf, sizeof(print_buf), "TFLite Micro Version: %s\r\n", version);
USART2_Print(print_buf);
// 验证MicroInterpreter基本类型可用(编译期验证)
tflite::MicroInterpreter* interpreter = nullptr;
USART2_Print("MicroInterpreter type OK\r\n");
(void)interpreter;
// 验证MicroMutableOpResolver可用
tflite::MicroMutableOpResolver<10> resolver;
USART2_Print("MicroMutableOpResolver type OK\r\n");
USART2_Print("Env check PASSED\r\n");
return 0;
}
/* USER CODE END 0 */
/* USER CODE BEGIN 4 */
/* 在main()的while(1)之前调用一次 */
/* USER CODE END 4 */
在main()函数的/* USER CODE BEGIN 2 */区域添加调用:
/* USER CODE BEGIN 2 */
tflite_env_check_main();
/* USER CODE END 2 */
编译与烧录
- 若尚未编译TFLite Micro静态库,需先进入源码目录执行:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=stm32f4 OPTIMIZED_KERNEL_DIR=cmsis_nn,生成libtensorflow-microlib.a后手动添加到工程链接器库路径。 - 点击锤子图标编译工程,确认无错误。
- 使用ST-Link调试器烧录程序(CubeIDE默认F11启动调试即自动烧录)。
验证方法与通过条件
- 打开串口助手(如PuTTY或CubeIDE内置终端),连接USART2对应USB转串口(PA2/PA3需外接USB-TTL模块),波特率115200。
- 复位开发板,观察串口输出。预期输出(与代码逻辑严格一致):
TFLite Micro Version: 2.14.0
MicroInterpreter type OK
MicroMutableOpResolver type OK
Env check PASSED
若看到上述四行输出,说明TFLite Micro库已正确链接、头文件路径配置无误、运行时版本接口可调用,部署环境验证通过。
常见问题
- 编译报找不到头文件:检查Include paths是否指向
tensorflow根目录(而非tensorflow/lite)。 - 链接错误undefined reference:确认静态库路径已添加,且库文件名与添加的
-l参数匹配(去掉lib前缀和.a后缀)。 - 串口无输出:检查USART2引脚是否复用为AF7,以及USB-TTL模块的TX/RX是否与PA2/PA3交叉连接。