久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5979|回復: 6
收起左側

基于STM32F4ZG的HC_SR04超聲波測距例程

[復制鏈接]
ID:427725 發表于 2018-11-16 14:54 | 顯示全部樓層 |閱讀模式
基于STM32F4系列單片機的超聲波測距歷程,利用串口顯示距離(默認115200波特率)

單片機源程序如下:
  1. #include "stm32f4xx.h"

  2. #include "Systick.h"
  3. #include "sys.h"
  4. #include "usart.h"

  5. #include "hc_sr04.h"

  6. //LED
  7. //宏替換PFout(9)成LED0
  8. #define LED0 PFout(9)
  9. #define LED1 PFout(10)
  10. #define LED2 PEout(13)
  11. #define LED3 PEout(14)
  12. //BEEP蜂鳴器
  13. #define BEEP PFout(8)
  14. //按鍵
  15. #define KEY0 PAin(0)
  16. #define KEY1 PEin(2)
  17. #define KEY2 PEin(3)
  18. #define KEY3 PEin(4)

  19. void delay_s()         //簡單的延時函數
  20. {
  21.         volatile int i = 0x0FE5178;
  22.         while(i--);
  23. }

  24. //初始化LED端口,
  25. void LED_Config(void)
  26. {
  27.         //定義一個LED的GPIO信息結構體
  28.         GPIO_InitTypeDef  GPIO_InitStructure;

  29.         //1.使能(打開)RCC時鐘(失能,關閉)
  30.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE);                        //使能GPIOE,GPIOF時鐘

  31.         //2.設置GPIO的信息結構體
  32.         //GPIOF9,F10初始化設置
  33.         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 | GPIO_Pin_10;                //LED0和LED1對應IO口
  34.         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;                            //普通輸出模式,
  35.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                //推挽輸出,驅動LED需要電流驅動
  36.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                    //100MHz
  37.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                                    //上拉
  38.         
  39.         //3.初始化GPIO信息結構體
  40.         GPIO_Init(GPIOF, &GPIO_InitStructure);
  41.         
  42.         //如果不同組,需要另外設置和初始化
  43.         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13 | GPIO_Pin_14;                //LED0和LED1對應IO口
  44.         GPIO_Init(GPIOE, &GPIO_InitStructure);
  45.         
  46.         //給LED一個初始化狀態,高電平,全滅
  47. //        GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
  48. //        GPIO_SetBits(GPIOE,GPIO_Pin_13 | GPIO_Pin_14);
  49.         LED0 = 1;
  50.         LED1 = 1;
  51.         LED2 = 1;
  52.         LED3 = 1;
  53. }

  54. //蜂鳴器的初始化
  55. void BEEP_Config(void)
  56. {
  57.         //定義一個蜂鳴器的GPIO信息結構體
  58.         GPIO_InitTypeDef  GPIO_BEEP_InitStructure;

  59.         //1.使能(打開)RCC時鐘(失能,關閉)
  60.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);                        //使能GPIOF時鐘

  61.         //2.設置GPIO的信息結構體
  62.         //GPIOF8初始化設置
  63.         GPIO_BEEP_InitStructure.GPIO_Pin   = GPIO_Pin_8;                //蜂鳴器PF8對應IO口
  64.         GPIO_BEEP_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;                            //普通輸出模式,
  65.         GPIO_BEEP_InitStructure.GPIO_OType = GPIO_OType_PP;                                //推挽輸出,驅動BEEP需要電流驅動
  66.         GPIO_BEEP_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                    //100MHz
  67.         GPIO_BEEP_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;                                    //下拉
  68.         
  69.         //3.初始化GPIO信息結構體
  70.         GPIO_Init(GPIOF, &GPIO_BEEP_InitStructure);
  71.         
  72.         //給蜂鳴器BEEP一個初始化狀態,
  73.         //GPIO_SetBits(GPIOF,GPIO_Pin_8);        //高電平
  74.         //GPIO_ResetBits(GPIOF,GPIO_Pin_8);        //低電平
  75.         BEEP = 0;
  76. }

  77. //按鍵的初始化函數
  78. void KEY_Config(void)
  79. {
  80.         //定義一個按鍵的GPIO信息結構體
  81.         GPIO_InitTypeDef  GPIO_KEY_InitStructure;

  82.         //1.使能(打開)RCC時鐘(失能,關閉)
  83.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE);                        //使能GPIOA時鐘

  84.         //2.設置GPIO的信息結構體
  85.         //GPIOA0初始化設置
  86.         GPIO_KEY_InitStructure.GPIO_Pin   = GPIO_Pin_0;                //按鍵KEY0對應IO口
  87.         GPIO_KEY_InitStructure.GPIO_Mode  = GPIO_Mode_IN;                            //普通輸入模式
  88.         GPIO_KEY_InitStructure.GPIO_OType = GPIO_OType_PP;                                //推挽輸出,需要電流驅動
  89.         GPIO_KEY_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                    //100MHz
  90.         GPIO_KEY_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                                    //上拉
  91.         
  92.         //3.初始化GPIO信息結構體
  93.         GPIO_Init(GPIOA, &GPIO_KEY_InitStructure);

  94.         //如果不同組,需要另外設置和初始化
  95.         GPIO_KEY_InitStructure.GPIO_Pin   = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;                //按鍵KEY1,2,3對應IO口
  96.         GPIO_Init(GPIOE, &GPIO_KEY_InitStructure);
  97. }

  98. //檢測按下哪一個按鍵
  99. int Key_Scan(void)
  100. {
  101.         int key_num = -1;
  102.         
  103.         //if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0)        //按下KEY0
  104.         if(KEY0 == 0)        //按下KEY0
  105.         {
  106.                 key_num = 0;
  107.         }
  108.         else if(KEY1 == 0)        //按下KEY1
  109.         {
  110.                 key_num = 1;
  111.         }
  112.         else if(KEY2 == 0)        //按下KEY2
  113.         {
  114.                 key_num = 2;
  115.         }
  116.         else if(KEY3 == 0)        //按下KEY3
  117.         {
  118.                 key_num = 3;
  119.         }
  120.         
  121.         return key_num;
  122. }

  123. //main函數,程序的入口,從這里開始運行
  124. int main(void)
  125. {
  126.         /***************變量的定義***************/
  127.         //int i;
  128.         u16 distance = 0;
  129.         
  130.         /***************外設函數初始化***************/
  131.         //函數的調用,LED初始化函數,PF9,PF10..PE13,PE14
  132.         LED_Config();
  133.         
  134.         //蜂鳴器的GPIO初始化,P8
  135.         BEEP_Config();
  136.         
  137.         //系統時鐘初始化,168MHz的芯片主頻
  138.         Systick_init(168);
  139.         
  140.         //按鍵的GPIO初始化,PA0,PE2.3.4
  141.         KEY_Config();
  142.         
  143.         //串口的初始化
  144.         uart_init(9600);
  145.         
  146.         //超聲波模塊HC_SR04初始化,TRIG:PE6,ECHO:PB6
  147.         HC_SR04_Config();
  148.         
  149.         /***************程序循環執行語句***************/
  150.         
  151.         //程序所有外設都已經初始化完畢
  152.         LED0=0;
  153.         LED1=0;
  154.         LED2=0;
  155.         LED3=0;
  156.         delay_ms(500);
  157.         LED0=1;
  158.         LED1=1;
  159.         LED2=1;
  160.         LED3=1;
  161.         
  162.   /**下面是通過直接操作庫函數的方式實現IO控制**/        
  163.         //死循環,程序會一直循環執行里面的語句
  164.         while(1)
  165.         {
  166.                 distance = Get_Distance();        //讀取超聲波模塊檢測到的距離,單位為毫米mm
  167.                 printf("distance = %d\r\n",distance);        //串口顯示
  168.                 delay_ms(500);
  169.                 LED0=!LED0;
  170.         }
  171. }
復制代碼

所有資料51hei提供下載:
實驗1_超聲波測距模塊.rar (456.77 KB, 下載次數: 154)
回復

使用道具 舉報

ID:298272 發表于 2019-2-12 17:40 | 顯示全部樓層
謝謝樓主分享!!
回復

使用道具 舉報

ID:401257 發表于 2019-3-10 21:08 | 顯示全部樓層
不得行啊
回復

使用道具 舉報

ID:401257 發表于 2019-3-10 21:08 | 顯示全部樓層
【串口打印的值是0】
回復

使用道具 舉報

ID:587157 發表于 2019-8-6 16:47 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:241242 發表于 2019-8-7 15:00 | 顯示全部樓層
感謝分享,非常棒的學習資料!
回復

使用道具 舉報

ID:241242 發表于 2019-8-7 15:01 | 顯示全部樓層
感謝分享,非常棒的學習資料!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97av视频| 欧美一级二级在线观看 | 久久久久久久久99精品 | 亚洲欧美日本在线 | 五月天婷婷综合 | 亚洲国产成人精品女人久久久 | 亚洲精品1 | 999精品在线 | 国产精品视频一区二区三区 | 国产一区二区精品在线观看 | 日韩欧美字幕 | av色站| 免费观看色 | 精品视频一区二区三区在线观看 | 二区中文字幕 | 日本三级电影在线看 | 亚洲最新在线 | 精品一区国产 | 国产精品免费一区二区三区四区 | 亚洲视频一区二区三区四区 | 免费观看黄色片视频 | 黄色在线观看国产 | 成在线人视频免费视频 | 国产91在线播放 | 天天天操操操 | 欧美精品综合在线 | 精品久久久久久久久久久久 | 日韩欧美三级 | 欧美一区二区三区视频 | 成人免费看片 | 欧美日韩亚洲视频 | 久久免费视频1 | 久久成人久久 | 成人高清在线视频 | 激情免费视频 | 国产久视频 | 日韩午夜影院 | 久久成人综合 | 国产亚洲一区二区三区在线 | 午夜视频在线 | 久久久免费电影 |