你这个问题本质上是 “链接器找不到 huart2 这个符号的定义” ,而不是“没把文件放进路径”。 STM32CubeIDE 里,外设句柄(UART_HandleTypeDef huart2)是由 CubeMX 自动生成 的,只要你在 .ioc 里勾选了 USART2 ,代码就会生成在 usart.c 里,并声明在 usart.h 中。 编译器报错“no source file for huart2() at 0x20000108”通常并不是真的缺源文件,而是 链接器发现 huart2 这个符号根本不存在 ,于是把它当成一个“外部符号”去找,结果找不到,就给出一条让人误解的提示。 一、先快速自检(30 秒搞定) 双击 .ioc → Pinout & Configuration → Connectivity → 确认 USART2 的 Mode 不是 Disable 。 右侧 “Project Manager” → Code Generator → 勾选 “Generate peripheral initialization as a pair of .c/.h files” 。 保存 .ioc,点 “Generate Code” 。 重新编译(Project → Build All)。 如果错误消失,问题就解决了;如果还在,继续往下看。 二、如果 USART2 已勾选仍然报错 99 % 的情况是你 手动改动了代码 ,把 CubeMX 生成的定义删掉了,或者条件编译被关掉了。 打开 usart.c(CubeMX 生成,路径在 Core/Src/usart.c),搜索 c复制 UART_HandleTypeDef huart2; 如果搜不到,说明定义确实被弄丢了。 打开 usart.h,确认有 c复制 extern UART_HandleTypeDef huart2; 确认没有任何 c复制 #ifdef USE_USART2 之类的宏把定义包起来,而你的工程里又没开这个宏。 三、最干净的恢复办法 如果文件被改得乱七八糟,直接让 CubeMX 重新生成最省心: 在 Project Explorer 里把 Core/Src/usart.c 和 Core/Inc/usart.h 删除(或者重命名备份)。 回到 .ioc,随便改一个参数(比如 USART2 的波特率改 115400 → 115200),保存,重新 Generate Code。 CubeMX 会重新创建 usart.c/h,里面一定带 huart2。 重新编译,0 Error。 四、总结一句话 “huart2 找不到” 不是路径问题,而是 huart2 这个全局变量根本没被定义。 让 CubeMX 重新生成 usart.c/h 是最快、最不容易出错的做法。
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16



