输入捕获模块的使用–超声波测距
@(MSP432P401R)
输入捕获的配置
基本默认即可
输入捕获的API的使用
参数
-
Capture_Mode即捕获模式,经实际测试,MSP432P401R只能使用前三种模式
-
Capture_CallBackFxn即回调函数
-
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
具体代码说明
- 头文件
#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"
/**
- 主线程函数
void *mainThread(void *arg0)
{
GPIO_init();
Capture_init();
Distance_Num=0;
EDGE_NUM=0;
Capture_Handle handle;
Capture_Params params;
Capture_Params_init(¶ms);
params.mode = Capture_ANY_EDGE;
params.callbackFxn = User_CaptureCallbackFunction;
params.periodUnit = Capture_PERIOD_US;
handle = Capture_open(CONFIG_CAPTURE_0, ¶ms);
Capture_start(handle);
while(1)
{
Send_Trig();
ms_Delay(80);
}
return (NULL);
}
- 中断回调函数
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++;
}
- 其他函数
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--);
}
- 变量定义和函数声明
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只能检测上升沿或下降沿或上升沿与下降沿,以检测上升沿与下降沿为例
文章来源:https://www.toymoban.com/news/detail-612353.html
当开启捕获后,记录下第一个值,记为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······时得高电平持续时间,而我们需要的是高电平持续时间,故需要添加判断。不难推测当只检测上升沿或只检测下降沿时得到的是周期时间,经检验该推测正确。文章来源地址https://www.toymoban.com/news/detail-612353.html
到了这里,关于输入捕获模块的使用–超声波测距的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!