输入捕获模块的使用–超声波测距

输入捕获模块的使用–超声波测距

@(MSP432P401R)

输入捕获的配置

在这里插入图片描述

基本默认即可


输入捕获的API的使用

参数

在这里插入图片描述

  1. Capture_Mode即捕获模式,经实际测试,MSP432P401R只能使用前三种模式
    在这里插入图片描述

  2. Capture_CallBackFxn即回调函数

  3. Capture_PeriodUnits即捕获周期单位
    在这里插入图片描述

函数表

在这里插入图片描述

全局配置,在ti_drivers_config.c文件中生成

在这里插入图片描述

功能函数

在这里插入图片描述

文档链接:file:///D:/MSP%20SDK/simplelink_msp432p4_sdk_3_40_01_02/docs/tidrivers/doxygen/html/_capture_8h.html#a87e62f4b1cc1800afecf54b74fd58e63


具体代码说明

  1. 头文件
#include <stdint.h>
/* Driver Header files */
#include <ti/drivers/Capture.h>
#include<ti/drivers/GPIO.h>
#include <ti/drivers/apps/LED.h>
/* Driver Configuration */
#include "ti_drivers_config.h"
/**
  1. 主线程函数
void *mainThread(void *arg0)
{
    GPIO_init();
    Capture_init();
    Distance_Num=0;
    EDGE_NUM=0;
    Capture_Handle  handle;
    Capture_Params  params;
    Capture_Params_init(&params);
    params.mode  = Capture_ANY_EDGE;
    params.callbackFxn = User_CaptureCallbackFunction;
    params.periodUnit = Capture_PERIOD_US;
    handle = Capture_open(CONFIG_CAPTURE_0, &params);
    Capture_start(handle);
    while(1)
    {
        Send_Trig();
        ms_Delay(80);
    }
    return (NULL);
}
  1. 中断回调函数
void User_CaptureCallbackFunction(Capture_Handle handle, uint32_t interval)
{
    if(EDGE_NUM>=0xffffffff)
    {
        EDGE_NUM=1;
    }
    if(EDGE_NUM%2==1)
    {
        Distance_Value[Distance_Num]=interval*170/1000;
        Distance_Num++;
        if(Distance_Num>=100)
        {
            Distance_Num=0;
        }
    }
    EDGE_NUM++;
}
  1. 其他函数
void Send_Trig(void)
{
    GPIO_write(CONFIG_GPIO_0,1);
    ClockP_usleep(20);
    GPIO_write(CONFIG_GPIO_0,0);
}
void ms_Delay(uint16_t t_ms)
{
 uint32_t t=t_ms*4000;
 while(t--);
}
  1. 变量定义和函数声明
float Distance_Value[100];
uint16_t Distance_Num;
uint32_t EDGE_NUM;

void Send_Trig(void);
void User_CaptureCallbackFunction(Capture_Handle handle, uint32_t interval);
void ms_Delay(uint16_t t_ms);

原理说明

由于MSP432P401R只能检测上升沿下降沿上升沿与下降沿,以检测上升沿与下降沿为例
在这里插入图片描述

当开启捕获后,记录下第一个值,记为Value[0],之后捕获到上升沿,此时记录下第二个值**Value[1]并进入中断,参数 i n t e r v a l = V a l u e [ 1 ] − V a l u e [ 0 ] interval=Value[1]-Value[0] interval=Value[1]Value[0],此值为低电平持续时间,之后捕获到下降沿,此时记录下第三个值Value[2]**并进入中断,参数 i n t e r v a l = V a l u e [ 2 ] − V a l u e [ 1 ] interval=Value[2]-Value[1] interval=Value[2]Value[1],此值即为高电平持续时间,以此类推,当EDGE_NUM为0,2,4······时得低电平持续时间,为1,3,5······时得高电平持续时间,而我们需要的是高电平持续时间,故需要添加判断。不难推测当只检测上升沿或只检测下降沿时得到的是周期时间,经检验该推测正确。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值