[其他ST产品] 求教#include "stm32f10x_iwdg.h"

[复制链接]
 楼主| 内政奇才 发表于 2025-2-28 11:32 | 显示全部楼层 |阅读模式
独立看门狗实验中在《iwdg.c》文件中的代码如下:求教这段代码里为什么不能少#include "stm32f10x_iwdg.h"这句。少了这句就编译报错!加上就无错无警告。但是在别的程序中又不需要添加这是为什么呢?
#include "iwdg.h"
#include "led.h"
#include "stm32f10x_iwdg.h"
void IWDG_Init(u8 prer,u16 rlr)
{      
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
      
        IWDG_SetPrescaler(prer);
      
        IWDG_SetReload(rlr);
      
        IWDG_ReloadCounter();
      
        IWDG_Enable();  
}

void IWDG_Feed(void)
{   
        IWDG_ReloadCounter();                                                                                 
}




求教这段代码里为什么不能少#include "stm32f10x_iwdg.h"这句。少了这句就编译报错!但是在别的程序中又不需要添加这是为什么呢?

..\HARDWARE\IWDG\iwdg.c(17): warning:  #223-D: function "IWDG_WriteAccessCmd" declared implicitly
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作
..\HARDWARE\IWDG\iwdg.c(17): error:  #20: identifier "IWDG_WriteAccess_Enable" is undefined
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操作
..\HARDWARE\IWDG\iwdg.c(19): warning:  #223-D: function "IWDG_SetPrescaler" declared implicitly
        IWDG_SetPrescaler(prer);  //设置IWDG预分频值:设置IWDG预分频值为64
..\HARDWARE\IWDG\iwdg.c(21): warning:  #223-D: function "IWDG_SetReload" declared implicitly
        IWDG_SetReload(rlr);  //设置IWDG重装载值
..\HARDWARE\IWDG\iwdg.c(23): warning:  #223-D: function "IWDG_ReloadCounter" declared implicitly
        IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器
..\HARDWARE\IWDG\iwdg.c(25): warning:  #223-D: function "IWDG_Enable" declared implicitly
        IWDG_Enable();  //使能IWDG
..\HARDWARE\IWDG\iwdg.c(30): warning:  #223-D: function "IWDG_ReloadCounter" declared implicitly
        IWDG_ReloadCounter();                                         
远山寻你 发表于 2025-3-17 01:31 | 显示全部楼层
可能是因为你的其他函数有包含,所以你之前没看到吧

光辉梦境 发表于 2025-3-17 02:39 | 显示全部楼层
我觉得这个加上是正常的,你说别的程序不需要加的话,估计是因为不用看门狗吧

三生万物 发表于 2025-3-17 03:55 | 显示全部楼层
你这个加这个头文件是因为这个是库函数啊

5700067d683f2e1dae.png
4534467d683f39eaec.png
江河千里 发表于 2025-3-17 04:23 | 显示全部楼层
你可以用cubemx来搞,就可以不用加你说的这个了

淡漠安然 发表于 2025-3-17 05:44 | 显示全部楼层
其实加上是对的,因为这个是库函数的外设文件,得用

夜阑风雨 发表于 2025-3-17 06:48 | 显示全部楼层
我理解这种东西不用多顾虑,就正常加上就行

冰春彩落下 发表于 2025-3-17 07:26 | 显示全部楼层
其实就跟固件库有关系,调用到了就需要加

一秒落纱 发表于 2025-3-17 08:47 | 显示全部楼层
这个肯定是用到这个头文件的定义了呗

暖了夏天蓝了海 发表于 2025-3-17 09:39 | 显示全部楼层
你可以把这个头文件放到.h文件里,就像你说的,别的文件没加编译也能过了

别乱了阵脚 发表于 2025-3-17 10:56 | 显示全部楼层
这个一定要用,因为你用的是库函数而且还是iwdg外设

classroom 发表于 2025-3-20 13:36 | 显示全部楼层
当你省略了 #include "stm32f10x_iwdg.h" 这行代码时,编译器在编译 iwdg.c 文件时无法找到这些函数和宏的定义。因此,编译器会报告错误和警告,指出这些函数和宏未被定义或声明。
Wordsworth 发表于 2025-3-22 07:45 | 显示全部楼层
检查 stm32f10x_conf.h,有些库是通过 stm32f10x_conf.h 统一管理外设头文件的,看看它里面 #define 了哪些模块。
Bblythe 发表于 2025-3-22 07:47 | 显示全部楼层
可能某些 c 文件里定义了 USE_FULL_ASSERT 或 USE_STDPERIPH_DRIVER,导致编译时自动包含了一些头文件。
Pulitzer 发表于 2025-3-22 07:48 | 显示全部楼层
如果是 Keil,看看工程管理器里是否已经包含了 stm32f10x_iwdg.c,如果库文件已经被工程管理器引用了,那它的头文件可能会被间接包含。
Uriah 发表于 2025-3-22 07:49 | 显示全部楼层
试试 #pragma message 或 #error 来调试,在 iwdg.h 里 #ifdef 检查 stm32f10x_iwdg.h 是否已经被包含,确认是否真的缺失。
Clyde011 发表于 2025-3-22 07:50 | 显示全部楼层
建议养成显式包含头文件的习惯,即使某些情况下不加也能编译通过,最好还是手动 #include "stm32f10x_iwdg.h",避免不同项目环境下的问题。
公羊子丹 发表于 2025-3-22 07:51 | 显示全部楼层
少了 #include "stm32f10x_iwdg.h" 就编译报错,说明 IWDG_WriteAccessCmd 这些函数的声明都在这个头文件里,少了它编译器找不到定义。
周半梅 发表于 2025-3-22 07:52 | 显示全部楼层
其他程序可能已经包含了 stm32f10x_iwdg.h,比如 stm32f10x.h 或某个 main.h 里间接包含了它,所以不需要显式添加。
童雨竹 发表于 2025-3-22 07:53 | 显示全部楼层
检查 iwdg.h 里有没有包含 stm32f10x_iwdg.h,如果 iwdg.h 里已经 #include 了,那 iwdg.c 里确实可以省略。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

1119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部