hc-sr04c语言程序,STM32F103 HC-SR04模块驱动C程序

#include "stm32f10x.h"

#include "hcsr04.h"

#include "sys.h"

#include "delay.h"

#include "usart.h"

#define Trig GPIO_Pin_4

#define Echo GPIO_Pin_6

float Distance;

void HCSR_Init(void)

{

GPIO_InitTypeDef  GPIO_InitSture;

EXTI_InitTypeDef  EXTI_InitSture;

NVIC_InitTypeDef  NVIC_InitSture;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOE,ENABLE);

//配置IO端口

GPIO_InitSture.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitSture.GPIO_Pin=Trig;                //将PE4于Trig相连

GPIO_InitSture.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitSture);

GPIO_InitSture.GPIO_Mode=GPIO_Mode_IPD;

GPIO_InitSture.GPIO_Pin=Echo;                //将PE6于Echo相连

GPIO_InitSture.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitSture);

//中断和6端口映射一起

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource6);

//外部中断配置

EXTI_InitSture.EXTI_Line=EXTI_Line6;

EXTI_InitSture.EXTI_LineCmd=ENABLE;

EXTI_InitSture.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitSture.EXTI_Trigger=EXTI_Trigger_Rising;

EXTI_Init(&EXTI_InitSture);

//中断优先级管理

NVIC_InitSture.NVIC_IRQChannel=EXTI9_5_IRQn;

NVIC_InitSture.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitSture.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitSture.NVIC_IRQChannelSubPriority=2;

NVIC_Init(&NVIC_InitSture);

}

void EXTI9_5_IRQHandler(void)

{

delay_us(10);

if(EXTI_GetITStatus(EXTI_Line6)!=RESET)

{

TIM_SetCounter(TIM3,0);

TIM_Cmd(TIM3,ENABLE);

while(GPIO_ReadInputDataBit(GPIOE,Echo));  //等待低电平

TIM_Cmd(TIM3,DISABLE);

Distance=TIM_GetCounter(TIM3)*34/2000;

if(Distance>0)

{

printf("Distance:%0.1f cm\r\n",Distance);

}

EXTI_ClearITPendingBit(EXTI_Line6);

}

}

void HCSR_Strat(void)

{

GPIO_SetBits(GPIOE,Trig);   //将Trig设置为高电平

delay_us(20);               //持续大于10us触发,触发超声波模块工作

GPIO_ResetBits(GPIOE,Trig);

}

void TIM3_LJW_Init(void) //TIM3初始化

{

NVIC_InitTypeDef NVIC_Struct;                          //定义NVIC结构体

TIM_TimeBaseInitTypeDef  TIM_Struct;                   //定义TIM结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 ,ENABLE);   //初始化TIM3时钟

TIM_Struct.TIM_ClockDivision=TIM_CKD_DIV1;             //这里用不到 随便写的

TIM_Struct.TIM_CounterMode=TIM_CounterMode_Up;         //向上计数

TIM_Struct.TIM_Period=65535;                            //重装载值4999

// 72M/(7199+1)=10000->0.1ms * (4999+1) = 500ms

// (PSC+1)(ARR+1)/CK_PSC = 时间

TIM_Struct.TIM_Prescaler=71;                         //预分频值7199

TIM_TimeBaseInit(TIM3,&TIM_Struct);                    //初始化TIM3

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);               //使能TIM3的更新中断

NVIC_Struct.NVIC_IRQChannel=TIM3_IRQn ;                //选择TIM3通道

NVIC_Struct.NVIC_IRQChannelCmd=ENABLE;                 //使能通道

NVIC_Struct.NVIC_IRQChannelPreemptionPriority=1;       //抢占优先级

NVIC_Struct.NVIC_IRQChannelSubPriority=1;              //响应优先级

NVIC_Init(&NVIC_Struct);                               //初始化NVIC

//TIM_Cmd(TIM3,ENABLE);                                  //启动定时器

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值