stm32f429+超声波传感器HC-SR04 -- 测距
生活随笔
收集整理的这篇文章主要介绍了
stm32f429+超声波传感器HC-SR04 -- 测距
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
工具
1. 开发板stm32f429(f4系列的应该都可以)
2. 超声波传感器,型号为HC-SR04
| VCC | VCC(5V) |
| GND | GND |
| Trig | 推挽普通输出模式 |
| Echo | 上拉输入,需开启外部中断 |
代码实现逻辑:
1. 配置定时器TIM4用于计算Echo高电平信号的时长
void TIM4_Init(u16 arr,u16 psc) // TIM4 rewrite {TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定时器参数初始化//初始化定时器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM4时钟使能 TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //输入捕获会用到TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器4 }2. 配置两个IO给Trig和Echo
1)使能 IO 口时钟,包括使能 SYSCFG 时钟用于外部中断
2)初始化Echo的 IO 口为上拉输入,初始化Trig的 IO 口为上拉推挽普通输出
3)设置 Echo的 IO 口与中断线的映射关系,设置中断线上升沿触发中断模式
4)配置中断优先级分组(NVIC),并使能中断
5)编写中断服务函数
3. 编写函数:使能超声波传感器,测算距离一次
void HCSR04_Start(void) {GPIO_SetBits(GPIOD,GPIO_Pin_0); //将Trig设置为高电平delay_us(12); //持续大于10us触发,触发超声波模块工作GPIO_ResetBits(GPIOD,GPIO_Pin_0); }4. 如何在main中调用
#include "sys.h" #include "delay.h" #include "usart.h" #include "timer.h" #include "hc_sr04.h"int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(180); //初始化延时函数 USART1_init(9600);//初始化串口波特率为9600TIM4_Init(9998,7199); //定时器初始化HCSR04_GPIO_Init(); //超声波传感器初始化while(1){u8 i=0;while(i<10){delay_ms(100); // 超声波工作周期建议在60ms以上,以防止发射信号对回响信号的影响i++;}HCSR04_Start(); // 使能超声波传感器,测算距离一次} }声明:
1. 代码不完全,基于正点原子F4的项目文件编写
2. 此文参照他人的分享(STM32学习笔记——HC—SR04(超声波模块)_精神小火君-CSDN博客_正点原子超声波)/如若侵犯请联系删除
3. 以上代码已在传感器上经过验证没有问题
4. 项目文件上传到github(GitHub - Liqing-Ye/stm32f4-HC-SR04: stm32f4+HC-SR04超声波测距)
总结
以上是生活随笔为你收集整理的stm32f429+超声波传感器HC-SR04 -- 测距的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 怎么用MindManager制作鱼骨图
- 下一篇: Jmeter性能测试之事务控制器的使用