我不知道是不是程序写错了。
发回来的输出,在7cm以内是都能正确识别的,然后当障碍物超过7cm后,就一直显示7cm了,不知道为什么,求助啊。
程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
//ALIENTEK 探索者STM32F407开发板 实验10
//输入捕获实验
//技术支持:
www.openedv.com
//广州市星翼电子科技有限公司
extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态
extern u32 TIM5CH1_CAPTURE_VAL; //输入捕获值
int main(void)
{
long long temp=0;
u8 dis;
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
delay_init(168); //延时初始化
uart_init(84,115200); //初始化串口波特率为115200
//TIM14_PWM_Init(1000-1,168-1); //1Mhz的计数频率,1Khz的PWM.
TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1);//以1Mhz的频率计数
RCC->AHB1ENR|=1<<5; //使能PORTF时钟
GPIO_Set(GPIOF,PIN6,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//复用功能,下拉输出
while(1)
{
//LED0_PWM_VAL=0;
//delay_ms(10);
//LED0_PWM_VAL=40;
//delay_ms(1);
//LED0_PWM_VAL=0;
PFout(6)=0;
delay_ms(20);
PFout(6)=1;
delay_us(10);
PFout(6)=0;
while(!(TIM5CH1_CAPTURE_STA&0X80)); //等到捕获一次高电平
//if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
//{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=0XFFFFFFFF; //溢出时间总和
temp+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间
printf("HIGH:%lld us
",temp); //打印总的高点平时间
dis=temp*340*100/2000000; //cm
printf("DIS:%d cm
",dis);
TIM5CH1_CAPTURE_STA=0; //开启下一次捕获
delay_ms(189);
//}
}
}
一周热门 更多>