一、前期准备
单片机:STM32F103C8T6
开发环境:MDK5.14
库函数:标准库V3.5
JSN-SR04T模块:淘宝有售
二、实验效果
三、驱动原理
此模块分3中模式:
(1)模式一:R27 = open,普通驱动模式;
(2)模式二:R27 = 47K,串口模式,每隔100ms更新一次数据。
(3)模式三:R27 = 120K,串口模式,发0x55。
注意:次模块测试盲区20cm。
串口二发送0x55,并接收模块数据,每隔100ms刷新次数据,串口接收数据之后,做完校验之后算出测试距离并打印出来。
需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。
四、驱动代码
JSN-SR04T.h
#ifndef __JSN_SR04T_H__
#define __JSN_SR04T_H__
#include "stm32f10x.h"
#include "conf.h"
extern void JSN_SR04T_SendStartSignal(void);
extern void JSN_SR04T_DealWithMess(uint8_t *RecData, uint16_t *Distance);
#endif
JSN-SR04T.c
#include "jsn_sr04t.h"
void JSN_SR04T_SendStartSignal(void)
{
USART_Send(USART2, 0x55);
}
void JSN_SR04T_DealWithMess(uint8_t *RecData, uint16_t *Distance)
{
if (SR04T_len == 4)
{
if (RecData[0] == 0xFF)
{
if (RecData[3] == ((0xFF + RecData[1] + RecData[2]) & 0x00FF))
{
*Distance = 0;
*Distance |= RecData[1] << 8;
*Distance |= RecData[2];
}
else
{
*Distance = 0;
}
}
else
{
*Distance = 0;
}
}
else
{
*Distance = 0;
}
memset(RecData, 0, RecDataLen);
}
关键字:JSN-SR04T 超声波模块 模式三 STM32
引用地址:
JSN-SR04T超声波模块驱动(模式三、STM32)
推荐阅读最新更新时间:2024-11-10 19:43
STM32 usb_mem.c和usb_sil.c文件的分析
这两个c文件都还算是很简单的,先讲讲usb_mem.c这个文件。从文件名就能知道跟内存有关,这个文件主要定义了两个函数,一个读双缓冲区PMA的数据PMAToUserBufferCopy(),另一个是写数据到双缓冲区PMA,UserToPMABufferCopy。如果,当你的usb设备接收到了数据,当然数据存放在PMA中了,我们要读出数据就要用到PMAToUserBufferCopy()函数了,如果我们想要发送数据给usb主机,就要将你要发送的数据拷贝到PMA缓冲区中了,这样才能发送出去,原理跟串口类似。 /*************************************************************
[单片机]
stm32 PWM驱动舵机
今天使用stm32控制舵机,调试了许久,总结如下: 注意事项: 1.PWM周期的设定:初值,20000-1,分频=72-1。周期是:72M/72*20000=20ms 频率=50hz; 2.这个型号的舵机应该是5VPWM信号输出。而STM32是0-3.3,引起无法驱动。 更新:原来我上次无法驱动舵机是因为我把舵机的三条线搞错了,大写的尴尬 VCC——– 红 GND——– 黑 DATA——– 白 幸亏我潜意识里吧黑色的当成GND。。。。。。。。不然。。。。 故:以下程序成立。 #include pbdata.h void RCC_Configuration(void); void GPIO_Confi
[单片机]
什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。 窗口看门狗的 上窗口就是配置寄存器WWDG- CFR里设定的W ; 下窗口是固定的0x40; 当窗口看门狗的计数器在上窗口值之外,或是低于下窗口值都会产生复位。 图2 && 上窗口的值可以只有设定,7位二进制数最大只可以设定为127(0x7F),最小又必须大于下窗口的0x40,所以其取值范
[单片机]
嵌入式系统学习——STM32之按键输入
之前写了两篇关于STM32 GPIO的介绍和运用,跑马灯用到了GPIO的推挽输出,但是对于输入还是没有用到,这次就运用一下GPIO的上拉输入。实验还是和以前51做的实验一样,就是判断按键的输入,然后控制LED灯。这次没有直接配置寄存器,而是调用库函数和位操作结合。 注:每一块开发板对应电路都不相同,编写代码需要对应自己的板子,本人两个LED灯对应的GPIO为:GPIOD13和GPIOD14,并且是共阴极。两个按键对应的GPIO为:GPIOC13和GPIOE0,并且共阴极。 首先,LED初始化和上一篇博客中的跑马灯初始化一样,只需拷贝就可以了。 LED初始化函数: #include sys.h
[单片机]
stm32官方SD卡驱动的使用注意事项
使用stm32 CUBE 库所提供的SD卡驱动的朋友们请注意: 1、适用于MMC卡,本人没测试过,mmc卡现在已经是收藏品了,谁还会用呢,so,st的团队求求你们严谨的好不好。 2、SD卡初始化过不去,因为丫在发送CMD0后,接着发送了CMD1(CMD1是mmc卡的独有指令,SD卡是不需要发CMD1的),读写驱动函数也有问题(不分情况的修改了sd卡的块大小,统统设置成了512字节),就因为这个害的本人浪费了3 天的时间,无奈只好自己重写了一遍驱动。so,如果要在项目中使用SD卡,须修改驱动程序。 3、其实好多官方例程都有bug,不要太迷信官方的东西。 总之,官方也有坑,使用须谨慎!
[单片机]
[零基础学习STM32]第四讲:UART通讯实验—控制LED
一、概述 1、UART简介 UART:通用同步/异步串行接收/发送器,由时钟发生器、数据发送器和接收器三大部分组成。UART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。STM32F407IGT6具有6个UART收发器,可使用相应的代码使能后使用。 2、UART特点 全双工操作(相互独立的接收数据和发送数据)。 同步操作时,可主机时钟同步,也可从机时钟同步。 支持8和9位数据位,1或2位停止位的串行数据桢结构。 由硬件支持的奇偶校验位发生和检验。 数据溢出检测。 帧错误检测。 包括错误起始位的检测噪声滤波器和数字低通滤波器。 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、R
[单片机]
STM32 IO 问题
今天调试一块板子出现如下问题: 某口 PB5,用某个芯片的复位工作。 配置如下: #define GPIO_PIN_REST GPIO_Pin_5 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_REST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIOB- BSRR = GPIO_Pin_5 ; jlink调试,观看GPIOB,keil显示是Pin 为1 但是芯片实际测量管脚的电压却是0V。搞定不懂 后面改为:GPIO_Ini
[单片机]
STM32 F7如何满足嵌入式系统更高处理性能需求
意法半导体(ST)日前宣布推出业界首款基于ARM最新Cortex-M7内核的STM32 F7系列微控制器,其性能远超ST之前的32位STM32F4微控制器,通过无缝升级路径可将处理性能和DSP性能提高一倍。 “作为STM32微控制器产品家族的高端产品,STM32 F7使内存和外存的性能达到一个新的水平,给开发人员带来新的创新机会,保证他们不需要再根据存储器性能调整代码。”ST微控制器市场总监Daniel Colonna表示,“而之所以能够在业内率先推出基于Cortex-M7的产品,首先得益于ST与ARM密切的合作关系。其次,ST也与第三方客户保持着广泛的合作,确保他们能够及时得到ARM最新的技术支持并推出新产品。强大的开发
[电源管理]