4、STM32CubeMX项目创建:选择MCU型号与配置时钟外设
好,咱们进入实操环节。前面讲了那么多理论,现在终于要动手了。我个人习惯是,拿到一个新项目,第一件事就是打开STM32CubeMX,把芯片选好、时钟配好、外设搭起来。这一步要是马虎了,后面调试起来会非常痛苦。
说白了,STM32CubeMX就是个图形化的配置工具。你点点鼠标,它就能帮你生成初始化代码。省去了手动翻数据手册的麻烦。我刚开始用的时候也觉得不习惯,总觉得手动写代码更踏实。后来项目多了才发现,这工具真能帮你省下大量时间。
4.1 选择MCU型号
打开STM32CubeMX,你会看到两个入口:一个是“New Project”,另一个是“Load Project”。咱们选第一个。
进入MCU选择界面后,你会看到左侧有一大堆筛选条件。我一般这么操作:
- Series(系列):先选系列,比如STM32F4或STM32H7
- Lines(产品线):再选具体产品线,比如F405、H743
- Package(封装):根据你的板子选,LQFP100、LQFP144这些
举个例子,我最近在做的一个项目用的是STM32H743。为什么选它?因为需要跑AI模型,对算力有要求。H7系列主频能到480MHz,还有双精度浮点单元,跑神经网络推理会快很多。
选好型号后,点击“OK”按钮。这时候CubeMX会问你要不要初始化所有外设。我建议选“No”,咱们自己慢慢配,心里有数。
4.2 配置时钟树
时钟配置是重中之重。你想想看,CPU跑多快、外设能不能正常工作,全看时钟配得对不对。我在项目中遇到过好几次,板子焊好了,程序烧进去了,结果串口乱码。查了半天,原来是时钟配错了。
进入“Clock Configuration”选项卡,你会看到一个时钟树图。嗯,这里要注意,不同型号的时钟树长得不一样,但核心逻辑是相通的。
我一般按这个步骤来:
- 选择时钟源:HSE(外部高速晶振)还是HSI(内部RC振荡器)?我个人习惯用HSE,精度高。如果你板子上有8MHz晶振,就选HSE。
- 配置PLL:PLL就是锁相环,用来倍频的。比如HSE是8MHz,你想让CPU跑到400MHz,那就得配PLL。
- 设置系统时钟:把SYSCLK(系统时钟)选成PLL输出。
- 配置AHB、APB分频:外设总线不能跑太快,得适当分频。
举个例子,STM32H743的典型配置:
HSE = 8MHz
PLLM = 2, PLLN = 240, PLLP = 2, PLLQ = 4
SYSCLK = 480MHz
AHB = 240MHz
APB1 = 120MHz
APB2 = 120MHz
配完之后,你会看到时钟树上的数字都变成绿色了。如果变红,说明超频了。我曾经有一次把PLLN设成250,结果CubeMX直接报红。嗯,超频有风险,别乱来。
4.3 配置UART外设
UART(串口)是调试必备。你总得有个地方打印日志吧?我习惯在项目初期就把UART配好,这样后面调试AI模型时,能随时看输出。
进入“Pinout & Configuration”选项卡,在左侧找到“Connectivity” -> “USART”。选一个你需要的UART实例,比如USART1。
配置要点:
- Mode:选“Asynchronous”(异步模式)。这是最常用的。
- Baud Rate:波特率。我一般用115200,够快也够稳定。
- Word Length:8位数据位,默认就行。
- Parity:无校验。除非你通信环境特别恶劣,否则不用开。
- Stop Bits:1位停止位。
配完之后,你会看到芯片引脚图上,对应的TX和RX引脚变成了绿色。嗯,这说明引脚分配成功了。
4.4 配置USB外设
USB外设的配置稍微复杂一点。因为USB有主机模式、设备模式、OTG模式之分。咱们做AI模型调试,一般用USB设备模式,把STM32当做一个USB设备,跟电脑通信。
在左侧找到“Connectivity” -> “USB_OTG_FS”(或HS,看你芯片支持哪个)。
配置步骤:
- Mode:选“Device_Only”(仅设备模式)。
- VBUS Sensing:选“VBUS Sensing Disabled”。很多开发板没有VBUS检测引脚,关掉能省事。
- 时钟配置:USB需要48MHz的时钟。如果你配的时钟树里没有48MHz输出,CubeMX会提示你。它会自动帮你从PLL分出一路48MHz。
配完USB后,你还需要选一个USB类。比如你要做虚拟串口(CDC),就在“Middleware” -> “USB_DEVICE”里选“Communication Device Class (Virtual Port Com)”。这样电脑会把STM32识别成一个串口,用串口助手就能收发数据。
4.5 生成代码
配完所有东西后,点击右上角的“GENERATE CODE”按钮。CubeMX会问你项目名称、保存路径、IDE类型(MDK、IAR、STM32CubeIDE等)。选好之后,点“OK”,代码就生成了。
生成完成后,你会看到一个完整的工程。里面包含了时钟初始化、UART初始化、USB初始化等代码。你只需要在main函数里添加自己的业务逻辑就行。
嗯,到这里,项目创建这一步就算完成了。后面咱们就可以在这个基础上,加入AI模型推理的代码了。