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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1983|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32f103超聲波驅(qū)動(dòng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:831137 發(fā)表于 2021-6-27 20:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"         
  4. #include "led.h"       
  5. #include "key.h"       


  6. //超聲波硬件接口定義
  7. #define HCSR04_PORT     GPIOB
  8. #define HCSR04_CLK      RCC_APB2Periph_GPIOB
  9. #define HCSR04_TRIG     GPIO_Pin_11
  10. #define HCSR04_ECHO     GPIO_Pin_10



  11. //超聲波計(jì)數(shù)
  12. u16 msHcCount = 0;

  13. //定時(shí)器4設(shè)置
  14. void hcsr04_NVIC()
  15. {
  16.         NVIC_InitTypeDef NVIC_InitStructure;
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  18.                        
  19.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;            
  20.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  21.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;         
  22.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      
  23.         NVIC_Init(&NVIC_InitStructure);
  24. }

  25. //IO口初始化 及其他初始化
  26. void Hcsr04Init()
  27. {  
  28.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   
  29.     GPIO_InitTypeDef GPIO_InitStructure;
  30.     RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);
  31.    
  32.     GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG;      
  33.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  35.     GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
  36.     GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
  37.      
  38.     GPIO_InitStructure.GPIO_Pin =   HCSR04_ECHO;     
  39.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  40.     GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  
  41.     GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);   
  42.      
  43.          
  44.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   
  45.      
  46.     TIM_DeInit(TIM4);
  47.     TIM_TimeBaseStructure.TIM_Period = (999);
  48.     TIM_TimeBaseStructure.TIM_Prescaler =(71);
  49.     TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  50.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  51.     TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);         
  52.         
  53.     TIM_ClearFlag(TIM4, TIM_FLAG_Update);  
  54.     TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);   
  55.     TIM_Cmd(TIM4,DISABLE);     
  56. }


  57. //打開定時(shí)器4
  58. static void OpenTimerForHc()  
  59. {
  60.    TIM_SetCounter(TIM4,0);
  61.    msHcCount = 0;
  62.    TIM_Cmd(TIM4, ENABLE);
  63. }

  64. //關(guān)閉定時(shí)器4
  65. static void CloseTimerForHc()   
  66. {
  67.    TIM_Cmd(TIM4, DISABLE);
  68. }

  69. //定時(shí)器4終中斷
  70. void TIM4_IRQHandler(void)  
  71. {
  72.    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  
  73.    {
  74.                    msHcCount++;
  75.        TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );
  76.       
  77.    }
  78. }


  79. //獲取定時(shí)器4計(jì)數(shù)器值
  80. u32 GetEchoTimer(void)
  81. {
  82.    u32 t = 0;
  83.    t = msHcCount*1000;
  84.    t += TIM_GetCounter(TIM4);
  85.    TIM4->CNT = 0;  
  86.    delay_ms(50);
  87.    return t;
  88. }

  89. //通過(guò)定時(shí)器4計(jì)數(shù)器值推算距離
  90. float Hcsr04GetLength(void )
  91. {
  92.    u32 t = 0;
  93.    int i = 0;
  94.    float lengthTemp = 0;
  95.    float sum = 0;
  96.    while(i!=5)
  97.    {
  98.       TRIG_Send = 1;      
  99.       delay_us(20);
  100.       TRIG_Send = 0;
  101.       while(ECHO_Reci == 0);      
  102.       OpenTimerForHc();        
  103.       i = i + 1;
  104.       while(ECHO_Reci == 1);
  105.       CloseTimerForHc();        
  106.       t = GetEchoTimer();             
  107.                         lengthTemp = ((float)t*0.034/2);//cm
  108.       sum = lengthTemp + sum ;
  109.         
  110.     }
  111.     lengthTemp = sum/5.0;
  112.     return lengthTemp;
  113. }
  114.        
  115. //測(cè)試主函數(shù)
  116. int main(void)
  117. {         
  118.          float length;
  119.          delay_init();                     //延時(shí)函數(shù)初始化          
  120.          //NVIC_Configuration();          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  121.          hcsr04_NVIC();
  122.          uart_init(9600);                 //串口初始化為9600
  123.          Hcsr04Init();
  124.          LED_Init();
  125.    
  126.   // Hcsr04Init();   
  127.        
  128.    while(1)
  129.          {                                         
  130.      length = Hcsr04GetLength();
  131.      printf("距離為:%.3fcm\n",length);
  132.                  if(length>100)
  133.                  {
  134.                                  GPIO_ResetBits(GPIOB,GPIO_Pin_0);               
  135.                  }
  136.                  else
  137.                  {
  138.                          GPIO_SetBits(GPIOB,GPIO_Pin_0);               
  139.                  }
  140.                  delay_ms(50);   
  141.         }                       
  142. }
復(fù)制代碼

代碼: 超聲波(用).7z (219.91 KB, 下載次數(shù): 36)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人伊成久久人综合网站 | 国产精品区二区三区日本 | 国产精品黄 | 91精品国产91久久久久久三级 | 精品国产18久久久久久二百 | 99视频免费 | 成人av在线大片 | 国产色在线 | 午夜电影一区 | 亚洲一区二区三区在线 | 91精品国产91久久久久游泳池 | 一级毛片视频在线观看 | 国产成人精品一区二区三区四区 | 久久久久久免费观看 | 欧美xxxⅹ性欧美大片 | 欧美二区在线 | 日韩天堂av | 国产精品无码久久久久 | 欧美精品一区二区三区在线播放 | av电影一区 | 三级成人片 | 色天天综合 | 日韩aⅴ在线观看 | 欧美日韩在线免费观看 | 国产一区二区三区精品久久久 | 欧美视频在线免费 | 一区二区三区在线免费观看 | 久久男人 | 国产一区二区三区网站 | 欧美日韩视频在线第一区 | 欧洲高清转码区一二区 | 国产成人综合久久 | 美女久久久久 | 暖暖日本在线视频 | 日韩欧美在线一区 | 亚洲一区二区在线视频 | 日韩精品一区二区三区免费视频 | 国产三区av| 国产精品美女久久久久 | 国产精品毛片一区二区在线看 | 久久视频免费观看 |