1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
STM32的超聲波測(cè)距源程序
[打印本頁(yè)]
作者:
芋頭夜
時(shí)間:
2017-5-20 21:30
標(biāo)題:
STM32的超聲波測(cè)距源程序
STM32的超聲波測(cè)距源程序
0.png
(68.92 KB, 下載次數(shù): 123)
下載附件
2017-5-20 21:41 上傳
單片機(jī)源程序如下:
#include "CHAO.h"
#include "timer.h"
#include "delay.h"
#include "LED.h"
#include "usart.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_gpio.h"
#define TRIG_PORT1 GPIOB //TRIG
#define ECHO_PORT1 GPIOB //ECHO
#define TRIG_PIN1 GPIO_Pin_14 //TRIG B14 TIM1
#define ECHO_PIN1 GPIO_Pin_15 //ECHO B15
#define TRIG_PORT2 GPIOA //ECHO A2
#define ECHO_PORT2 GPIOA //ECHO A3
#define TRIG_PIN2 GPIO_Pin_0 //TRIG A2 TIM2
#define ECHO_PIN2 GPIO_Pin_1 //ECHO A2
#define TRIG_PIN4 GPIO_Pin_8 //TRIG B8 TIM4
#define ECHO_PIN4 GPIO_Pin_9 //ECHO B9
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//ALIENTEK戰(zhàn)艦STM32開(kāi)發(fā)板
//LED驅(qū)動(dòng)代碼
//正點(diǎn)原子@ALIENTEK
//版本:V1.0
//版權(quán)所有,盜版必究。
//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//初始化PB5和PE5為輸出口.并使能這兩個(gè)口的時(shí)鐘
//LED IO初始化
u16 flag1=0;//藍(lán)牙控制的關(guān)閉是否跟隨
u16 flag2=0;
u16 flag4=0;
u16 flagq=0;//前面
u16 flagz=0;//左邊
u16 flagy=0;//右邊
u16 pwm3=186;//x
u16 pwm4=155;
void zadd(void)
{
if(pwm4>440)
{
pwm4=395;
}
else
{
pwm4=pwm4+1;
}
TIM_SetCompare4(TIM3,pwm4);
}
void yadd(void)
{
if(pwm3>440)
{
pwm3=405;
}
else
{
pwm3=pwm3+1;
}
TIM_SetCompare3(TIM3,pwm3);
}
void zjian(void)
{
if(pwm4<60)
{
pwm4=45;
}
else
{
pwm4=pwm4-1;
}
TIM_SetCompare4(TIM3,pwm4);
}
void yjian(void)
{
if(pwm3<60)
{
pwm3=45;
}
else
{
pwm3=pwm3-1;
}
TIM_SetCompare3(TIM3,pwm3);
}
void PD_USART2_Init(void)
{
GPIO_InitTypeDef GPIO_Initping;
USART_InitTypeDef USART_Initping;
NVIC_InitTypeDef NVIC_Initping;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
GPIO_Initping.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Initping.GPIO_Pin=GPIO_Pin_2;
GPIO_Initping.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_Initping);
GPIO_Initping.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Initping.GPIO_Pin=GPIO_Pin_3;
GPIO_Initping.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_Initping);
USART_Initping.USART_BaudRate=9600;
USART_Initping.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Initping.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
USART_Initping.USART_Parity=USART_Parity_No;
USART_Initping.USART_StopBits=USART_StopBits_1;
USART_Initping.USART_WordLength=USART_WordLength_8b;
USART_Init(USART2,&USART_Initping);
USART_Cmd(USART2,ENABLE);//使能串口2
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//開(kāi)啟接收中斷
NVIC_Initping.NVIC_IRQChannel=USART2_IRQn;
NVIC_Initping.NVIC_IRQChannelCmd=ENABLE;
NVIC_Initping.NVIC_IRQChannelPreemptionPriority=1;
NVIC_Initping.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_Initping);
}
void IN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能PB,PE端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOA.11
GPIO_SetBits(GPIOA,GPIO_Pin_11); //PA.11輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOA.12
GPIO_SetBits(GPIOA,GPIO_Pin_12); //PA.12 輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOA.12
GPIO_SetBits(GPIOA,GPIO_Pin_7); //PA.12 輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOA.12
GPIO_SetBits(GPIOA,GPIO_Pin_6); //PA.12 輸出高
}
float CHAO_Distance1; //計(jì)算出的距離
float CHAO_Distance2; //計(jì)算出的距離
float CHAO_Distance4; //計(jì)算出的距離
void CHAO_Init1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能復(fù)用功能時(shí)鐘
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)為推挽輸出模式
GPIO_InitStructure.GPIO_Pin=TRIG_PIN1;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB ,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//設(shè)為輸入
GPIO_InitStructure.GPIO_Pin = ECHO_PIN1; //PB15接ECH0
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB ,&GPIO_InitStructure);
//GPIOB.15 中斷線以及中斷初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15);
EXTI_InitStructure.EXTI_Line=EXTI_Line15;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //搶占優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
}
void CHAO_Init2(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PB端口時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能復(fù)用功能時(shí)鐘
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)為推挽輸出模式
GPIO_InitStructure.GPIO_Pin=TRIG_PIN2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA ,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//設(shè)為輸入
GPIO_InitStructure.GPIO_Pin =ECHO_PIN2 ; //PA3接ECH0
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA ,&GPIO_InitStructure);
//GPIOA.3 中斷線以及中斷初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //搶占優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
}
void CHAO_Init4(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能復(fù)用功能時(shí)鐘
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)為推挽輸出模式
GPIO_InitStructure.GPIO_Pin=TRIG_PIN4 ;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB ,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//設(shè)為輸入
GPIO_InitStructure.GPIO_Pin = ECHO_PIN4 ; //PB9接ECH0
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB ,&GPIO_InitStructure);
//GPIOB.9 中斷線以及中斷初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);
EXTI_InitStructure.EXTI_Line=EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //搶占優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子優(yōu)先級(jí)2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
}
void EXTI15_10_IRQHandler(void)
{
delay_us(10); //延時(shí)10us
if(EXTI_GetITStatus(EXTI_Line15) != RESET)
{
TIM_SetCounter(TIM1,0);
if(flag1==1)
{
TIM_Cmd(TIM1, ENABLE); //開(kāi)啟時(shí)鐘
}
else
{
TIM_Cmd(TIM1,DISABLE); //關(guān)閉時(shí)鐘
}
while(GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN1)); //等待低電平
TIM_Cmd(TIM1, DISABLE); //定時(shí)器2失能
CHAO_Distance1=TIM_GetCounter(TIM1)*30*33/300.0; //計(jì)算距離&&UltrasonicWave_Distance<150
// printf("distance1:%f cm",CHAO_Distance1);
EXTI_ClearITPendingBit(EXTI_Line15); //清除EXTI7線路掛起位
}
}
void EXTI1_IRQHandler(void)
{
delay_us(10); //延時(shí)10us
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{
TIM_SetCounter(TIM2,0);
if(flag2==1)
{
TIM_Cmd(TIM2, ENABLE); //開(kāi)啟時(shí)鐘
}
else
{
TIM_Cmd(TIM2,DISABLE); //關(guān)閉時(shí)鐘
}
while(GPIO_ReadInputDataBit(ECHO_PORT2,ECHO_PIN2)); //等待低電平
TIM_Cmd(TIM2, DISABLE); //定時(shí)器2失能
CHAO_Distance2=TIM_GetCounter(TIM2)*100*500.0; //計(jì)算距離&&UltrasonicWave_Distance<150
// if(CHAO_Distance2>0)
// {
// printf("distance2:%f cm",CHAO_Distance2);
// }
EXTI_ClearITPendingBit(EXTI_Line1); //清除EXTI7線路掛起位
}
}
void EXTI9_5_IRQHandler(void)
{
delay_us(10); //延時(shí)10us
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
TIM_SetCounter(TIM4,0);
if(flag4==1)
{
TIM_Cmd(TIM4, ENABLE); //開(kāi)啟時(shí)鐘
}
else
{
TIM_Cmd(TIM4,DISABLE); //關(guān)閉時(shí)鐘
}
while(GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN4)); //等待低電平
TIM_Cmd(TIM4, DISABLE); //定時(shí)器2失能
CHAO_Distance4=TIM_GetCounter(TIM4)*5*34/200.0; //計(jì)算距離&&UltrasonicWave_Distance<150
// if(CHAO_Distance4>0)
// {
// printf("distance4:%f cm",CHAO_Distance4);
// }
EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI7線路掛起位
}
}
/*
* 函數(shù)名:UltrasonicWave_StartMeasure
* 描述 :開(kāi)始測(cè)距,發(fā)送一個(gè)>10us的脈沖,然后測(cè)量返回的高電平時(shí)間
* 輸入 :無(wú)
* 輸出 :無(wú)
*/
void CHAO_ceju1(void)
{
GPIO_SetBits(TRIG_PORT1,TRIG_PIN1); //送>10US的高電平RIG_PORT,TRIG_PIN這兩個(gè)在define中有?
delay_us(20); //延時(shí)20US
GPIO_ResetBits(TRIG_PORT1,TRIG_PIN1);
}
void CHAO_ceju2(void)
{
GPIO_SetBits(TRIG_PORT2,TRIG_PIN2); //送>10US的高電平RIG_PORT,TRIG_PIN這兩個(gè)在define中有?
delay_us(20); //延時(shí)20US
GPIO_ResetBits(ECHO_PORT2,TRIG_PIN2);
}
void CHAO_ceju4(void)
{
GPIO_SetBits(TRIG_PORT1,TRIG_PIN4); //送>10US的高電平RIG_PORT,TRIG_PIN這兩個(gè)在define中有?
delay_us(20); //延時(shí)20US
GPIO_ResetBits(ECHO_PORT1,ECHO_PIN4);
}
//void bijiao(void)
//{
//if( CHAO_Distance1<10)
//{
// LED0=0;
//}
//else
//{
//LED0=1;
//}
//}
//void GenSui_Init(void)
//{
//if( CHAO_Distance1>1&&CHAO_Distance1<10)
//{
// IN1=0;
// IN2=0;
// IN3=0;
// IN4=0;
//}
//else
// if(CHAO_Distance1>=10&&CHAO_Distance1<30)
//{
//// stop();
// IN1=1;
// IN2=0;
// IN3=0;
// IN4=1;
//}
////else
//// if(CHAO_Distance1>=20&&CHAO_Distance1<40)
//// {
////// forward();
//// IN1=1;
//// IN2=0; //左邊電機(jī)
//// IN3=0;
//// IN4=1; //右邊電機(jī)
//// }
////else
////{
//// flagz=1;//左邊
//// flagy=1;//右邊
////}
////if(CHAO_Distance2>0&&CHAO_Distance2<20&&flagz==1)
////{
//////turnreft();
////}
////else
////{
//// flagz=0;//左邊
////}
////if(CHAO_Distance4>0&&CHAO_Distance4<20&&flagy==1)
////{
//////turnleft();
////}
////else
////{
//// flagy=0;//右邊
////}
//}
void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2,USART_IT_RXNE))
{
res= USART_ReceiveData(USART2);
USART_SendData(USART2,res);
if(res==0x08)//開(kāi)啟跟隨
{
flag1=1;
flag2=1;
flag4=1;
}
if(res==0x09)//關(guān)閉跟隨
{
flag1=0;
flag2=0;
flag4=0;
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
if(res==0x01)//前進(jìn)
{
IN1=1;
IN2=0; //左邊電機(jī)
IN3=0;
IN4=1; //右邊電機(jī)
}
if(res==0x02)//后退
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于stm32體感手勢(shì)手環(huán).rar
(2.95 MB, 下載次數(shù): 116)
2017-5-20 21:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
切菜gnd
時(shí)間:
2018-8-12 09:54
贊。。。。
作者:
斯文女
時(shí)間:
2018-8-15 20:50
為什么void USART2_IRQHandler(void)段中的IN1=0,IN2=0之類的語(yǔ)句都是錯(cuò)的
作者:
斯文女
時(shí)間:
2018-8-15 20:52
為什么void USART2_IRQHandler(void)段中IN1=0,IN1=1之類的語(yǔ)句是錯(cuò)誤的
作者:
子小孫
時(shí)間:
2018-8-23 10:25
不是超聲波的,是我下錯(cuò)了么?里面的程序是MPU6050的
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1