求教#include "stm32f10x_iwdg.h"
独立看门狗实验中在《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(); 可能是因为你的其他函数有包含,所以你之前没看到吧
我觉得这个加上是正常的,你说别的程序不需要加的话,估计是因为不用看门狗吧
你这个加这个头文件是因为这个是库函数啊
你可以用cubemx来搞,就可以不用加你说的这个了
其实加上是对的,因为这个是库函数的外设文件,得用
我理解这种东西不用多顾虑,就正常加上就行
其实就跟固件库有关系,调用到了就需要加
这个肯定是用到这个头文件的定义了呗
你可以把这个头文件放到.h文件里,就像你说的,别的文件没加编译也能过了
这个一定要用,因为你用的是库函数而且还是iwdg外设
当你省略了 #include "stm32f10x_iwdg.h" 这行代码时,编译器在编译 iwdg.c 文件时无法找到这些函数和宏的定义。因此,编译器会报告错误和警告,指出这些函数和宏未被定义或声明。 检查 stm32f10x_conf.h,有些库是通过 stm32f10x_conf.h 统一管理外设头文件的,看看它里面 #define 了哪些模块。 可能某些 c 文件里定义了 USE_FULL_ASSERT 或 USE_STDPERIPH_DRIVER,导致编译时自动包含了一些头文件。 如果是 Keil,看看工程管理器里是否已经包含了 stm32f10x_iwdg.c,如果库文件已经被工程管理器引用了,那它的头文件可能会被间接包含。 试试 #pragma message 或 #error 来调试,在 iwdg.h 里 #ifdef 检查 stm32f10x_iwdg.h 是否已经被包含,确认是否真的缺失。 建议养成显式包含头文件的习惯,即使某些情况下不加也能编译通过,最好还是手动 #include "stm32f10x_iwdg.h",避免不同项目环境下的问题。 少了 #include "stm32f10x_iwdg.h" 就编译报错,说明 IWDG_WriteAccessCmd 这些函数的声明都在这个头文件里,少了它编译器找不到定义。 其他程序可能已经包含了 stm32f10x_iwdg.h,比如 stm32f10x.h 或某个 main.h 里间接包含了它,所以不需要显式添加。 检查 iwdg.h 里有没有包含 stm32f10x_iwdg.h,如果 iwdg.h 里已经 #include 了,那 iwdg.c 里确实可以省略。
页:
[1]
2