標題:
STM32+HC-SR04源程序
[打印本頁]
作者:
卓zz
時間:
2019-7-27 01:08
標題:
STM32+HC-SR04源程序
利用定時器3產(chǎn)生pwm波,使能超聲波模塊。利用定時器4計時,計算出時間。
單片機源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "oled.h"
#include "SR04.h"
#include "usart.h"
/************************************************
時間:2019.7.25
作者:菜雞
利用定時器TIM3的PWM輸出得到觸發(fā)信號
TIM4用于計算回響電平輸出時間
************************************************/
void Count(void);
uint32_t Distance;
uint16_t Time;
uint8_t ShowData[5]={0,0,0,0,0};
int main(void)
{
delay_init(); //延時函數(shù)初始化
LED_Init(); //LED端口初始化
OLED_Init(); //初始化OLED
Uitr_GPIO_Config();
OLED_ShowString(0,0,"now:",24);
OLED_ShowString(50,0,"unknow",24);
OLED_ShowString(0,24,"distance:",16);
OLED_ShowString(53,40,"mm",24);
OLED_Refresh_Gram(); //更新顯示到OLED
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
TIM3_PWM_Init(999,7199); //不分頻。PWM頻率=72000000/900=80Khz
TIM4_Config();
while(1)
{
TIM_SetCompare2(TIM3,1);
while(ECHO_IN != 1);
TIM_Cmd(TIM4,ENABLE); //計數(shù)器開始計數(shù)
while(ECHO_IN == 1);
TIM_Cmd(TIM4,DISABLE); //計數(shù)器停止計數(shù)
Count();
}
}
void Count(void)
{
Time = TIM4->CNT; //讀計數(shù)器值
TIM4->CNT = 0; //清除計數(shù)器
if(Time>23530) //判斷是否在4M范圍,超出顯示ERRO
{
OLED_ShowString(50,0,"failed",24);
OLED_Refresh_Gram(); //更新顯示到OLED
}
else
{
Distance = (uint32_t)(Time*340/2/1000) ; //計算出來的是MM
ShowData[0] = (Distance%10000/1000)+'0';
ShowData[1] = (Distance%1000/100)+'0';
ShowData[2] = (Distance%100/10)+'0';
ShowData[3] = (Distance%10/1)+'0';
OLED_ShowString(50,0,"normal",24);
OLED_ShowString(0,40,ShowData,24);
OLED_Refresh_Gram(); //更新顯示到OLED
}
}
復制代碼
所有資料51hei提供下載:
HC-SR04超聲波測距.7z
(197.2 KB, 下載次數(shù): 60)
2019-7-27 03:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1