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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9230|回復: 4
打印 上一主題 下一主題
收起左側(cè)

基于STM32F103ZET6單片機的超聲波程序(兩個超聲波)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:200005 發(fā)表于 2017-5-12 16:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個超聲波的程序,實測可用。



單片機源程序如下:

  1. #include "tim_wave.h"
  2. #include "systick.h"
  3. #include "usart.h"
  4. #include "bsp_led.h"
  5. #include "wave3.h"

  6. // 中斷優(yōu)先級配置
  7. static void GENERAL_TIM_NVIC_Config(void)
  8. {
  9.     NVIC_InitTypeDef NVIC_InitStructure;
  10.                                                    
  11.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                    // 設置中斷組為0       
  12.                
  13.     NVIC_InitStructure.NVIC_IRQChannel = WAVE_TIM_IRQ ;                // 設置中斷來源
  14.                
  15.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;          // 設置主優(yōu)先級為 0
  16.           
  17.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                // 設置搶占優(yōu)先級為3
  18.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  19.     NVIC_Init(&NVIC_InitStructure);
  20. }

  21. static void GENERAL_TIM_GPIO_Config(void)
  22. {
  23.   GPIO_InitTypeDef GPIO_InitStructure;

  24.   // 輸入捕獲通道 GPIO 初始化
  25.         RCC_APB2PeriphClockCmd(WAVE1_TIM_CH1_GPIO_CLK, ENABLE);
  26.   GPIO_InitStructure.GPIO_Pin =  WAVE1_TIM_CH1_PIN;
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  28.   GPIO_Init(WAVE1_TIM_CH1_PORT, &GPIO_InitStructure);       
  29. /*-----------------------------------------------------------------------------------------------------------------*/       
  30.         RCC_APB2PeriphClockCmd(WAVE2_TIM_CH1_GPIO_CLK, ENABLE);
  31.   GPIO_InitStructure.GPIO_Pin =  WAVE2_TIM_CH1_PIN;
  32.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  33.   GPIO_Init(WAVE2_TIM_CH1_PORT, &GPIO_InitStructure);       
  34. /*-----------------------------------------------------------------------------------------------------------------*/       
  35. }


  36. ///*
  37. // * 注意:TIM_TimeBaseInitTypeDef結構體里面有5個成員,TIM6和TIM7的寄存器里面只有
  38. // * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的時候只需初始化這兩個成員即可,
  39. // * 另外三個成員是通用定時器和高級定時器才有.
  40. // *-----------------------------------------------------------------------------
  41. // *typedef struct
  42. // *{ TIM_Prescaler            都有
  43. // *        TIM_CounterMode                             TIMx,x[6,7]沒有,其他都有
  44. // *  TIM_Period               都有
  45. // *  TIM_ClockDivision        TIMx,x[6,7]沒有,其他都有
  46. // *  TIM_RepetitionCounter    TIMx,x[1,8,15,16,17]才有
  47. // *}TIM_TimeBaseInitTypeDef;
  48. // *-----------------------------------------------------------------------------
  49. // */

  50. /* ----------------   PWM信號 周期和占空比的計算--------------- */
  51. // ARR :自動重裝載寄存器的值
  52. // CLK_cnt:計數(shù)器的時鐘,等于 Fck_int / (psc+1) = 72M/(psc+1)
  53. // PWM 信號的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
  54. // 占空比P=CCR/(ARR+1)

  55. static void GENERAL_TIM_Mode_Config(void)
  56. {
  57.   // 開啟定時器時鐘,即內(nèi)部時鐘CK_INT=72M
  58.         WAVE_TIM_APBxClock_FUN(WAVE_TIM_CLK,ENABLE);

  59. /*--------------------時基結構體初始化-------------------------*/       
  60.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  61.         // 自動重裝載寄存器的值,累計TIM_Period+1個頻率后產(chǎn)生一個更新或者中斷
  62.         TIM_TimeBaseStructure.TIM_Period=WAVE_TIM_PERIOD;       
  63.         // 驅(qū)動CNT計數(shù)器的時鐘 = Fck_int/(psc+1)
  64.         TIM_TimeBaseStructure.TIM_Prescaler= WAVE_TIM_PSC;
  65.         // 時鐘分頻因子 ,配置死區(qū)時間時需要用到
  66.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
  67.         // 計數(shù)器計數(shù)模式,設置為向上計數(shù)
  68.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;               
  69.         // 重復計數(shù)器的值,沒用到不用管
  70.         TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       
  71.         // 初始化定時器
  72.         TIM_TimeBaseInit(WAVE_TIM, &TIM_TimeBaseStructure);

  73.         /*--------------------輸入捕獲結構體初始化-------------------*/       
  74.         TIM_ICInitTypeDef TIM_ICInitStructure;
  75.         // 配置輸入捕獲的通道,需要根據(jù)具體的GPIO來配置
  76.         TIM_ICInitStructure.TIM_Channel = WAVE1_TIM_CHANNEL_x;
  77.         // 輸入捕獲信號的極性配置
  78.         TIM_ICInitStructure.TIM_ICPolarity = WAVE_TIM_STRAT_ICPolarity;
  79.         // 輸入通道和捕獲通道的映射關系,有直連和非直連兩種
  80.         TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  81.         // 輸入的需要被捕獲的信號的分頻系數(shù)
  82.         TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  83.         // 輸入的需要被捕獲的信號的濾波系數(shù)
  84.         TIM_ICInitStructure.TIM_ICFilter = 0;
  85.         // 定時器輸入捕獲初始化
  86.         TIM_ICInit(WAVE_TIM, &TIM_ICInitStructure);
  87. /*---------------------------------------------------------------------------------------------------------------*/       
  88.         TIM_ICInitStructure.TIM_Channel = WAVE2_TIM_CHANNEL_x;
  89.         // 輸入捕獲信號的極性配置
  90.         TIM_ICInitStructure.TIM_ICPolarity = WAVE_TIM_STRAT_ICPolarity;
  91.         // 輸入通道和捕獲通道的映射關系,有直連和非直連兩種
  92.         TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  93.         // 輸入的需要被捕獲的信號的分頻系數(shù)
  94.         TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  95.         // 輸入的需要被捕獲的信號的濾波系數(shù)
  96.         TIM_ICInitStructure.TIM_ICFilter = 0;
  97.         // 定時器輸入捕獲初始化
  98.         TIM_ICInit(WAVE_TIM, &TIM_ICInitStructure);
  99. /*---------------------------------------------------------------------------------------------------------------*/       




  100.         // 清除更新和捕獲中斷標志位
  101.   TIM_ClearFlag(WAVE_TIM, TIM_FLAG_Update|WAVE1_TIM_IT_CCx|WAVE2_TIM_IT_CCx);       
  102.   // 開啟更新和捕獲中斷  
  103.         TIM_ITConfig (WAVE_TIM, TIM_IT_Update |WAVE1_TIM_IT_CCx|WAVE2_TIM_IT_CCx, ENABLE );
  104.        
  105.         // 使能計數(shù)器
  106.         TIM_Cmd(WAVE_TIM, ENABLE);
  107. }
  108. static void WAVE_TRIG_Config(void)
  109. {
  110.        
  111.           GPIO_InitTypeDef    GPIO_InitStructure;        //定義TRIG_GPIO結構體
  112.        
  113.     RCC_APB2PeriphClockCmd(WAVE1_TRIG_GPIO_CLK, ENABLE);   
  114.     GPIO_InitStructure.GPIO_Pin = WAVE1_TRIG_GPIO_PIN;               
  115.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  116.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  117.     GPIO_Init(WAVE1_TRIG_GPIO_PORT, &GPIO_InitStructure);
  118. /*------------------------------------------------------------------------------------------------------------------*/
  119.           RCC_APB2PeriphClockCmd(WAVE2_TRIG_GPIO_CLK, ENABLE);   
  120.     GPIO_InitStructure.GPIO_Pin = WAVE2_TRIG_GPIO_PIN;               
  121.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  122.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
  123.     GPIO_Init(WAVE2_TRIG_GPIO_PORT, &GPIO_InitStructure);
  124. /*------------------------------------------------------------------------------------------------------------------*/

  125. }
  126. void WAVE_Start(void)
  127. {
  128.     //Time_Start();
  129.           GPIO_SetBits(WAVE1_TRIG_GPIO_PORT,WAVE1_TRIG_GPIO_PIN);
  130.           GPIO_SetBits(WAVE2_TRIG_GPIO_PORT,WAVE2_TRIG_GPIO_PIN);
  131.                 SysTick_Delay_us(20);
  132.           GPIO_ResetBits(WAVE1_TRIG_GPIO_PORT,WAVE1_TRIG_GPIO_PIN);
  133.           GPIO_ResetBits(WAVE2_TRIG_GPIO_PORT,WAVE2_TRIG_GPIO_PIN);
  134.           //SysTick_Delay_ms(20);
  135. }


  136. extern float Distance1,Distance2;
  137. extern u8 W1_TIM3CH1_CAPTURE_STA,W2_TIM3CH1_CAPTURE_STA; //輸入捕獲狀態(tài)
  138.                                                                                 //bit7:捕獲完成標志
  139.                                                                                 //bit6:捕獲到高點平標志
  140.                                                                                 //bit5~0:捕獲到高電平后定時器溢出的次數(shù)

  141. extern u32 W1_TIM3CH1_CAPTURE_VAL,W2_TIM3CH1_CAPTURE_VAL;//輸入捕獲值
  142. uint32_t time1,time2;


  143. void Dis_Print(void)
  144. {
  145.         if(W1_TIM3CH1_CAPTURE_STA&0X80)                                        //成功捕獲到了一次高電平
  146.                 {
  147.                         time1=W1_TIM3CH1_CAPTURE_STA&0X3F;
  148.                         time1*=5000;                                                                                     //溢出時間總和
  149.                         time1+=W1_TIM3CH1_CAPTURE_VAL;                                                 //得到總的高電平時間
  150.                         Distance1=time1*340/200.0;
  151.                         //printf("Distance1:%f cm\r\n",Distance1);
  152.       //printf("Time1:%d s\r\n",time1);
  153.                         W1_TIM3CH1_CAPTURE_STA=0;                                                             //開啟下一次捕獲
  154.                 }
  155.                 if(W2_TIM3CH1_CAPTURE_STA&0X80)                                      //成功捕獲到了一次高電平
  156.                 {
  157.                         time2=W2_TIM3CH1_CAPTURE_STA&0X3F;
  158. ……………………

  159. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
tim_wave.rar (3.02 KB, 下載次數(shù): 172)

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:168327 發(fā)表于 2018-5-7 11:34 | 只看該作者
只有.c文件,沒有工程文件
回復

使用道具 舉報

板凳
ID:87448 發(fā)表于 2018-5-7 22:15 | 只看該作者
幸苦了!
回復

使用道具 舉報

地板
ID:87448 發(fā)表于 2018-5-7 22:17 | 只看該作者
樓主請問你這個是控制多少w的頭子的,能交流一下電路嗎?
回復

使用道具 舉報

5#
ID:387808 發(fā)表于 2018-8-19 13:27 | 只看該作者
謝謝!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产目拍亚洲精品99久久精品 | 久久久久久国 | 九九热精品视频 | 国产小u女发育末成年 | 日韩欧美一区二区三区免费看 | 中文日韩在线视频 | 国产精品欧美精品 | 亚洲国产精品久久久 | 久久国产精品视频 | 日韩成人中文字幕 | 国产色99精品9i| 99久久国产精 | 成人午夜激情 | 国产福利视频网站 | 伊人免费网 | 在线免费观看视频黄 | 国产精品日产欧美久久久久 | 亚洲欧美在线视频 | 一区二区成人在线 | 国产精品九九九 | 午夜日韩 | av中文字幕在线观看 | 久久精品国产v日韩v亚洲 | 久久综合一区 | 视频三区 | av日韩高清 | 国产精品国产馆在线真实露脸 | 日韩国产在线观看 | 免费在线观看黄色av | 婷婷激情综合 | jvid精品资源在线观看 | 91高清在线观看 | 三级av在线 | 在线日韩福利 | 羞视频在线观看 | 国产乱码一区 | 久久久久国产一区二区三区 | 精品一区二区三区在线观看国产 | 一本一道久久a久久精品综合 | 在线午夜| 亚洲一区二区精品视频在线观看 |