打印
[其他ST产品]

求教#include "stm32f10x_iwdg.h"

[复制链接]
566|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
独立看门狗实验中在《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 (1.05 KB )

5700067d683f2e1dae.png

4534467d683f39eaec.png (1.05 KB )

4534467d683f39eaec.png

使用特权

评论回复
5
江河千里| | 2025-3-17 04:23 | 只看该作者
你可以用cubemx来搞,就可以不用加你说的这个了

使用特权

评论回复
6
淡漠安然| | 2025-3-17 05:44 | 只看该作者
其实加上是对的,因为这个是库函数的外设文件,得用

使用特权

评论回复
7
夜阑风雨| | 2025-3-17 06:48 | 只看该作者
我理解这种东西不用多顾虑,就正常加上就行

使用特权

评论回复
8
冰春彩落下| | 2025-3-17 07:26 | 只看该作者
其实就跟固件库有关系,调用到了就需要加

使用特权

评论回复
9
一秒落纱| | 2025-3-17 08:47 | 只看该作者
这个肯定是用到这个头文件的定义了呗

使用特权

评论回复
10
暖了夏天蓝了海| | 2025-3-17 09:39 | 只看该作者
你可以把这个头文件放到.h文件里,就像你说的,别的文件没加编译也能过了

使用特权

评论回复
11
别乱了阵脚| | 2025-3-17 10:56 | 只看该作者
这个一定要用,因为你用的是库函数而且还是iwdg外设

使用特权

评论回复
12
classroom| | 2025-3-20 13:36 | 只看该作者
当你省略了 #include "stm32f10x_iwdg.h" 这行代码时,编译器在编译 iwdg.c 文件时无法找到这些函数和宏的定义。因此,编译器会报告错误和警告,指出这些函数和宏未被定义或声明。

使用特权

评论回复
13
Wordsworth| | 2025-3-22 07:45 | 只看该作者
检查 stm32f10x_conf.h,有些库是通过 stm32f10x_conf.h 统一管理外设头文件的,看看它里面 #define 了哪些模块。

使用特权

评论回复
14
Bblythe| | 2025-3-22 07:47 | 只看该作者
可能某些 c 文件里定义了 USE_FULL_ASSERT 或 USE_STDPERIPH_DRIVER,导致编译时自动包含了一些头文件。

使用特权

评论回复
15
Pulitzer| | 2025-3-22 07:48 | 只看该作者
如果是 Keil,看看工程管理器里是否已经包含了 stm32f10x_iwdg.c,如果库文件已经被工程管理器引用了,那它的头文件可能会被间接包含。

使用特权

评论回复
16
Uriah| | 2025-3-22 07:49 | 只看该作者
试试 #pragma message 或 #error 来调试,在 iwdg.h 里 #ifdef 检查 stm32f10x_iwdg.h 是否已经被包含,确认是否真的缺失。

使用特权

评论回复
17
Clyde011| | 2025-3-22 07:50 | 只看该作者
建议养成显式包含头文件的习惯,即使某些情况下不加也能编译通过,最好还是手动 #include "stm32f10x_iwdg.h",避免不同项目环境下的问题。

使用特权

评论回复
18
公羊子丹| | 2025-3-22 07:51 | 只看该作者
少了 #include "stm32f10x_iwdg.h" 就编译报错,说明 IWDG_WriteAccessCmd 这些函数的声明都在这个头文件里,少了它编译器找不到定义。

使用特权

评论回复
19
周半梅| | 2025-3-22 07:52 | 只看该作者
其他程序可能已经包含了 stm32f10x_iwdg.h,比如 stm32f10x.h 或某个 main.h 里间接包含了它,所以不需要显式添加。

使用特权

评论回复
20
童雨竹| | 2025-3-22 07:53 | 只看该作者
检查 iwdg.h 里有没有包含 stm32f10x_iwdg.h,如果 iwdg.h 里已经 #include 了,那 iwdg.c 里确实可以省略。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

163

主题

966

帖子

0

粉丝