標題:
STM32超聲波測距程序,用1602顯示出來,稍作改動可做小車避障、報警,親測可用
[打印本頁]
作者:
溫水煮青蛙
時間:
2019-12-20 20:23
標題:
STM32超聲波測距程序,用1602顯示出來,稍作改動可做小車避障、報警,親測可用
基于STM32的超聲波測距,用1602顯示出來,稍作改動可做小車避障、報警,親測可用,需要的親可以拿去
單片機源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
/**********************************************
* 文件名 : main.c
* 描述 :超聲波測距模塊,UltrasonicWave_Configuration()函數(shù)
初始化超聲模塊,UltrasonicWave_StartMeasure()函數(shù)
啟動測距,并將測得的數(shù)據(jù)通過串口1打印出來
* 實驗平臺:戰(zhàn)艦 STM32開發(fā)板 STM32F103ZET6
* 硬件連接:------------------
* | PC1 - TRIG |
* | PA0 - ECHO |
* ------------------
*
* 作者 :MasterMiao
*********************************************************************************/
#define Trig PCout(1) //PC1 TRIG
//函數(shù)聲明
void UltrasonicWave_Configuration(void);
void UltrasonicWave_StartMeasure(void);
extern u8 TIM5CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
extern u16 TIM5CH1_CAPTURE_VAL; //輸入捕獲值
int main(void)
{
u32 temp=0;
short UltrasonicWave_Distance=0; //計算出的距離
delay_init(); //延時函數(shù)初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
uart_init(115200); //串口初始化為115200
LED_Init(); //LED端口初始化
LCD_Init(); //初始化LCD
//POINT_COLOR=RED; //設置字體為紅色
LCD_ShowString(30,50,200,16,16,"ELITE STM32");
LCD_ShowString(30,70,200,16,16,"CHAOSHENGBO TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
UltrasonicWave_Configuration();
TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的頻率計數(shù)
while(1)
{
UltrasonicWave_StartMeasure();//開始測距
if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536;//溢出時間總和
temp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時間
UltrasonicWave_Distance=(float)temp*170/10000;//距離計算公式:距離=高電平持續(xù)時間*聲速/2
//即 距離= 高電平持續(xù)時間*340*100/(2*1000 000) = 高電平持續(xù)時間*170/10000
if(UltrasonicWave_Distance<=10){GPIO_ResetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOB,GPIO_Pin_8);}
else {GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_ResetBits(GPIOB,GPIO_Pin_8);}
LCD_ShowString(30,150,200,16,16,"juli: . cm");
LCD_ShowNum(30+40+8,150,UltrasonicWave_Distance,3,16); //顯示正數(shù)部分
LCD_ShowNum(30+40+8,150,UltrasonicWave_Distance%10,7,16); //顯示小
// printf("Distance:%f cm\r\n",UltrasonicWave_Distance);//打印總的高點平時間
// LCD_ShowNum(30+40+32,150,UltrasonicWave_Distance/10,2,16); //顯示小數(shù)部分
TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲
}
}
}
/*
* 函數(shù)名:UltrasonicWave_Configuration
* 描述 :超聲波模塊的初始化
* 輸入 :無
* 輸出 :無
*/
void UltrasonicWave_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PC8接TRIG
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設為推挽輸出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化外設GPIO
}
/*
* 函數(shù)名:UltrasonicWave_StartMeasure
* 描述 :開始測距,發(fā)送一個>10us的脈沖,然后測量返回的高電平時間
* 輸入 :無
* 輸出 :無
*/
void UltrasonicWave_StartMeasure(void)
{
Trig = 1;
delay_us(20); //延時20US
Trig = 0;
}
復制代碼
所有資料51hei提供下載:
stm32超聲波.7z
(772.61 KB, 下載次數(shù): 110)
2019-12-21 01:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1