在编写stm32项目中报错:未定义的符号参数(从interrupt.o引用)。
原因是在interrupt.c中使用了结构体parameter
//interrupt.c
uint32_t ic_ccr = 0;
uint32_t freq = 0;
extern int8_t B1_count;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
ic_ccr = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);
__HAL_TIM_SetCounter(htim,0); //计时值清0
freq = (80000000/80)/ic_ccr;
parameter.freq = freq;
parameter.speed = (freq*2*3.14*parameter.R)/(100*parameter.K);
}
}
而该结构体我声明在了main.h文件中,变量初始化在main.c的main函数中
//main.h
struct parameters {
bool mode; //1为高频,0为低频
int8_t duty; //占空比
float speed; //实时速度
uint32_t freq; //频率
int8_t R;
int8_t K;
int8_t count ; //PWM输出模式切换次数
float MH; //高频下的最大速度
float ML; //高频下的最大速度
};
extern struct parameters parameter;
解决方案:将结构体变量的初始化写在main.c文件的main函数外部即可。