基于MSP432P410R的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 SourceTIMER_A_CLOCKSOURCE_DIVIDER_3, // SMCLK/1 = 3MHz50000, // 5000 tick periodTIMER_A_TAIE_INTERRUPT_DISABLE, // Disable Timer interruptTIMER_A_CCIE_CCR0_INTERRUPT_ENABLE, // Enable CCR0 interruptTIMER_A_DO_CLEAR // Clear value
};void HCSR04Init(void)
{MAP_GPIO_setAsOutputPin(GPIO_PORT_P9, GPIO_PIN2);//tringMAP_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 = %dmm\r\n",Distance1); delay_ms(50);}}
总结
HC-SR04超声波的配置程序还是很简单的,但是相比STM32,MSP432使用HC-SR04测量出来的距离超过20CM之后就不准确了,原因暂时未知,可能是定时器频率的问题,还有待研究。
工程链接:基于MSP432P410R的HC-SR04超声波程序.zip
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
