輸入捕獲模塊的使用–超聲波測(cè)距
@(MSP432P401R)
輸入捕獲的配置
基本默認(rèn)即可
輸入捕獲的API的使用
參數(shù)
-
Capture_Mode即捕獲模式,經(jīng)實(shí)際測(cè)試,MSP432P401R只能使用前三種模式
-
Capture_CallBackFxn即回調(diào)函數(shù)
-
Capture_PeriodUnits即捕獲周期單位
函數(shù)表
全局配置,在ti_drivers_config.c文件中生成
功能函數(shù)
文檔鏈接:file:///D:/MSP%20SDK/simplelink_msp432p4_sdk_3_40_01_02/docs/tidrivers/doxygen/html/_capture_8h.html#a87e62f4b1cc1800afecf54b74fd58e63
具體代碼說(shuō)明
- 頭文件
#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"
/**
- 主線程函數(shù)
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);
}
- 中斷回調(diào)函數(shù)
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++;
}
- 其他函數(shù)
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--);
}
- 變量定義和函數(shù)聲明
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);
原理說(shuō)明
由于MSP432P401R只能檢測(cè)上升沿或下降沿或上升沿與下降沿,以檢測(cè)上升沿與下降沿為例文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-612353.html
當(dāng)開(kāi)啟捕獲后,記錄下第一個(gè)值,記為Value[0],之后捕獲到上升沿,此時(shí)記錄下第二個(gè)值**Value[1]并進(jìn)入中斷,參數(shù) 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],此值為低電平持續(xù)時(shí)間,之后捕獲到下降沿,此時(shí)記錄下第三個(gè)值Value[2]**并進(jìn)入中斷,參數(shù) 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],此值即為高電平持續(xù)時(shí)間,以此類(lèi)推,當(dāng)EDGE_NUM為0,2,4······時(shí)得低電平持續(xù)時(shí)間,為1,3,5······時(shí)得高電平持續(xù)時(shí)間,而我們需要的是高電平持續(xù)時(shí)間,故需要添加判斷。不難推測(cè)當(dāng)只檢測(cè)上升沿或只檢測(cè)下降沿時(shí)得到的是周期時(shí)間,經(jīng)檢驗(yàn)該推測(cè)正確。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-612353.html
到了這里,關(guān)于輸入捕獲模塊的使用–超聲波測(cè)距的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!