你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
Legend-奇君

Legend-奇君

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
1 回答

在STM32CUBEIDE中配置完以后直接编译出现《没有 “huart2() at 0x20000108” 对应的源文件》

STM32CubeIDE
fafa1 fafa1 回答时间: 半小时前

你这个问题本质上是 “链接器找不到 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 是最快、最不容易出错的做法。

赞0
Legend-奇君 Legend-奇君


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16