|
基于STM32F4系列單片機(jī)的超聲波測(cè)距歷程,利用串口顯示距離(默認(rèn)115200波特率)
單片機(jī)源程序如下:
- #include "stm32f4xx.h"
- #include "Systick.h"
- #include "sys.h"
- #include "usart.h"
- #include "hc_sr04.h"
- //LED
- //宏替換PFout(9)成LED0
- #define LED0 PFout(9)
- #define LED1 PFout(10)
- #define LED2 PEout(13)
- #define LED3 PEout(14)
- //BEEP蜂鳴器
- #define BEEP PFout(8)
- //按鍵
- #define KEY0 PAin(0)
- #define KEY1 PEin(2)
- #define KEY2 PEin(3)
- #define KEY3 PEin(4)
- void delay_s() //簡(jiǎn)單的延時(shí)函數(shù)
- {
- volatile int i = 0x0FE5178;
- while(i--);
- }
- //初始化LED端口,
- void LED_Config(void)
- {
- //定義一個(gè)LED的GPIO信息結(jié)構(gòu)體
- GPIO_InitTypeDef GPIO_InitStructure;
- //1.使能(打開(kāi))RCC時(shí)鐘(失能,關(guān)閉)
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOE,GPIOF時(shí)鐘
- //2.設(shè)置GPIO的信息結(jié)構(gòu)體
- //GPIOF9,F10初始化設(shè)置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //LED0和LED1對(duì)應(yīng)IO口
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通輸出模式,
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽輸出,驅(qū)動(dòng)LED需要電流驅(qū)動(dòng)
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
-
- //3.初始化GPIO信息結(jié)構(gòu)體
- GPIO_Init(GPIOF, &GPIO_InitStructure);
-
- //如果不同組,需要另外設(shè)置和初始化
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //LED0和LED1對(duì)應(yīng)IO口
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- //給LED一個(gè)初始化狀態(tài),高電平,全滅
- // GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
- // GPIO_SetBits(GPIOE,GPIO_Pin_13 | GPIO_Pin_14);
- LED0 = 1;
- LED1 = 1;
- LED2 = 1;
- LED3 = 1;
- }
- //蜂鳴器的初始化
- void BEEP_Config(void)
- {
- //定義一個(gè)蜂鳴器的GPIO信息結(jié)構(gòu)體
- GPIO_InitTypeDef GPIO_BEEP_InitStructure;
- //1.使能(打開(kāi))RCC時(shí)鐘(失能,關(guān)閉)
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOF時(shí)鐘
- //2.設(shè)置GPIO的信息結(jié)構(gòu)體
- //GPIOF8初始化設(shè)置
- GPIO_BEEP_InitStructure.GPIO_Pin = GPIO_Pin_8; //蜂鳴器PF8對(duì)應(yīng)IO口
- GPIO_BEEP_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通輸出模式,
- GPIO_BEEP_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽輸出,驅(qū)動(dòng)BEEP需要電流驅(qū)動(dòng)
- GPIO_BEEP_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
- GPIO_BEEP_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
-
- //3.初始化GPIO信息結(jié)構(gòu)體
- GPIO_Init(GPIOF, &GPIO_BEEP_InitStructure);
-
- //給蜂鳴器BEEP一個(gè)初始化狀態(tài),
- //GPIO_SetBits(GPIOF,GPIO_Pin_8); //高電平
- //GPIO_ResetBits(GPIOF,GPIO_Pin_8); //低電平
- BEEP = 0;
- }
- //按鍵的初始化函數(shù)
- void KEY_Config(void)
- {
- //定義一個(gè)按鍵的GPIO信息結(jié)構(gòu)體
- GPIO_InitTypeDef GPIO_KEY_InitStructure;
- //1.使能(打開(kāi))RCC時(shí)鐘(失能,關(guān)閉)
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE); //使能GPIOA時(shí)鐘
- //2.設(shè)置GPIO的信息結(jié)構(gòu)體
- //GPIOA0初始化設(shè)置
- GPIO_KEY_InitStructure.GPIO_Pin = GPIO_Pin_0; //按鍵KEY0對(duì)應(yīng)IO口
- GPIO_KEY_InitStructure.GPIO_Mode = GPIO_Mode_IN; //普通輸入模式
- GPIO_KEY_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽輸出,需要電流驅(qū)動(dòng)
- GPIO_KEY_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
- GPIO_KEY_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
-
- //3.初始化GPIO信息結(jié)構(gòu)體
- GPIO_Init(GPIOA, &GPIO_KEY_InitStructure);
- //如果不同組,需要另外設(shè)置和初始化
- GPIO_KEY_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; //按鍵KEY1,2,3對(duì)應(yīng)IO口
- GPIO_Init(GPIOE, &GPIO_KEY_InitStructure);
- }
- //檢測(cè)按下哪一個(gè)按鍵
- int Key_Scan(void)
- {
- int key_num = -1;
-
- //if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) //按下KEY0
- if(KEY0 == 0) //按下KEY0
- {
- key_num = 0;
- }
- else if(KEY1 == 0) //按下KEY1
- {
- key_num = 1;
- }
- else if(KEY2 == 0) //按下KEY2
- {
- key_num = 2;
- }
- else if(KEY3 == 0) //按下KEY3
- {
- key_num = 3;
- }
-
- return key_num;
- }
- //main函數(shù),程序的入口,從這里開(kāi)始運(yùn)行
- int main(void)
- {
- /***************變量的定義***************/
- //int i;
- u16 distance = 0;
-
- /***************外設(shè)函數(shù)初始化***************/
- //函數(shù)的調(diào)用,LED初始化函數(shù),PF9,PF10..PE13,PE14
- LED_Config();
-
- //蜂鳴器的GPIO初始化,P8
- BEEP_Config();
-
- //系統(tǒng)時(shí)鐘初始化,168MHz的芯片主頻
- Systick_init(168);
-
- //按鍵的GPIO初始化,PA0,PE2.3.4
- KEY_Config();
-
- //串口的初始化
- uart_init(9600);
-
- //超聲波模塊HC_SR04初始化,TRIG:PE6,ECHO:PB6
- HC_SR04_Config();
-
- /***************程序循環(huán)執(zhí)行語(yǔ)句***************/
-
- //程序所有外設(shè)都已經(jīng)初始化完畢
- LED0=0;
- LED1=0;
- LED2=0;
- LED3=0;
- delay_ms(500);
- LED0=1;
- LED1=1;
- LED2=1;
- LED3=1;
-
- /**下面是通過(guò)直接操作庫(kù)函數(shù)的方式實(shí)現(xiàn)IO控制**/
- //死循環(huán),程序會(huì)一直循環(huán)執(zhí)行里面的語(yǔ)句
- while(1)
- {
- distance = Get_Distance(); //讀取超聲波模塊檢測(cè)到的距離,單位為毫米mm
- printf("distance = %d\r\n",distance); //串口顯示
- delay_ms(500);
- LED0=!LED0;
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
實(shí)驗(yàn)1_超聲波測(cè)距模塊.rar
(456.77 KB, 下載次數(shù): 154)
2018-11-16 16:59 上傳
點(diǎn)擊文件名下載附件
超聲波
|
|