基于MSP432P410R的HC-SR04超声波程序

发布者:SparklingBeauty最新更新时间:2022-07-25 来源: csdn关键字:HC-SR04 手机看文章 扫描二维码
随时随地手机看文章

代码

//HCSR04.h配置

 

#ifndef _HCSR04_H

#define _HCSR04_H

 

#include  "main.h" 

 

void HCSR04Init(void);

float Distance(void);

 

 

#endif

//HCSR04.c配置

 

#include "HCSR04.h"

 

#include "main.h"

 

 

 

const Timer_A_UpModeConfig upConfig =

{

        TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source

        TIMER_A_CLOCKSOURCE_DIVIDER_3,          // SMCLK/1 = 3MHz

        50000,                           // 5000 tick period

        TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt

        TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE,    // Enable CCR0 interrupt

        TIMER_A_DO_CLEAR                        // Clear value

};

 

void HCSR04Init(void)

{

 

    MAP_GPIO_setAsOutputPin(GPIO_PORT_P9, GPIO_PIN2);//tring

MAP_GPIO_setAsInputPin(GPIO_PORT_P5, GPIO_PIN3); 

    MAP_GPIO_setAsInputPinWithPullDownResistor(GPIO_PORT_P5, GPIO_PIN3);

    

MAP_GPIO_disableInterrupt(GPIO_PORT_P9, GPIO_PIN2);

    MAP_GPIO_disableInterrupt(GPIO_PORT_P5, GPIO_PIN3);

 

    MAP_Timer_A_configureUpMode(TIMER_A2_BASE, &upConfig);

 

    MAP_Interrupt_enableSleepOnIsrExit();

    MAP_Interrupt_enableInterrupt(INT_TA1_0);

    MAP_Timer_A_startCounter(TIMER_A2_BASE, TIMER_A_UP_MODE);

    

    MAP_Interrupt_enableMaster();  

 

}

void TA1_0_IRQHandler(void)

{

 

    MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_0);

// Timer_A_getCounterValue(uint32_t timer);

}

 

float Distance(void)

{

int count=0,i=0,sum=0;

float distance=0;

while(i!=5)

{

GPIO_setOutputLowOnPin(GPIO_PORT_P9, GPIO_PIN2);//上拉

GPIO_setOutputHighOnPin(GPIO_PORT_P9, GPIO_PIN2);//上拉

delay_us(10);

GPIO_setOutputLowOnPin(GPIO_PORT_P9, GPIO_PIN2);//上拉

        TIMER_A_CMSIS(TIMER_A2_BASE)->R = 0;

while(GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN3) == 0); //

MAP_Interrupt_enableInterrupt(INT_TA1_0);

while(GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN3) == 1);  //

        MAP_Interrupt_disableInterrupt(INT_TA1_0);

count=TIMER_A_CMSIS(TIMER_A2_BASE)->R;

//v = 340m/s = 34000cm/s = 34000cm/10^6us = 0.034cm/us

//s = vt/2 = t*0.034/2 = t*0.017 ?t/58

distance=((float)count / 58);

i++;

sum=sum+distance;

}

return sum/5;

}


//main.c配置

 

#include  "main.h"

#include "HCSR04.h"

#include  "string.h"

#include "stdio.h"

/*  全局变量申明区  */

// u8  a=0;

// u16 len ;

/* 函数调用申明区 */

 

 

int main(void)

    int Distance1;

    WDT_A_holdTimer();

    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);//led灯

    SystemClockInit(HFXT);//系统时钟初始化(系统主时钟)

    SystemClockInit(DCO);//系统时钟初始化(子系统时钟)

Usart1tInit(); //串口1 初始化

HCSR04Init();

    LedInit();

    while(1)

    {

        Distance1= Distance();

        GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN1);

        printf("Distance = %dmmrn",Distance1);    

        delay_ms(50);

    }

 

}


总结

HC-SR04超声波的配置程序还是很简单的,但是相比STM32,MSP432使用HC-SR04测量出来的距离超过20CM之后就不准确了,原因暂时未知,可能是定时器频率的问题,还有待研究。

关键字:HC-SR04 引用地址:基于MSP432P410R的HC-SR04超声波程序

上一篇:基于MSP432P401R的OLED I2C程序
下一篇:MSP432P401R时钟系统

推荐阅读最新更新时间:2024-11-17 05:46

stm32与HC-SR04超声波传感器测距
首先,先来看一下这个模块的基本功能和原理。 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。 注意是5v输入,但是我用stm32 的3.3v输入也是没有问题的。 二.工作原理 1.给超声波模块接入电源和地。 2.给脉冲触发引脚(trig)输入一个长为20us的高电平方波 3.输入方波后,模块会自动发射8个40KHz的声波,与此同时回波引脚(echo)端的电平会由0变为1;(此时应该启动
[单片机]
超声波PIC单片机C程序
单片机源程序如下: //////////////////////////////////////////////////////////////////////////////// // // PIC16F877 + HC-SR04 + LCD03 example // Written October 2008 , using HITECH PIC16 compiler // // Note - assumes a 20MHz crystal, which is 5MHz timer clock // A 1:4 prescaler is used to give a 1.25MHz t
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved