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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32超聲波定位程序 用兩個模塊判斷坐標(biāo)位置

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:334435 發(fā)表于 2019-7-25 20:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
利用兩個超聲波模塊進(jìn)行定位判斷坐標(biāo)位置

STM32單片機源程序如下:
#include "csbcj.h"
#include "tim.h"
#include "delay.h"
#include "Systick.h"

extern float time;                         //X接收時間
extern float UltrasonicWave_Distance;      //X距離     

extern float Ytime;                         //Y接收時間
extern float YUltrasonicWave_Distance;      //Y距離

static void BASIC_CSBC_NVIC_Config(void)
{
          EXTI_InitTypeDef EXTI_InitStructure;
          NVIC_InitTypeDef NVIC_InitStructure;

           GPIO_EXTILineConfig(GPIO_PortSourceGPIOX,GPIO_PinSourcex);    //GPIOC.7          中斷線以及中斷初始化配置
    EXTI_InitStructure.EXTI_Line=EXTI_Linex;                      //外部中斷線7
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                  //設(shè)置 EXTI 線路為中斷請求
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //設(shè)置輸入線路 上升沿為中斷請求
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;                     //使能
          EXTI_Init(&EXTI_InitStructure);                                            //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                      // 設(shè)置中斷組為2        
    NVIC_InitStructure.NVIC_IRQChannel = EXTIx_IRQn ;                          // 設(shè)置中斷來源
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                        // 設(shè)置主優(yōu)先級為 2
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                         // 設(shè)置搶占優(yōu)先級為1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               //使能中斷
    NVIC_Init(&NVIC_InitStructure);
        
        
          //Y軸
                 GPIO_EXTILineConfig(YGPIO_PortSourceGPIOX,YGPIO_PinSourcex);    //GPIOC.7          中斷線以及中斷初始化配置
    EXTI_InitStructure.EXTI_Line=YEXTI_Linex;                      //外部中斷線7
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                  //設(shè)置 EXTI 線路為中斷請求
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //設(shè)置輸入線路 上升沿為中斷請求
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;                     //使能
          EXTI_Init(&EXTI_InitStructure);                                            //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                      // 設(shè)置中斷組為2        
    NVIC_InitStructure.NVIC_IRQChannel = YEXTIx_IRQn ;                          // 設(shè)置中斷來源
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                        // 設(shè)置主優(yōu)先級為 2
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                         // 設(shè)置搶占優(yōu)先級為1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               //使能中斷
    NVIC_Init(&NVIC_InitStructure);
        
}


/*
* 函數(shù)名:UltrasonicWave_Configuration
* 描述  :超聲波模塊的初始化
* 輸入  :無
* 輸出  :無        
*/
void UltrasonicWave_Configuration(void)
{
  GPIO_InitTypeDef       GPIO_InitStructure;        
        
  RCC_APBxPeriphClockCmd(RCC_GPIO_Clock, ENABLE);
        
   //X
  GPIO_InitStructure.GPIO_Pin = TRIG_PIN;                                                //PC8接TRIG
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   //設(shè)為推挽輸出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  GPIO_Init(TRIG_PORT, &GPIO_InitStructure);                   //初始化外設(shè)GPIO

  GPIO_InitStructure.GPIO_Pin = ECHO_PIN;                                        //PC7接ECH0
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                      //設(shè)為輸入
  GPIO_Init(ECHO_PORT,&GPIO_InitStructure);                                                  //初始化GPIOA
        //Y
        GPIO_InitStructure.GPIO_Pin = YTRIG_PIN;                                                //PC8接TRIG
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   //設(shè)為推挽輸出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  GPIO_Init(YTRIG_PORT, &GPIO_InitStructure);                   //初始化外設(shè)GPIO

  GPIO_InitStructure.GPIO_Pin = YECHO_PIN;                                        //PC7接ECH0
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                      //設(shè)為輸入
  GPIO_Init(YECHO_PORT,&GPIO_InitStructure);                                                  //初始化GPIOA
        
        BASIC_CSBC_NVIC_Config();
        
}

/*
* 函數(shù)名:UltrasonicWave_StartMeasure
* 描述  :開始測距,發(fā)送一個>10us的脈沖,然后測量返回的高電平時間
* 輸入  :無
* 輸出  :無        
*/
void UltrasonicWave_StartMeasure(void)
{
        //X
  GPIO_SetBits(TRIG_PORT,TRIG_PIN);                   //送>10US的高電平
  SysTick_Delay_us(20);                                         //延時20US高電平觸發(fā)模塊工作
  GPIO_ResetBits(TRIG_PORT,TRIG_PIN);     //開始工作關(guān)閉高電平置低電平
        
}

void YUltrasonicWave_StartMeasure(void)
{
        //Y
        GPIO_SetBits(YTRIG_PORT,YTRIG_PIN);                   //送>10US的高電平
  SysTick_Delay_us(20);                                         //延時20US高電平觸發(fā)模塊工作
  GPIO_ResetBits(YTRIG_PORT,YTRIG_PIN);     //開始工作關(guān)閉高電平置低電平
}

//中斷服務(wù)函數(shù)


//X軸
//中斷服務(wù)函數(shù)用來接收信息的處理
void EXTIX_IRQHandler(void)
{
    SysTick_Delay_us(10);                                                                      //延時10us
   if(EXTI_GetITStatus(EXTI_Linex) != RESET)                              //中斷發(fā)生
           {
                         TIM_SetCounter(TIMX,0);                                            //計數(shù)器清零
                         TIME_X_Y=0;                                                        //溢出次數(shù)清零
                         TIM_Cmd(TIMX, ENABLE);                                             //開啟時鐘
                         while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                        //等待低電平
                         TIM_Cmd(TIMX, DISABLE);                                                              //定時器2失能
                         UltrasonicWave_Distance=TIM_GetCounter(TIMX)*5*34/2000;                                         //距離
             EXTI_ClearITPendingBit(EXTI_Linex);                                //清除EXTI7線路掛起位
                         TIM_SetCounter(YTIMX,0);
     }
                  SysTick_Delay_ms(50);
                        YUltrasonicWave_StartMeasure();
                 
}

//TIMx的中斷服務(wù)函數(shù)   
// TIME_x_y為中斷次數(shù)
void BASE_TIMX_IRQHandle(void )
{
  if (TIM_GetITStatus(TIMX,TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源
                  {
//                          TIME_X_Y++;  //記錄發(fā)生了多少次中斷,一次中斷為60000us
                         TIM_ClearITPendingBit(TIMX,TIM_FLAG_Update );  //清除TIMx的中斷待處理位:TIM 中斷源
                        }
}

//Y軸
//中斷服務(wù)函數(shù)用來接收信息的處理
void YEXTIX_IRQHandler(void)  
{
    SysTick_Delay_us(10);                                                               //延時10us
   if(EXTI_GetITStatus(YEXTI_Linex) != RESET)                              //中斷發(fā)生
           {
                         TIM_SetCounter(YTIMX,0);                                            //計數(shù)器清零
                         YTIME_X_Y=0;                                                        //溢出次數(shù)清零
                         TIM_Cmd(YTIMX, ENABLE);                                             //開啟時鐘
                         while(GPIO_ReadInputDataBit(YECHO_PORT,YECHO_PIN));                       //等待低電平
                         TIM_Cmd(YTIMX, DISABLE);                                                               //定時器2失能
                         YUltrasonicWave_Distance=TIM_GetCounter(YTIMX)*5*34/2000;                                         //距離
             EXTI_ClearITPendingBit(YEXTI_Linex);                                //清除EXTI7線路掛起位
                         TIM_SetCounter(YTIMX,0);
     }
}

//TIMx的中斷服務(wù)函數(shù)   
// TIME_x_y為中斷次數(shù)
void YBASE_TIMX_IRQHandle(void )
{
  if (TIM_GetITStatus(YTIMX,TIM_IT_Update) != RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源
                  {
                          TIM_ClearITPendingBit(YTIMX,TIM_FLAG_Update );  //清除TIMx的中斷待處理位:TIM 中斷源
                        }
}



硬件宏定義
#ifndef __CSBCJ_H
#define __CSBCJ_H
#include "tim.h"


#define  RCC_APBxPeriphClockCmd   RCC_APB2PeriphClockCmd
#define  RCC_GPIO_Clock           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)



//X軸
//發(fā)送啟動脈沖大于10us
#define         TRIG_PORT      GPIOC                      //TRIG   
#define         TRIG_PIN       GPIO_Pin_8    //TRIG
//接受到回波信號引腳
#define         ECHO_PORT      GPIOC                      //ECHO
#define         ECHO_PIN       GPIO_Pin_7          //ECHO
//利用中斷接收超聲波回波信號
#define  GPIO_PortSourceGPIOX    GPIO_PortSourceGPIOC
#define  GPIO_PinSourcex         GPIO_PinSource7
#define  EXTI_Linex              EXTI_Line7
#define  EXTIx_IRQn              EXTI9_5_IRQn
#define  EXTIX_IRQHandler        EXTI9_5_IRQHandler



//Y軸
//發(fā)送啟動脈沖大于10us
#define         YTRIG_PORT      GPIOC                      //TRIG   
#define         YTRIG_PIN       GPIO_Pin_14     //TRIG
//接受到回波信號引腳
#define         YECHO_PORT      GPIOC                      //ECHO
#define         YECHO_PIN       GPIO_Pin_4            //ECHO
//利用中斷接收超聲波回波信號
#define  YGPIO_PortSourceGPIOX    GPIO_PortSourceGPIOC
#define  YGPIO_PinSourcex         GPIO_PinSource4
#define  YEXTI_Linex              EXTI_Line4
#define  YEXTIx_IRQn              EXTI4_IRQn
#define  YEXTIX_IRQHandler        EXTI4_IRQHandler



static void BASIC_CSBC_NVIC_Config(void);
void UltrasonicWave_Configuration(void);               //對超聲波模塊初始化
void UltrasonicWave_StartMeasure(void);                //開始測距,發(fā)送一個>10us的脈沖,然后測量返回的高電平時間
void YUltrasonicWave_StartMeasure(void);

#endif  /*__CSBCJ_H*/

捕獲.PNG (27.12 KB, 下載次數(shù): 51)

捕獲.PNG

2個超聲波定位.7z

193.36 KB, 下載次數(shù): 41, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:334435 發(fā)表于 2019-7-25 21:28 | 只看該作者
X軸的中斷服務(wù)函數(shù) TIM_SetCounter(YTIMX,0);  應(yīng)該改為TIM_SetCounter(TIMX,0);才對
不過這一句不寫也沒有發(fā)現(xiàn)什么大問題
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产中文原创 | 麻豆视频国产在线观看 | 看片wwwwwwwwwww | 欧美亚洲国产日韩 | 天天干天天插天天 | 久久国产精品偷 | 国产成人jvid在线播放 | 日本午夜网| 欧美精选一区二区 | 亚洲视频中文字幕 | 天堂一区二区三区 | 精品久久久久国产 | 免费观看一区二区三区毛片 | 毛片av免费在线观看 | 黄色片在线免费看 | 精品国产91乱码一区二区三区 | 中文字幕在线精品 | 在线亚洲精品 | 免费观看的黄色网址 | 久久精品久久久 | 久久国产精品偷 | 男女免费在线观看视频 | 久久精品中文字幕 | 成人不卡 | 国内精品伊人久久久久网站 | 国产在线一区二区三区 | 亚洲精品视频在线观看视频 | av在线播放免费 | 欧美精品久久 | 成人亚洲精品 | 国产又色又爽又黄又免费 | 综合激情久久 | 国产精品亚洲一区 | 国产福利网站 | 午夜精品一区二区三区免费视频 | 亚洲一区二区三区免费 | 成年免费在线观看 | 国家aaa的一级看片 h片在线看 | 自拍偷拍第一页 | 免费高清av | 免费视频二区 |