STM32
直播中

史娟

7年用户 144经验值
私信 关注
[问答]

使用库函数出现错误

我想用tiM3的输入捕获来解码红外,需要使用到库函数TIM_GetITStatus,TIM_ClearITPendingBit和TIM_GetCapture3,我在开头添加了#include "STM32f10x_tim.h"
可是编译的时候一直说T“EST.axf: Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from timer.o).”
是不是需要把库函数的那个stm32f10x_tim.c文件添加进工程,那个文件在哪里可以找到?还是有其他办法。
#include
#include "stm32f10x_tim.h"
#include "timer.h"
#include "led.h"
//Mini STM32开发板
//通用定时器 驱动代码   
//发烧友@ALIENTEK
//2010/6/1
vu8 irtime,irCode;            //红外用全局变量
vu8 irpro_ok,irok;           //完成标志位
vu8 IRcord[4],irdata[33];
vu8 beginIRrcv=0;//开始接收到遥控的标志
vu8 irNum;
vu8 startflag;
/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
//void SysTick_Handler(void)
//{
//  TimingDelay_Decrement();
//}
//定时器3中断服务程序
//
void TIM3_IRQHandler(void)
{                  
//if(TIM3->SR&0X0001)//溢出中断
//{
// LED1=!LED1;                             
//}      
//TIM3->SR&=~(1<<0);//清除中断标志位
    extern vu8 startflag;
extern vu16 ccd [80] ;
static int id = 0 ;

static vu16  cur = 0 ;
static vu16  last  = 0 ;

u16 step ;
int   fh;

if(TIM_GetITStatus( TIM3,  TIM_IT_CC3 ))
{
TIM_ClearITPendingBit(TIM3,  TIM_IT_CC3);

//ccd[id ++ ] = TIM_GetCapture2(TIM3) ;
           
cur = TIM_GetCapture3(TIM3) ;

#if 1
if(cur > last )
{
     step = cur - last ;
}
else
{
     step = 65535 - last + cur ;
}
//step 为两次捕获的计数值的差,为了避免浮点数运算,此处,把浮点数放大十倍,转换成整数计算。
fh = step *10 / (2400) ;

   
         
if( (fh > 130) && (fh <140) )    //同步开始头,13.5ms
{
     id = 0 ;
}
   
    else if( (fh > 9 ) && (fh <13 ))  // 1.125ms
    {
        ccd[id ++ ] = 0 ;
    }
  
    else if( (fh > 20 ) && (fh <24 ))   // 2.245ms
    {
        ccd[id ++ ] = 1 ;
    }
    else if( (fh > 40 ) && (fh <60 ))   // 5ms,后置单脉冲
    {
         id = 0 ;
      startflag=1;;
    }
   
    #endif
         
}

last = cur ;
}
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能   
  TIM3->ARR=arr;  //设定计数器自动重装值//刚好1ms   
TIM3->SC=psc;  //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM3->DIER|=1<<0;   //允许更新中断   
TIM3->DIER|=1<<6;   //允许触发中断
               
TIM3->CR1|=0x01;    //使能定时器3
TIM3->EGR|=0X08;
TIM3->SR|=0X0808;
TIM3->CCMR2|=0X0001;   //TI3输入,每个边沿采样
TIM3->CCER|=0X0300;  //下降沿捕获,捕获使能
   MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2         
}

回帖(3)

杨军

2019-4-18 09:31:30
试试增加 STM32F10xR.LIB试试.
举报

王海燕

2019-4-18 09:37:29
是直接#include “STM32F10xR.LIB”?我试了,还是不行“..HARDWARETIMERtimer.c(3): error:  #5: cannot open source input file "STM32F10xR.LIB": No such file or directory”
举报

丁峙昌

2019-4-18 09:45:56
回复【3楼】carrie_sky:
-------------------------------
不能这样吧.
你必须找到这个文件,然后把它当成.c文件一样,加到你的工程.另外名字我好像弄错了,不过R.LIB是没错的,你搜索下看看.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分