main函数

#include "stm32f10x.h"
#include "./led/bsp_led.h"
#include "./systick/bsp_systick.h"
#include "./beep/bsp_beep.h"
#include "./key/bsp_key.h"
#include "./usart/bsp_usart.h"
#include "./HC_SR04/bsp_hcsr04.h"//软件延时函数
void  Soft_Delay(unsigned int time)
{while(time--);
}int main(void)
{int32_t d = 0;//距离LED_GPIO_Init();Beep_Init();KEY_GPIO_Init();USARTX_Config();HC_SR04_GPIO_Init();printf("HC_SR04测试模块\r\n");while(1){d = HC_SR04_Config();if(d > 0){if(d >= 20 && d<= 4000)//超声波模块测距范围:2cm~400cm{printf("超声波所测距离=%d mm\r\n",d);if(d > 450)//距离大于45mm,灯全灭、蜂鸣器也不叫{Red_Led_OFF;Green_Led_OFF;Blue_Led_OFF;Beep_OFF;}else if(350 <= d && d <= 450)//距离大于35mm小于45mm,亮绿灯,蜂鸣器不叫{Red_Led_OFF;Green_Led_ON;Blue_Led_OFF;Beep_OFF;                  }else if(250 <= d && d <= 350)//距离大于25mm小于35mm,亮红灯,蜂鸣器不叫{Red_Led_ON;Green_Led_OFF;Blue_Led_OFF;Beep_OFF;                  }               else if(150 <= d && d <= 250)//距离大于15mm小于25mm,亮红绿等,蜂鸣器不叫{Red_Led_ON;Green_Led_ON;Blue_Led_OFF;Beep_OFF;                   }   else if(d <= 150)//距离小于15mm,亮红绿蓝等,蜂鸣器叫{Red_Led_ON;Green_Led_ON;Blue_Led_ON;Beep_ON;                   }                   }}Delay_ms(2000);//2s测一次}}

LED

#include "./led/bsp_led.h"//LED_GPIO配置
void LED_GPIO_Init(void)
{GPIO_InitTypeDef   GPIO_InitStructure={0};//开启时钟Led_RCC_CLK_ENABLE(Led_RCC_CLK_PERIPH,ENABLE);//作为普通的IO口,普通推挽输出即可//开漏输出,无法输出高电平,必须以来外围电路拉高IO口GPIO_InitStructure.GPIO_Pin =Red_Led_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(Red_Led_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =Green_Led_GPIO_PIN;GPIO_Init(Green_Led_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =Blue_Led_GPIO_PIN;GPIO_Init(Blue_Led_GPIO_PORT,&GPIO_InitStructure);   //首先先关闭所有LEDRed_Led_OFF;Green_Led_OFF;Blue_Led_OFF;
}#ifndef  __BSP_LED_H
#define  __BSP_LED_H
#include "stm32f10x.h"
#define    Led_RCC_CLK_ENABLE           RCC_APB2PeriphClockCmd
#define    Led_RCC_CLK_PERIPH           RCC_APB2Periph_GPIOB
//红灯宏定义
#define    Red_Led_RCC_CLK_ENABLE       RCC_APB2PeriphClockCmd
#define    Red_Led_RCC_CLK_PERIPH       RCC_APB2Periph_GPIOB
#define    Red_Led_GPIO_PORT            GPIOB
#define    Red_Led_GPIO_PIN             GPIO_Pin_5#define    Red_Led_ON                 GPIO_ResetBits(Red_Led_GPIO_PORT,Red_Led_GPIO_PIN)
#define    Red_Led_OFF                  GPIO_SetBits(Red_Led_GPIO_PORT, Red_Led_GPIO_PIN)
#define    Red_Led_TOGGLE               {Red_Led_GPIO_PORT->ODR ^= Red_Led_GPIO_PIN;}
//绿灯宏定义
#define    Green_Led_RCC_CLK_ENABLE     RCC_APB2PeriphClockCmd
#define    Green_Led_RCC_CLK_PERIPH     RCC_APB2Periph_GPIOB
#define    Green_Led_GPIO_PORT          GPIOB
#define    Green_Led_GPIO_PIN           GPIO_Pin_0#define    Green_Led_ON                   GPIO_ResetBits(Green_Led_GPIO_PORT,Green_Led_GPIO_PIN)
#define    Green_Led_OFF                GPIO_SetBits(Green_Led_GPIO_PORT, Green_Led_GPIO_PIN)
#define    Green_Led_TOGGLE             {Green_Led_GPIO_PORT->ODR ^= Green_Led_GPIO_PIN;}
//蓝灯宏定义
#define    Blue_Led_RCC_CLK_ENABLE      RCC_APB2PeriphClockCmd
#define    Blue_Led_RCC_CLK_PERIPH      RCC_APB2Periph_GPIOB
#define    Blue_Led_GPIO_PORT           GPIOB
#define    Blue_Led_GPIO_PIN            GPIO_Pin_1#define    Blue_Led_ON                    GPIO_ResetBits(Blue_Led_GPIO_PORT,Blue_Led_GPIO_PIN)
#define    Blue_Led_OFF                 GPIO_SetBits(Blue_Led_GPIO_PORT, Blue_Led_GPIO_PIN)
#define    Blue_Led_TOGGLE              {Blue_Led_GPIO_PORT->ODR ^= Blue_Led_GPIO_PIN;}extern void LED_GPIO_Init(void);
#endif

SysTick

#include "./systick/bsp_systick.h"//static __INLINE uint32_t SysTick_Config(uint32_t ticks)
//{
//  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
//
//  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
//  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
//  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
//  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
//                   SysTick_CTRL_TICKINT_Msk   |
//                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
//  return (0);                                                  /* Function successful */
//}//调用SysTick_Config时其中的形参是24位的自减滴答定时器---->>>>>最大值是:2^24-1 == 16777216-1 == 16777215
int32_t Delay_us(uint32_t us)
{uint32_t temp1 = 0;SysTick->CTRL = 0;//先关闭系统滴答定时器,然后再配置SysTick->VAL = 0;//清零SysTick->LOAD = ((us*72)-1);SysTick->CTRL = 0x05;//使能系统滴答定时器并且使用内部时钟72MHz//做一个检测信息while(1){temp1 = SysTick->CTRL;//检测第16位的标志位:Counting位,如果计数值减到0,该为会变为1,读取它会自动变为零if(temp1 & 0x10000){break;}//检测系统滴答定时器是否意外关闭if((temp1 & 0x01) == 0){return -1;}        }SysTick->CTRL = 0;//关闭系统滴答定时器return 0;
}int32_t Delay_ms(uint32_t ms)
{uint32_t temp2 = 0;   while(ms--){SysTick->CTRL = 0;//先关闭系统滴答定时器,然后再配置SysTick->VAL = 0;//清零SysTick->LOAD = (72000-1);//1ms计数一次SysTick->CTRL = 0x05;//使能系统滴答定时器并且使用内部时钟72MHz//做一个检测信息while(1){temp2 = SysTick->CTRL;//检测第16位的标志位:Counting位,如果计数值减到0,该为会变为1,读取它会自动变为零if(temp2 & 0x10000){break;}//检测系统滴答定时器是否意外关闭if((temp2 & 0x01) == 0){return -1;}      }}SysTick->CTRL = 0;//关闭系统滴答定时器return 0;
}#ifndef  __BSP_SYSTICK_H
#define  __BSP_SYSTICK_H
#include "stm32f10x.h"
#include "core_cm3.h"extern int32_t Delay_us(uint32_t us);
extern int32_t Delay_ms(uint32_t ms);
#endif

Beep

#include "./beep/bsp_beep.h"//Beep_Init配置
void Beep_Init(void)
{GPIO_InitTypeDef   GPIO_InitStructure={0};//开启时钟Beep_RCC_CLK_ENABLE(Beep_RCC_CLK_PERIPH,ENABLE);//作为普通的IO口,普通推挽输出即可//开漏输出,无法输出高电平,必须以来外围电路拉高IO口GPIO_InitStructure.GPIO_Pin =Beep_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(Beep_GPIO_PORT,&GPIO_InitStructure);//首先先关闭所有BeepBeep_OFF;
}#ifndef  __BSP_BEEP_H
#define  __BSP_BEEP_H
#include "stm32f10x.h"//有源蜂鸣器宏定义
#define    Beep_RCC_CLK_ENABLE          RCC_APB2PeriphClockCmd
#define    Beep_RCC_CLK_PERIPH          RCC_APB2Periph_GPIOA
#define    Beep_GPIO_PORT               GPIOA
#define    Beep_GPIO_PIN                GPIO_Pin_8#define    Beep_OFF                   GPIO_ResetBits(Beep_GPIO_PORT,Beep_GPIO_PIN)
#define    Beep_ON                  GPIO_SetBits(Beep_GPIO_PORT, Beep_GPIO_PIN)extern void Beep_Init(void);
#endif

Key

#include "./key/bsp_key.h"
#include "./systick/bsp_systick.h"//KEY_GPIO配置
void KEY_GPIO_Init(void)
{GPIO_InitTypeDef   GPIO_InitStructure={0};//开启时钟Key1_RCC_CLK_ENABLE(Key1_RCC_CLK_PERIPH,ENABLE);  Key2_RCC_CLK_ENABLE(Key2_RCC_CLK_PERIPH,ENABLE);//作为普通的IO口,//根据原理图,没按下是低电平,按下是高电平.GPIO_InitStructure.GPIO_Pin = Key1_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(Key1_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = Key2_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(Key2_GPIO_PORT,&GPIO_InitStructure);
}
//按键状态扫描函数
uint8_t Key_State_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Key_Down)//如果第一次读取的是高电平{Delay_ms(20);//消抖if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Key_Down)//如果第二次读取的是高电平,那就是真的高电平{while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == Key_Down);//等按键松开再变化return Key_Down;}else{return Key_Up;}}else{return Key_Up;}
}
#ifndef  __BSP_KEY_H
#define  __BSP_KEY_H
#include "stm32f10x.h"#define    Key_Down     1
#define    Key_Up       0
//Key1宏定义
#define    Key1_RCC_CLK_ENABLE          RCC_APB2PeriphClockCmd
#define    Key1_RCC_CLK_PERIPH          RCC_APB2Periph_GPIOA
#define    Key1_GPIO_PORT               GPIOA
#define    Key1_GPIO_PIN                GPIO_Pin_0//Key2宏定义
#define    Key2_RCC_CLK_ENABLE          RCC_APB2PeriphClockCmd
#define    Key2_RCC_CLK_PERIPH          RCC_APB2Periph_GPIOC
#define    Key2_GPIO_PORT               GPIOC
#define    Key2_GPIO_PIN                GPIO_Pin_13extern void KEY_GPIO_Init(void);
extern uint8_t Key_State_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
#endif

USART

#include "./usart/bsp_usart.h"//USART1配置
static void USARTX_GPIO_Init(void)
{GPIO_InitTypeDef   GPIO_InitStructure = {0};//开启时钟USARTX_TX_RX_RCC_CLK_ENABLE(USARTX_TX_RX_RCC_CLK_PERIPH,ENABLE);    //Tx  复用推挽输出GPIO_InitStructure.GPIO_Pin = USARTX_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(USARTX_TX_GPIO_PORT,&GPIO_InitStructure);//Rx  浮空输入GPIO_InitStructure.GPIO_Pin = USARTX_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(USARTX_RX_GPIO_PORT,&GPIO_InitStructure);
}
static void USARSTX_NVIC_Init(void)
{NVIC_InitTypeDef       NVIC_InitStructure = {0};NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置中断分组为2NVIC_InitStructure.NVIC_IRQChannel = USARTX_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
static void USARTX_Mode_Init(void)
{USART_InitTypeDef  USART_InitStructure = {0};//开启时钟USARTX_RCC_CLK_ENABLE(USARTX_RCC_CLK_PERIPH,ENABLE);   USART_InitStructure.USART_BaudRate = USARTX_Baudrate;//波特率:115200USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无需硬件流,如果需要硬件流,需要加上CTS、RTS位USART_InitStructure.USART_Mode = (USART_Mode_Tx|USART_Mode_Rx);//接收和发送模式USART_InitStructure.USART_Parity = USART_Parity_No;//没有奇偶检验位USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位.USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_Init(USARTX,&USART_InitStructure);USARSTX_NVIC_Init();//使能串口,并使能接收中断USART_ITConfig(USARTX,USART_IT_RXNE,ENABLE);//使能串口USART_Cmd(USARTX,ENABLE);
}void USARTX_Config(void)
{USARTX_GPIO_Init();USARTX_Mode_Init();
}
/*****************  发送一个字节 **********************/
//形参1:哪个串口发送
//形参2:发送的数据是什么,因为我们规定8个数据位,所有定义uint8_t即可
void Usart_SendByte(USART_TypeDef * pUSARTx,uint8_t ch)
{USART_SendData(pUSARTx,ch);while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE) == RESET);
}
/****************** 发送8位的数组 ************************/
//形参1:哪个串口发送
//形参2:发送的数据是什么,因为我们规定8个数据位,所有定义uint8_t即可
//形参3:发送多少个数据
void Usart_SendArray(USART_TypeDef *pUSARTx,uint8_t *array,uint16_t num)
{uint8_t  i = 0;for(i=0 ; i<8 ;i++){Usart_SendByte(pUSARTx,array[i]);            }while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC) == RESET);
}
/*****************  发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{unsigned int k = 0;do{Usart_SendByte(pUSARTx,*(str+k));k++;}while(*(str+k) != '\0');while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC) == RESET);
}
/*****************  发送一个16位数 **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{uint8_t High_Temp = 0,Low_Temp = 0;High_Temp = ((ch&0xff00)>>8);Low_Temp = (ch&0xff);/* 发送高八位 */USART_SendData(pUSARTx,High_Temp);   while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);/* 发送低八位 */USART_SendData(pUSARTx,Low_Temp);    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch,FILE *f)
{USART_SendData(USARTX,(uint8_t)ch);while (USART_GetFlagStatus(USARTX, USART_FLAG_TXE) == RESET);return (ch);
}
///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{int Receive_Date = 0;while (USART_GetFlagStatus(USARTX, USART_FLAG_RXNE) == RESET);Receive_Date = (int)USART_ReceiveData(USARTX);  return (Receive_Date);
}#ifndef  __BSP_USART_H
#define  __BSP_USART_H
#include "stm32f10x.h"
#include <stdio.h>//USART1 宏定义
#define    USARTX_RCC_CLK_ENABLE            RCC_APB2PeriphClockCmd
#define    USARTX_RCC_CLK_PERIPH            RCC_APB2Periph_USART1
#define    USARTX                           USART1
#define    USARTX_Baudrate                  115200
#define    USARTX_IRQn                      USART1_IRQn
#define    USARTX_IRQHandler                USART1_IRQHandler#define    USARTX_TX_RX_RCC_CLK_ENABLE     RCC_APB2PeriphClockCmd
#define    USARTX_TX_RX_RCC_CLK_PERIPH      RCC_APB2Periph_GPIOA
//USART1_TX宏定义
#define    USARTX_TX_RCC_CLK_ENABLE         RCC_APB2PeriphClockCmd
#define    USARTX_TX_RCC_CLK_PERIPH         RCC_APB2Periph_GPIOA
#define    USARTX_TX_GPIO_PORT              GPIOA
#define    USARTX_TX_GPIO_PIN               GPIO_Pin_9//USART1_RX宏定义
#define    USARTX_RX_RCC_CLK_ENABLE         RCC_APB2PeriphClockCmd
#define    USARTX_RX_RCC_CLK_PERIPH         RCC_APB2Periph_GPIOA
#define    USARTX_RX_GPIO_PORT              GPIOA
#define    USARTX_RX_GPIO_PIN               GPIO_Pin_10extern void USARTX_Config(void);
extern void Usart_SendByte(USART_TypeDef * pUSARTx,uint8_t ch);
extern void Usart_SendArray(USART_TypeDef *pUSARTx,uint8_t *array,uint16_t num);
extern void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
extern void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);
extern int fputc(int ch,FILE *f);
extern int fgetc(FILE *f);
#endif

HC_SR04

#include "./HC_SR04/bsp_hcsr04.h"
#include "./systick/bsp_systick.h"
/************* 超声波模块,工作电压是:DC 5V **********/
//超声波模块有:触发信号接口,回响信号接口
//我们利用开发板的PB6接触发信号接口、PB7接回响信号接口(这个接口随便选)
//HC_SR04配置
void HC_SR04_GPIO_Init(void)
{GPIO_InitTypeDef   GPIO_InitStructure={0};//开启时钟HC_SR04_RCC_CLK_ENABLE(HC_SR04_CLK_PERIPH,ENABLE);//作为普通的IO口,普通推挽输出即可GPIO_InitStructure.GPIO_Pin = HC_SR04_TRIG_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(HC_SR04_TRIG_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = HC_SR04_ECHO_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(HC_SR04_ECHO_GPIO_PORT,&GPIO_InitStructure);//默认触发信号为低电平,拉低HC_SR04_TRIG_State_Low;
}
//HC_SR04的时序图配置
int32_t HC_SR04_Config(void)
{uint32_t time = 0;//延时次数int32_t Distance = 0;//距离//拉高触发信号,准备开始HC_SR04_TRIG_State_High;//10usDelay_us(20);HC_SR04_TRIG_State_Low;//如果此时一直检测不到高电平,我们还是做个超时处理比较好while(HC_SR04_ECHO_ReadState == HC_SR04_ECHO_LOW){time++;Delay_us(1);if(time >= 1000000){return -1;}}//此时,模块内部会自动 循环发出8个4KHz的脉冲.//为了检测发送完毕,我们只需要检测输出回响信号是否为高电平//检测回响信号是否为高电平time = 0;while(HC_SR04_ECHO_ReadState == HC_SR04_ECHO_HIGH){//距离 = 高电平时间*声速(340m/s)/2//340m=340000mm --->>> 1s=10^6us//而HC_SR04模块测距的误差是3mm,也就是如果我测到距离是9.7~10.3,系统均认为是10//那3mm距离,需要多久时间tus?//则有公式:340 000mm    对应于 10^6 us//        3mm                  tus// ---》》》 t = 10^6 * 3 / 340 000 ≈ 8.8us = 9us//意味着,如果我延时9us,就代表距离是3mm,那我们看有几个9us,就可以知道距离了time++;Delay_us(9);//如果一直高电平,那也有问题if(time >= 1000000){return -2;}}time = time/2;//因为time属于发出信号到收到信号的总时间,距离的时间是总的一半Distance = time*3;//时间us乘以距离3mmreturn (Distance);
}#ifndef  __BSP_HCSR04_H
#define  __BSP_HCSR04_H
#include "stm32f10x.h"
#define    HC_SR04_RCC_CLK_ENABLE       RCC_APB2PeriphClockCmd
#define    HC_SR04_CLK_PERIPH           RCC_APB2Periph_GPIOB
//触发控制信号TRIG宏定义
#define    HC_SR04_TRIG_RCC_CLK_ENABLE      RCC_APB2PeriphClockCmd
#define    HC_SR04_TRIG_RCC_CLK_PERIPH      RCC_APB2Periph_GPIOB
#define    HC_SR04_TRIG_GPIO_PORT           GPIOB
#define    HC_SR04_TRIG_GPIO_PIN            GPIO_Pin_6#define    HC_SR04_TRIG_State_Low         GPIO_ResetBits(HC_SR04_TRIG_GPIO_PORT,HC_SR04_TRIG_GPIO_PIN)
#define    HC_SR04_TRIG_State_High          GPIO_SetBits(HC_SR04_TRIG_GPIO_PORT,HC_SR04_TRIG_GPIO_PIN)//回响信号ECHO宏定义
#define    HC_SR04_ECHO_RCC_CLK_ENABLE      RCC_APB2PeriphClockCmd
#define    HC_SR04_ECHO_RCC_CLK_PERIPH      RCC_APB2Periph_GPIOB
#define    HC_SR04_ECHO_GPIO_PORT           GPIOB
#define    HC_SR04_ECHO_GPIO_PIN            GPIO_Pin_7#define    HC_SR04_ECHO_ReadState         GPIO_ReadInputDataBit(HC_SR04_ECHO_GPIO_PORT,HC_SR04_ECHO_GPIO_PIN)#define    HC_SR04_ECHO_HIGH     1
#define    HC_SR04_ECHO_LOW         0extern void HC_SR04_GPIO_Init(void);
extern int32_t HC_SR04_Config(void);
#endif

04.HC_SR04超声波测距相关推荐

  1. STM32学习笔记4——HC_SR04超声波测距模块的调试记录

    项目场景: STM32F103单片机和HC_SR04超声波测距模块测量距离. 其中HC_SR04模块采用5V供电. 问题描述: 代码编写完成以后,HC_SR04超声波测距模块传递模块返回来的高电平一直 ...

  2. 基于DE2 115开发板驱动HC_SR04超声波测距模块【附源码】

    目录 1. 实验平台与目的 2. 实验要求 3. 实验原理 3.1. 理论原理 3.2. 硬件模块时序图 4. 系统架构设计 5. 模块说明 5.1. hc_sr_driver端口信号列表 5.2. ...

  3. 基于STM32F103ZET6 HC_SR04超声波测距模块

    这是最后的实验现象,改变不同的角度即可测得距离 板子 PZ6806L 超声波模块 HC_SR04 HC_SR04模块讲解 通过该超声波模块说明书,可明白供电需VCC 5V  还需GND  ECHO(回 ...

  4. stm32之蓝牙无线超声波测距

    将以前做过的蓝牙和超声波结合就得到蓝牙无线超声波测距 通过hc05蓝牙模块使手机和stm32开发板能互相发送字符串--DMA&空闲中断 stm32f103之HC_SR04超声波测距 在正点原子 ...

  5. 超声波测距模块HC_SR04(基于STM32) 工作原理/代码

    文章目录 产品说明 产品特点 基本工作原理 实物图 电气参数 时序图 使用指导,代码配置 明确IO口,对高低电平进行宏 中断处理 模块功能函数 测距平衡修复 产品说明 产品特点 HC-SR04超声波测 ...

  6. US-100超声波测距

    最近在做物联网实训,智能停车场项目用到了US-100超声波传感器,这里给大家介绍一下US-100传感器的使用. 1.介绍 US-100超声波测距模块可实现2cm ~ 4.5m的非接触测距功能,拥有2. ...

  7. STM32CubeIDE 利用LL库 SysTick简单实现hcsr04超声波测距

    一.超声波测距模块简介(网络摘取) HC-sr04是一款典型的超声波测距模块,升级版的程序和04的差别不大,只是测量范围和精度有所不同. 它是如何工作的? 超声波传感器使用声纳来确定到物体的距离.以下 ...

  8. 基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距

    系列文章目录 一.基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 二.基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 三.实战 ...

  9. 基于STM32F103C8T6的超声波测距应用

    #一.超声波HC_SR04简介 #二.超声波工作原理 #三.超声波测距步骤 #四.硬件接线 #五.项目代码 一.超声波HC_SR04简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个 ...

最新文章

  1. U盘安装 CentOS 7
  2. golang 获取两个时间 相差多少 小时
  3. NoSQL还是SQL?这一篇讲清楚
  4. 一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)
  5. P2178-[NOI2015]品酒大会【SA,并查集】
  6. Nginx的配置中与流量分发相关的配置规范:
  7. python并发处理机制_Python并发编程—同步互斥
  8. [区块链] 带你进入Bitcoin开发 - 环境搭建
  9. Emacs进阶之选择当前word/line
  10. 后端服务慢成狗?试试这 7 招!
  11. VMware5.5-VMware补丁程序VUM
  12. 程序员学习资料分享---爱分享的程序员(新浪微博)
  13. Python在已知参数方程情况下绘制三维曲线
  14. 2022山东省安全员C证操作证考试题及答案
  15. Win7网络修复,winsock/tcpip
  16. 全面、详细、通俗易懂的C语言语法和标准库
  17. 自己对PID一些学习总结
  18. 浅谈SEO的优化问题
  19. 2022最全最细软件测试工程师的职业规划和职业发展【入门篇】
  20. idea 设置黑色或白色背景以及图片背景

热门文章

  1. 已知数据表A中每个元素距其最终位置不远,为节省时间排序,应采用什么方法排序?
  2. web应用的log4j配置
  3. 小学奥数思维训练题(二)
  4. 基于MATLAB/Simulink的电力电子电路仿真技术——单相桥式整流电路
  5. 用户输入行数和列数,之后在控制台打印出用户输入行数和列数的星星
  6. MATLAB和SIMULINK硬件支持包安装的问题总结
  7. 推荐一款安卓软件:爱家定位,及时定位知道老人和小孩的位置防走失
  8. RTSP协议视频智能分析平台EasyNVR登录及页面的加密优化方案介绍
  9. Xilinx Vitis 2020.1里面运行C程序时提示找不到microblaze_0
  10. 【操作系统】操作系统的主要任务