完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用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个回答
|
|
试试增加 STM32F10xR.LIB试试.
|
|
|
|
是直接#include “STM32F10xR.LIB”?我试了,还是不行“..HARDWARETIMERtimer.c(3): error: #5: cannot open source input file "STM32F10xR.LIB": No such file or directory”
|
|
|
|
回复【3楼】carrie_sky:
------------------------------- 不能这样吧. 你必须找到这个文件,然后把它当成.c文件一样,加到你的工程.另外名字我好像弄错了,不过R.LIB是没错的,你搜索下看看. |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 08:06 , Processed in 0.636051 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号