OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16831|回复: 3

使用库函数的问题

[复制链接]

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2011-4-13
在线时间
0 小时
发表于 2011-4-27 16:06:55 | 显示全部楼层 |阅读模式

我想用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 <stm32f10x_lib.h>
#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         
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-4-27 16:33:15 | 显示全部楼层
试试增加 STM32F10xR.LIB试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2011-4-13
在线时间
0 小时
 楼主| 发表于 2011-4-27 17:54:23 | 显示全部楼层
是直接#include “STM32F10xR.LIB”?我试了,还是不行“..\HARDWARE\TIMER\timer.c(3): error:  #5: cannot open source input file "STM32F10xR.LIB": No such file or directory”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-4-27 18:00:37 | 显示全部楼层
回复【3楼】carrie_sky:
-------------------------------
不能这样吧.
你必须找到这个文件,然后把它当成.c文件一样,加到你的工程.另外名字我好像弄错了,不过R.LIB是没错的,你搜索下看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表