超声波模块驱动代码(CS100A芯片)

 CS100A.c

#include "CS100A.h"TIM_HandleTypeDef    TimHandle;uint16_t CS100A_count=0;      //定时器中断中累加计数
float CS100A_distance=0;    //计算超声波测得的距离,单位为cm
float err=15/15.98;                //调整误差系数,由于各种原因会出现误差,这个用于调整误差系数,若不需要调整则设置为1/*//下面是main函数里面的代码初始化部分//超声波引脚初始化CS100A_INIT();//超声波定时器计数初始化CS100A_START();//下面是main函数while(1)里面的超声波获取代码部分printf("%f",CS100A_GET());  //串口打印超声波测距HAL_Delay(500);*//*简易的us级别的延迟函数我的芯片时钟是48Mhz一个时钟周期是1/48M=0.020833us,一个机器周期包含12个时钟周期,所以一个机器周期是12*0.020833=0.25us所以这里i++运行一次是0.25us,1us大概是运行4次
*/
void delay_us(uint16_t num)
{for(uint16_t j=0;j<num;j++){for(uint16_t i=0;i<4;i++){}//根据不同的芯片周期修改i的数值}
}//超声波模块的引脚初始化函数
void CS100A_INIT(void)
{GPIO_InitTypeDef Trig = {.Pin = CS100A_Trig_PIN,.Mode = CS100A_Trig_MODE,};CS100A_Trig_CLK;HAL_GPIO_Init(CS100A_Trig, &Trig);HAL_GPIO_WritePin(CS100A_Trig, CS100A_Trig_PIN,CS100A_Trig_ST);GPIO_InitTypeDef Echo = {.Pin = CS100A_Echo_PIN,.Mode = CS100A_Echo_MODE,};CS100A_Echo_CLK;;HAL_GPIO_Init(CS100A_Echo, &Echo);
}/*给超声波模块发送开始信号将Trig引脚拉高至少10us
*/
void CS100A_START(void)
{CS100A_Trig_SET;  //将Trig引脚拉高delay_us(20);     //延迟大概20usCS100A_Trig_RST;  //将Trig引脚拉低
}/*超声波Echo引脚读取高电平时间的定时器计数初始化这里放的是合宙AIR001芯片的初始化部分自行根据自己的芯片修改我配置的定时器中断周期是10us
*/
void CS100A_TIM_INIT(void)
{TimHandle.Instance = TIM1;                                           /* 选择TIM1 */TimHandle.Init.Period            = 32 - 1;                         /* 自动重装载值 */TimHandle.Init.Prescaler         = 10 - 1;                         /* 预分频为1-1 */TimHandle.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV1;           /* 时钟不分频 */TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;               /* 向上计数 */TimHandle.Init.RepetitionCounter = 1 - 1;                            /* 不重复计数 */TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;   /* 自动重装载寄存器没有缓冲 *//* TIM1初始化 */if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK){while(1);}}//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{CS100A_count++;}//超声波获取数据
float CS100A_GET(void)
{CS100A_START();   //给超声波模块发送开始信号while(CS100A_Erig_READ==0);  //等待高电平信号/* TIM1使能启动,并使能中断 */HAL_TIM_Base_Start_IT(&TimHandle);while(CS100A_Erig_READ==1);  //等待低电平信号/* TIM1使能关闭,并关闭中断 */HAL_TIM_Base_Stop_IT(&TimHandle);CS100A_distance=CS100A_count*TIM_tim*0.034/2*err;CS100A_count=0;   //清除计数return CS100A_distance;
}

  

CS100A.h

#ifndef _CS100A_H
#define _CS100A_H#include "main.h"//定义定时器中断时间,单位是us,这里定义的是100us
#define TIM_tim 10   //定义Trig引脚为推挽输出,初始化为低电平
#define CS100A_Trig       GPIOA                   
#define CS100A_Trig_PIN   GPIO_PIN_5
#define CS100A_Trig_CLK   __HAL_RCC_GPIOA_CLK_ENABLE();
#define	CS100A_Trig_MODE  GPIO_MODE_OUTPUT_PP
#define	CS100A_Trig_ST    0//定义Echo引脚为浮空输入
#define CS100A_Echo       GPIOA
#define CS100A_Echo_PIN   GPIO_PIN_7
#define CS100A_Echo_CLK   __HAL_RCC_GPIOA_CLK_ENABLE();
#define	CS100A_Echo_MODE  GPIO_MODE_INPUT//设置Trig引脚为高电平
#define CS100A_Trig_SET   HAL_GPIO_WritePin(CS100A_Trig, CS100A_Trig_PIN,1) 
//设置Trig引脚为低电平
#define CS100A_Trig_RST   HAL_GPIO_WritePin(CS100A_Trig, CS100A_Trig_PIN,0)  //读取Erig引脚的电平状态
#define CS100A_Erig_READ  HAL_GPIO_ReadPin(CS100A_Echo,CS100A_Echo_PIN)void delay_us(uint16_t num);
void CS100A_INIT(void);
void CS100A_START(void);
void CS100A_TIM_INIT(void);
float CS100A_GET(void);#endif

我最近发了一篇文章里面包含了常用的功能函数以及常用的模块底层驱动函数封装库,大家感兴趣的可以收藏一下,需要的时候就不用到处找代码,一篇就够用,我会持续更新。

        常用模块函数封装库(持续更新中。。。。。。)-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive 数据同步

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

H264码流进行RTP包封装

一.H264基本概念 H.264从框架结构上分为视频编码层&#xff08;VCL&#xff09;和网络抽象层&#xff08;NAL&#xff09;&#xff0c;VCL功能是进行视频编解码&#xff0c;包括运动补偿预测&#xff0c;变换编码和熵编码等功能&#xff1b;NAL用于采用适当的格式对VCL视频数据…

springboot实现文件上传与下载的通用思路模板流程

文件上传 需要将参数设置成为MultipartFile类型 或者我们可以使用spring提供的一个文件内置工具类 FileCopyUtils.copy(InputStream in…

线性方程组计算

一、题型 1&#xff09;给一个线性方程组&#xff0c;问&#xff1a;唯一解&#xff1f;无解&#xff1f;无穷多解&#xff1f; 2&#xff09;在上面的基础上&#xff0c;给一个未知数λ&#xff0c;问&#xff1a;当λ为几时&#xff0c;方程组唯一解&#xff1f;无解&#…

Git命令 本地-远程 简洁步骤

Git命令 本地-远程 简洁步骤 1、基本的操作 1.1、本地初始化、拉取和暂存 git init # 初始化仓库 git remote add origin SSH地址 # 建立远程连接 或者 git clone SSH地址 # 克隆远程仓库 git remote -v # 查看远程仓库地址 git status …

STM32F103RCT6开发板M3单片机教程07-TIMER1CH1输出 PWM做LED呼吸灯

概述 本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; 免费开发板 在谷动谷力社区注册用户&#xff0c;打卡&#xff0c;发帖求助都可以获取积分&#xff0c;当然最主要是发原创应用文档奖励更多积分&#xff0e; (可用积分换取&#xff0c;真的不用钱&…

2D绘图--视口窗口setViewport setWindow

目录 1 setViewport setWindow 2 示例 3 实际应用&#xff08;个人理解&#xff09; 4 总结 1 setViewport setWindow 在Qt中&#xff0c;QPainter的setViewport()方法用于定义绘图区域在窗口坐标系中的可视部分。 QPainter::setWindow() 是 Qt 库中 QPainter 类的一个方法…

数据库创建表并插入数据练习题

一、创建表的要求 创建一个英雄表(hero) 主键 name nickname address groups email telphone 二、 操作步骤 1.登录MySQL [rootlocalhost ~]# systemctl start mysqld [rootlocalhost ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with…

C++ unordered_multimap用法总结

std::unordered_multimap 是 C 标准模板库中的一种无序关联容器&#xff0c;它允许存储相同键的多个副本&#xff0c;并提供高效的插入、查找和删除操作。以下是 std::unordered_multimap 的用法总结&#xff1a; 包含头文件&#xff1a; #include <unordered_map>创建…

NAND系统性能提升常见方案

随着NAND的发展&#xff0c;针对NAND系统性能提升&#xff0c;业内目前主要的做法有以下几种方案&#xff1a; 1.提升总线频率和优化AC时序&#xff1a; 提高NAND闪存接口的工作频率可以显著加快数据传输速度。通过不断改进工艺和技术&#xff0c;缩短了信号稳定时间、降低了延…

工程师职称申报业绩是如何要求的?

无论是初级职称还是中级职称或是高级职称&#xff0c;评审的重要条件之一就是相关的业绩证明。 一、个人业绩&#xff0c;比如你做过哪些与本专业相关的业绩证明&#xff0c;像工程类的职称&#xff0c;你的业绩证明就包括中标通知书、竣工验收报告&#xff0c;或是你参与工程建…

php 的数学常用函数

目录 1.常用列表 2.代码示例 1.常用列表 函数名描述输入输出abs()求绝对值数字绝对值数字ceil()进一法取整浮点数进一取整floor()舍去法求整浮点数直接舍去小数部分fmod()浮点数取余 两个浮点 数,x>y 浮点余数 pow()返回数的n次方基础数n次方乘方值round()浮点数四舍五入…

C++(20):普通函数的参数使用auto声明

C++20进一步解放了对auto的使用,可以在函数的参数中使用auto,auto&, auto&& 并且类型推导的规则与C++11中是一致的 C++(11):auto通过初始化类型推导变量类型_auto如何实现自动推导变量的类型-CSDN博客 #include <vector> #include <iostream> #inc…

区块链是怎么存储数据的?

每个块都是有大小限制的新的数据存储单元&#xff0c;当前数据不到上限&#xff0c;那么都可以添加进块。当前数据达到了上限&#xff0c;那么就得分表/分块&#xff0c;超限的那部分数据就需要等待下个区块存储 存储的数据&#xff1a;和mysql一样&#xff0c;文本数据直接存储…

Python 全栈体系【四阶】(十二)

第四章 机器学习 十五、朴素贝叶斯 朴素贝叶斯是一组功能强大且易于训练的分类器&#xff0c;它使用贝叶斯定理来确定给定一组条件的结果的概率&#xff0c;“朴素”的含义是指所给定的条件都能独立存在和发生。朴素贝叶斯是多用途分类器&#xff0c;能在很多不同的情景下找到…

只有人性才是世间的真相

一、少喝鸡汤&#xff0c;多研究人性&#xff0c;因为只有人性才是世间的真相。 从现在开始&#xff0c;你要反自己的人性&#xff0c;顺应别人的人性去做事。你之所以现在走入了人生和事业的低谷&#xff0c;是因为自己过去的种种错误导致的。 从现在开始&#xff0c;要懂得…

完整的模型验证套路

读取图片 from PIL import Imageimg_path "../Yennefer_of_Vengerberg.jpg" image Image.open(img_path) print(image)转换成灰度图&#xff08;可选&#xff09; image image.convert(L) image.show()转换成RGB格式 image image.convert(RGB)因为png格式是四…

基础数据结构之堆栈

堆栈的定义、入栈、出栈、查询栈顶 #include <stdio.h> #include <stdlib.h>typedef int DataType;// 定义栈节点结构体 struct StackNode;struct StackNode {DataType data; // 节点数据struct StackNode* next; // 指向下一个节点的指针 };// 定…

L1-022 奇偶分家(Java)

给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输出格式&#xff1a; 在一行中先后输出奇数的个数、偶数的个…

SpringMVC ResponseEntity常见使用场景

ResponseEntity 作为 Spring MVC controller层 的 HTTP response&#xff0c;包含 status code, headers, body 这三部分。 正常场景 RestController Slf4j public class SearchController {AutowiredUserService userService;RequestMapping(value "/getAllStudents4&…