历史上的今天
今天是:2025年05月08日(星期四)
2019年05月08日 | JSN-SR04T超声波模块驱动(模式一、STM32)
2019-05-08 来源:eefocus
一、前期准备
单片机:STM32F103C8T6
开发环境:MDK5.14
库函数:标准库V3.5
JSN-SR04T模块:淘宝有售

二、实验效果


三、驱动原理
此模块分3中模式:
(1)模式一:R27 = open,普通驱动模式;
(2)模式二:R27 = 47K,串口模式,每隔100ms更新一次数据。
(3)模式三:R27 = 120K,串口模式,发0x55。
注意:次模块测试盲区20cm。
触发信号Tirig维持10Us以上的高电平即可等待Echo的返回,这里是用EXTI检测俩个跳变信号,去打开和关闭定时器,最后一次测量计算结果后清除定时器计时,并等待下一个循环开始。
需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。
四、驱动代码
JSN-SR04T.h
#ifndef __US_020_H__
#define __US_020_H__
#include "stm32f10x.h"
#include "gpio.h"
#include "delay.h"
#define Trig PAout(0)
#define Trig_Pin GPIO_Pin_0
#define Trig_Port GPIOA
#define Trig_CLKLine RCC_APB2Periph_GPIOA
#define Echo PAin(1)
#define Echo_Pin GPIO_Pin_1
#define Echo_Port GPIOA
#define Echo_CLKLine RCC_APB2Periph_GPIOA
extern uint32_t US_Count;
extern void US_020Configuration(void);
extern void US_SendStartSignal(void);
extern float US_DataConversion(uint32_t *count);
#endif
JSN-SR04T.c
#include "US-020.h"
uint32_t US_Count = 0;
void US_020Configuration(void)
{
GPIO_InitTypeDef GPIO;
NVIC_InitTypeDef MyNVIC;
EXTI_InitTypeDef MyEXTI;
//Enable APB2 Bus
RCC_APB2PeriphClockCmd(Trig_CLKLine | Echo_CLKLine, ENABLE);
//Register IO
GPIO.GPIO_Pin = Trig_Pin;
GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(Trig_Port, &GPIO);
Trig = 0;
//Register IO
GPIO.GPIO_Pin = Echo_Pin;
GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(Echo_Port, &GPIO);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级组为1,优先组(可设0~4位)
MyNVIC.NVIC_IRQChannel = EXTI1_IRQn; //设置中断向量号
MyNVIC.NVIC_IRQChannelPreemptionPriority = 0; //设置抢先优先级
MyNVIC.NVIC_IRQChannelSubPriority = 1; //设置响应优先级
MyNVIC.NVIC_IRQChannelCmd = ENABLE; //使能NVIC
NVIC_Init(&MyNVIC);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
MyEXTI.EXTI_Line = EXTI_Line1;
MyEXTI.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
MyEXTI.EXTI_Mode = EXTI_Mode_Interrupt;
MyEXTI.EXTI_LineCmd = ENABLE;
EXTI_Init(&MyEXTI);
}
void US_SendStartSignal(void)
{
Trig = 1;
DelayUs(20);
Trig = 0;
}
float US_DataConversion(uint32_t *count)
{
float result = 0;
result = (float)((float)(*count * 340) / 2000.0);
*count = 0;
return result;
}
void EXTI1_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line1) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line1);
if (Echo == 1)
{
TIM_Cmd(TIM3, ENABLE);
LED = 0;
}
if (Echo == 0)
{
TIM_Cmd(TIM3, DISABLE);
LED = 1;
}
}
}
史海拾趣
|
软件名称:Rimu PCB 1.07 破解补丁 Cracked软件大小:61 KB软件语言:英文软件类别:破解补丁 / 自由软件 / 安装制作 … 查看全部问答> |
|
泰克、安捷伦和力科三款同价位示波器调试速度对比结果,有些参考价值! 今天看到的一则新闻, Hansa|GCR公司在美国德克萨斯州奥斯汀及马萨诸塞州波士顿进行了一次针对泰克、安捷伦和力科三款同价位示波器的用户使用体验调查。 - 安捷伦MSO7000系列- 力科WaveRunner Xi系列- 泰克MSO4000系列 在调试设计时查找欠幅脉冲 ...… 查看全部问答> |
|
SD卡驱动(初始化中)中有二个线程。 //线程1 Initialize SDControllerIstThread() to handle interrupt generated by Host Controller //线程2 Create interrupt thread for card detection 线程2好理解,是检测卡插入的线程。 线程1的功能 ...… 查看全部问答> |
|
华为内部推荐 招聘对象: 04,05年本科及硕士,06年硕士生,07年的应届生不招, 学校要求省重点大学及以上,通信、电子、计算机、经济类、管理类等相关专业毕业。 招聘的是正式“华为员工”,待遇一般不低于07年的 ...… 查看全部问答> |
|
[DIY]二十四小时的感动(古典版I) 自制QS30-1辉光管电子时钟【附百张图】 辉光管是电子管的一种,属于很古老的数码显示器件,在没有LED的年代,显示数字和符号就靠它。这种管子现在应该算古董了,这次DIY用的QS30-1辉光管大部分都是70年代和80年代生产的。在国外,有不 ...… 查看全部问答> |




