打印
[技术问答]

PWM输入捕获没有搞懂这句

[复制链接]
1389|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feiante|  楼主 | 2019-8-6 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 feiante 于 2019-8-6 14:51 编辑

在PWM输入捕获的官方例子中,有这样一句话:
/* Wait for Capture Falling Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);
/* Wait for Capture Rising Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);
为什么同样的语句,一个是等待下降沿中断标志,一个是等待上升沿中断标志?
PWM_GetCaptureIntFlag的返回值:0:无捕获中断,1:上升沿  2:下降沿  3:上升和下降沿。如何配合上面的<2 进行理解呢还有就是输入捕获中PWM_ConfigCaptureChannel(PWM1, 2, 69, 0); 其中69为Capture unit time,它是干什么用的?

使用特权

评论回复
沙发
ayb_ice| | 2019-8-7 09:05 | 只看该作者
这些东西要对应手册看,看这些参数写入到哪个寄存器去了

使用特权

评论回复
板凳
21mengnan| | 2019-8-7 23:49 | 只看该作者
这两句是连着的吗,难道前面么有设置语句?

使用特权

评论回复
地板
21mengnan| | 2019-8-7 23:51 | 只看该作者
  /* Clear Capture Falling Indicator (Time B)*/
    PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH);

    u32i = 0;

    while(u32i < 4)
    {
        /* Wait for Capture Falling Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);

        /* Clear Capture Falling and Rising Indicator */
        PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH | PWM_CAPTURE_INT_RISING_LATCH);

        /* Get Capture Falling Latch Counter Data */
        u32Count[u32i++] = PWM_GET_CAPTURE_FALLING_DATA(PWM, u32Ch);

        /* Wait for Capture Rising Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);

使用特权

评论回复
5
21mengnan| | 2019-8-7 23:52 | 只看该作者
是上面这段代码吧,你看循环前面,是先清除下降沿指示,然后等下降沿信号,进入已经下降完成了,那么接着肯定要上升沿了,下降到0,不可能再下降,再生就是上升信号。

使用特权

评论回复
6
21mengnan| | 2019-8-7 23:53 | 只看该作者
另外在上升沿前面进行了配置。在循环前面有个等待下降信号的死循环,你注意到没。

使用特权

评论回复
7
21mengnan| | 2019-8-7 23:54 | 只看该作者
   /* Wait for Capture Falling Indicator  */
    while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);

    /* Clear Capture Falling Indicator (Time B)*/
    PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH);

    u32i = 0;

    while(u32i < 4)
    {
        /* Wait for Capture Falling Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);

        /* Clear Capture Falling and Rising Indicator */
        PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_FALLING_LATCH | PWM_CAPTURE_INT_RISING_LATCH);

        /* Get Capture Falling Latch Counter Data */
        u32Count[u32i++] = PWM_GET_CAPTURE_FALLING_DATA(PWM, u32Ch);

        /* Wait for Capture Rising Indicator */
        while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);

        /* Clear Capture Rising Indicator */
        PWM_ClearCaptureIntFlag(PWM, u32Ch, PWM_CAPTURE_INT_RISING_LATCH);

        /* Get Capture Rising Latch Counter Data */
        u32Count[u32i++] = PWM_GET_CAPTURE_RISING_DATA(PWM, u32Ch);
    }

使用特权

评论回复
8
21mengnan| | 2019-8-7 23:54 | 只看该作者
   /* Wait for Capture Falling Indicator  */
    while(PWM_GetCaptureIntFlag(PWM, u32Ch) < 2);
这个死循环,等待一个下降的信号

使用特权

评论回复
9
21mengnan| | 2019-8-7 23:55 | 只看该作者
后面下降后,肯定要是来上升信号的你可以画一下理解理解。

使用特权

评论回复
10
jiekou001| | 2019-8-8 22:56 | 只看该作者
楼上说的是,没什么问题。

使用特权

评论回复
11
jiekou001| | 2019-8-8 22:57 | 只看该作者
是楼主没搞清楚这个检测的过程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

511

帖子

1

粉丝