关于TIM2CH1_CAPTURE_STA 它的设定

2019-07-21 04:14发布

  file:///C:UsersThinkpadAppDataRoamingTencentUsers1048921094TIMWinTempRichOleP~G6R9ZR]OSC4@_4NAB77JU.pngTIM2_IRQHandler 是 TIM2 的中断服务函数,该函数用到了两个全局变量,用于辅助实现高电平捕获。其中 TIM2CH1_CAPTURE_STA,是用来记录捕获状态,该变量类似我们在 usart.c
里面自行定义的 USART_RX_STA 寄存器(其实就是个变量,只是我们把它当成一个寄存器那样
来使用)。


是否我可以理解为我可以自己设定,比如0-4是溢出次数,然后5-6是捕获高电平 7是捕获完成

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
椰子皮djc
2019-07-21 13:44
15353920254 发表于 2018-8-23 13:08
输入捕获的TIM2CH1_CAPTURE_STA变量完全可以自己设定
但是我觉得原子的程序设置的很好用啊,0-5溢出次数, ...

if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESET) //发生捕获事件
        {
                if((TIM5CH1_CAPTURE_STA&0X20)&&(!(TIM5CH1_CAPTURE_STA&0X40))) //已经捕获到上升沿
                {
                        TIM5CH1_CAPTURE_STA|=0X40; //标记成功捕获一次下降沿
                        TIM5CH1_CAPTURE_VAL1=TIM_GetCapture4(TIM5)+(TIM5CH1_CAPTURE_STA&0X1f)*65536; //获得TIM5捕获通道一的捕获值(对应高电平时间)
                        TIM_SetCounter(TIM5,0);  //清零计数器
                        TIM_OC4PolarityConfig(TIM5,TIM_ICPolarity_Rising); //设置为上升沿捕获
                        TIM5CH1_CAPTURE_STA&=0Xe0;  //溢出次数清零
                }
                else if((TIM5CH1_CAPTURE_STA&0X20)==0)  //未捕获到上升沿
                {
                        TIM5CH1_CAPTURE_STA=0;    //清零标志位及溢出次数
                        TIM5CH1_CAPTURE_VAL1=0;   //清零高电平计数
                        TIM5CH1_CAPTURE_VAL2=0;          //清零低电平计数               
                        TIM_SetCounter(TIM5,0);   //清零TIM5计数寄存器                       
                        TIM5CH1_CAPTURE_STA|=0X20; //置标志位
                        TIM_OC4PolarityConfig(TIM5,TIM_ICPolarity_Falling); //设置为下降沿捕获
                }
                else if((TIM5CH1_CAPTURE_STA&0X40)&&(!(TIM5CH1_CAPTURE_STA&0X80))) //已经捕获到下降沿
                {
                        TIM5CH1_CAPTURE_VAL2=TIM_GetCapture4(TIM5)+(TIM5CH1_CAPTURE_STA&0X1f)*65536;//低电平计数(对应低电平时间)
                        TIM5CH1_CAPTURE_STA|=0X80;  //置标志位
                }                       
        }
看这个它设置的,然后想求周期 不然总觉的他不够用,想听听大佬对这段代码的理解

一周热门 更多>