OpenEdv-开源电子网

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

输入捕获极性函数参数问题

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-6-11
在线时间
7 小时
发表于 2019-6-11 20:24:46 | 显示全部楼层 |阅读模式
1金钱
void TIM5_IRQHandler(void)
{
  if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{   
  if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
   
  {     
   if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
     TIM5CH1_CAPTURE_VAL=0XFFFF;
    }else TIM5CH1_CAPTURE_STA++;
   }  
  }
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
  {
   if(TIM5CH1_CAPTURE_STA&0X40)  //捕获到一个下降沿   
   {      
    TIM5CH1_CAPTURE_STA|=0X80;  //标记成功捕获到一次上升沿
    TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
       TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
   }else          //还未开始,第一次捕获上升沿
   {
    TIM5CH1_CAPTURE_STA=0;   //清空
    TIM5CH1_CAPTURE_VAL=0;
     TIM_SetCounter(TIM5,0);
    TIM5CH1_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
       TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);  //CC1P=1 设置为下降沿捕获
   }      
  }                     
  }

    TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位

}




/**
  * @brief  Configures the TIMx channel 1 polarity.
  * @param  TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
  * @param  TIM_OCPolarity: specifies the OC1 Polarity
  *   This parameter can be one of the following values:
  *     @arg TIM_OCPolarity_High: Output Compare active high
  *     @arg TIM_OCPolarity_Low: Output Compare active low

  * @retval None
  */
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
{
  uint16_t tmpccer = 0;
  /* Check the parameters */
  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
  assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
  tmpccer = TIMx->CCER;
  /* Set or Reset the CC1P Bit */
  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P);
  tmpccer |= TIM_OCPolarity;
  /* Write to TIMx CCER register */
  TIMx->CCER = tmpccer;
}




/** @defgroup TIM_Output_Compare_Polarity
  * @{
  */
#define TIM_OCPolarity_High                ((uint16_t)0x0000)
#define TIM_OCPolarity_Low                 ((uint16_t)0x0002)

#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \
                                      ((POLARITY) == TIM_OCPolarity_Low))


在里面输入捕获通道 1 的极性设置的时候,有效性校验不就应当是TIM_OCPolarity_High  和TIM_OCPolarity_Low 吗?为什么函数里面的参数是TIM_ICPolarity_RisingTIM_ICPolarity_Falling???

最佳答案

查看完整内容[请看2#楼]

一个是IC,一个是OC,别乱套。 OC是输出PWM。 IC是输入捕获。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-11 20:24:47 | 显示全部楼层
一个是IC,一个是OC,别乱套。 OC是输出PWM。 IC是输入捕获。
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-6-11
在线时间
7 小时
 楼主| 发表于 2019-6-12 08:24:35 | 显示全部楼层
正点原子 发表于 2019-6-11 20:24
一个是IC,一个是OC,别乱套。 OC是输出PWM。 IC是输入捕获。

是不是在TIMx_CCER寄存器里面,当CC1通道配置为输出的时候是OC,当配置为输入的时候是IC?当时只是通过库函数里面对参数的有效性校验的时候里面只有OC参数没有IC参数,是不是那一块参数没有写全?
file:///C:/Users/Administrator/Desktop/1560299052(1).jpg
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 06:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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