STM32超声波测距程序

来源:互联网 发布:网络本科学历可以考研 编辑:程序博客网 时间:2024/04/28 01:54

超声波测距模块:HCSR-04
采用定时器及外部中断方式

/*******************************************************************************    超声波测距   测试平台:STM32F103ZET6最小系统  引脚连接:TRIG--PC0   ECHO--PC1*******************************************************************************/#include "sonar_hcsr04.h"#include "systime.h"#define SONAR_PORT  GPIOC#define TRIG_PIN    GPIO_Pin_0#define ECHO_PIN    GPIO_Pin_1static volatile uint32_t measurement;void hcsr04Init(void){    GPIO_InitTypeDef GPIO_InitStructure;        EXTI_InitTypeDef EXTI_InitStructure;    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);    GPIO_InitStructure.GPIO_Pin = TRIG_PIN;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    GPIO_Init(SONAR_PORT, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = ECHO_PIN;                       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;             GPIO_Init(SONAR_PORT, &GPIO_InitStructure);     GPIO_ResetBits(SONAR_PORT, ECHO_PIN);    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource1);  // 中断线以及中断初始化配置    EXTI_ClearITPendingBit(EXTI_Line1);    EXTI_InitStructure.EXTI_Line = EXTI_Line1;    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;    EXTI_InitStructure.EXTI_LineCmd = ENABLE;    EXTI_Init(&EXTI_InitStructure);         /* Enable TIM5 clock */    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);    /* TIME5 base configuration */    TIM_TimeBaseInitStructure.TIM_Period = 0xFFFF;                   //      TIM_TimeBaseInitStructure.TIM_Prescaler = 72-1;                  // 设置预分频,F=72MHz/72=1MHz   T=1us    TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;                 // 设置时钟分频系数,不分频    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  // 向上计数模式    TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStructure);              // 初始化TIME5    TIM_Cmd(TIM5, DISABLE); }/** * 发出测试信号 */void hcsr04StartRanging(void){    GPIO_SetBits(SONAR_PORT, TRIG_PIN);    delay_us(20);   //  The width of trig signal must be greater than 10us    GPIO_ResetBits(SONAR_PORT, TRIG_PIN);}/** * 根据公式计算距离  * @return distance units:cm  */float hcsr04GetDistance(void){    // distance = measurement/2/1000*340 = measurement/59 (cm)  measurement-units:us    float distance = measurement / 58.8;   // measurement-units:us    return distance;}static void ECHO_EXTI_IRQHandler(void){    if (EXTI_GetITStatus(EXTI_Line1) != RESET) {        if (GPIO_ReadInputDataBit(SONAR_PORT, ECHO_PIN) != 0) {  // 等待高电平回波            TIM_Cmd(TIM5, ENABLE);          } else {            TIM_Cmd(TIM5, DISABLE);              measurement = TIM_GetCounter(TIM5);            TIM_SetCounter(TIM5, 0);         }    }    EXTI_ClearITPendingBit(EXTI_Line1);}void EXTI1_IRQHandler(void){    ECHO_EXTI_IRQHandler();}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 公司因担保被起诉怎么办 借公司钱被起诉怎么办 qq群管理员满了怎么办 微信公众号搜索不到怎么办 微信名字改不了怎么办 微信号第一次限制登录怎么办 微信第一次限制登录怎么办 老板不回我微信怎么办 微信号换手机号了怎么办 电话被对方拉黑怎么办 微信被好友拉黑了怎么办 微信收藏删了怎么办 如果忘记支付宝登录手机号码怎么办 支付宝登录密码忘记了怎么办 支付宝账户名忘记了怎么办 搜索qq号搜不到怎么办 微信号手机号码换了怎么办 起诉以后没有被告人住址怎么办 农村老人走丢了怎么办 读在职博士工作单位不支持怎么办 两证合一后国税怎么办 杭州的发票丢了怎么办 小车登记证丢了怎么办 个体户地税逾期未申报怎么办 公司社保本丢了怎么办 社保红本子掉了怎么办 三证合一后逾期怎么办 个体执照没办国税地税怎么办 丰巢APP注册没工牌号怎么办 农业银行k宝证书过期怎么办 个体户网上申报税没定期怎么办 遇到不给开票的商户怎么办 奶茶店电脑下单怎么办 个体户营业执照注销怎么办清税业务 注册公司没有办公地点怎么办 变更莒业执照法人怎么办手续 欠了几十万贷款怎么办 杭州公司跨区迁址怎么办 公司同市内跨区迁址怎么办 合同写错了字怎么办 农行卡转工行卡怎么办