初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2020-10-2
- 在线时间
- 20 小时
|
求一份阿波罗stm32f429的超声波测距的程序,用输入捕获(同时借鉴了网上的方法)搞了几天了都搞不出来 ,希望有大佬解惑
超声波.c程序
#include "UltrasonicWave.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
//描述 :超声波模块的初始化
void trig_init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM5_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE(); //使能GPIOH时钟
GPIO_Initure.Pin=GPIO_PIN_7; //PH7 echo
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP ; //
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
}
void trig(void)
{
trig_pin=1;
delay_ms(20);
trig_pin=0;
}
超声波.h的
#ifndef __UltrasonicWave_H
#define __UltrasonicWave_H
#define trig_pin PAout(0) // Trig
void trig_init(void);//初始化
void trig(void);
#endif
主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "UltrasonicWave.h"
extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
extern u32 TIM5CH1_CAPTURE_VAL; //输入捕获值
int main(void)
{
long long length=0;
long long temp=0;
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//中断优先级分组2
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
TIM5_CH1_Cap_Init(0XFFFFFFFF,90-1); //以1MHZ的频率计数
trig_init();
while(1)
{
trig();
if(TIM5CH1_CAPTURE_STA&0X80) //成功捕获到了一次高电平
{
temp=TIM5CH1_CAPTURE_STA&0X40;
temp*=0XFFFFFFFF; //溢出时间总和
temp+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间
length=temp/340/2;
printf("HIGH:%lld cm\r\n",length);//打印总的高点平时间
delay_ms(300);
TIM5CH1_CAPTURE_STA=0; //开启下一次捕获
}
}
}
timer.c的程序是原子哥的程序,只是去掉了TIM3的部分
|
|