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

標題: stm32f103超聲波驅動程序 [打印本頁]

作者: zx0922    時間: 2021-6-27 20:37
標題: stm32f103超聲波驅動程序
  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. //超聲波計數
  12. u16 msHcCount = 0;

  13. //定時器4設置
  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. //打開定時器4
  58. static void OpenTimerForHc()  
  59. {
  60.    TIM_SetCounter(TIM4,0);
  61.    msHcCount = 0;
  62.    TIM_Cmd(TIM4, ENABLE);
  63. }

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

  69. //定時器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. //獲取定時器4計數器值
  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. //通過定時器4計數器值推算距離
  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. //測試主函數
  116. int main(void)
  117. {         
  118.          float length;
  119.          delay_init();                     //延時函數初始化          
  120.          //NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  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. }
復制代碼

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





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一级片免费在线观看 | 国产91在线播放 | 久久中文网 | 亚洲精品乱码久久久久久动漫 | www.久久精品 | 91手机看片 | 国产理论在线 | 少妇搡bbbb搡bbb搡澳门 | 国产网址 | 日本理伦片午夜理伦片 | 亚洲国产福利 | 在线免费观看黄 | 日本一级淫片色费放 | 9.1成人看片免费版 国产草草影院 | 激情五月综合 | 黄色亚洲 | 日韩国产精品一区二区 | 日产精品久久久一区二区 | 一区二区三区在线免费 | 久草综合网 | 日韩免费毛片 | 黄色大片在线 | 黄色免费网站视频 | 中文久久乱码一区二区 | 国产无遮挡又黄又爽又色 | 国产色视频一区二区三区qq号 | 日韩欧美精品一区 | 国产精品欧美日韩 | 久久久91| 99re视频在线 | 亚洲第一黄色 | 亚洲精品观看 | 久草免费福利视频 | 91av在线看 | 日产毛片| 欧美一区二区三区的 | 欧美性生交xxxxx久久久 | 国产黄色精品 | 黄色片久久 | 日韩精品视频在线播放 | 亚洲视频免费观看 |