STM32微控制器综合实训10 基于CAN总线的超声波测距仪设计实验

2023-11-09

实验10 基于CAN总线的超声波测距仪设计实验
利用CAN总线来实现数据的传送。

代码讲解(c8t6)

温度传感器ds18b20

DS18B20_Init

//初始化DS18B20的IO口 DQ 同时检测DS的存在  
//返回1:不存在  
//返回0:存在           
u8 DS18B20_Init(void)  
{
         
  GPIO_InitTypeDef  GPIO_InitStructure;              
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;               //PORTA.8 推挽输出      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  GPIO_Init(GPIOA, &GPIO_InitStructure);      
  
  GPIO_SetBits(GPIOA,GPIO_Pin_8);    //输出1 
       
  DS18B20_Rst();    
  
  return DS18B20_Check();  
  
}  

这段代码只有DS18B20_Rst和DS18B20_Check我们没有见到过,我们先对DS18B20_Rst go to definition

DS18B20_Rst

//复位DS18B20  
void DS18B20_Rst(void)       
{
                              
  GPIO_InitTypeDef  GPIO_InitStructure;      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;               //PORTA.8 推挽输出      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  GPIO_Init(GPIOA, &GPIO_InitStructure);      
  
  GPIO_ResetBits(GPIOA,GPIO_Pin_8);    //输出0       
  delay_us(750);     //拉低750us       
  GPIO_SetBits(GPIOA,GPIO_Pin_8); //输出1      
  delay_us(15);       //15us  
}  

由程序可知,PA8先拉低750us,再拉高15us,为什么这样做?

答:看ds18b20的数据手册知道:
在这里插入图片描述
控制器发送400960us低+1560us高形式的脉冲后,ds18b20会再返回一个60-240us的脉冲。

函数DS18B20_Rst()作用是使控制器发送750us低+15us高形式的脉冲,来初始化DS18B20时序。

那用怎么判断ds18b20返回的脉冲是不是60-240us呢?
对DS18B20_Check go to definition

DS18B20_Check

//等待DS18B20的回应  
//返回1:未检测到DS18B20的存在  
//返回0:存在  
u8 DS18B20_Check(void)       
{
            
  u8 retry=0;      
  GPIO_InitTypeDef  GPIO_InitStructure;      
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;               //PORTA.8 上拉输入      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入        
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        
  while (DS18B20_DQ_IN && retry<200)    
  {
              
    retry++;          
    delay_us(1);      
  };         
  if(retry>=200)//等待200us,还不拉低      
  {
             
    return 1;//直接返回错误      
   }      
  else retry=0;//能进到else,表示ds18b20已经有反应,电平变低      
  while (!DS18B20_DQ_IN && retry<240)      
  {
             
    retry++;          
    delay_us(1);      
  };      
  if(retry>=240)return 1;           
  return 0;  
}

DS18B20_DQ_IN && retry<200表示在ds18b20还没相应,即DS18B20_DQ_IN为1,且未相应时间<200us时,就一直等待ds18b20相应,如果到200us时ds18b20还没有相应,就直接返回错误。

!DS18B20_DQ_IN && retry<240,表示ds18b20有反应时,DS18B20_DQ_IN为0,则!DS18B20_DQ_IN为1,且响应时间不超过240us,返回相应成功,但如果相应时间超过了240us,也直接返回错误。

DS18B20_Get_Temp

//从ds18b20得到温度值  
//精度:0.1C  
//返回值:温度值 (-550~1250)   
short DS18B20_Get_Temp(void)  
{
         
  u8 temp;      
  u8 TL,TH;        
  short tem;      
  DS18B20_Start ();           // ds1820 start convert      
  DS18B20_Rst();      
  DS18B20_Check();           
  DS18B20_Write_Byte(0xcc);   // skip rom      
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32微控制器综合实训10 基于CAN总线的超声波测距仪设计实验 的相关文章

  • Gof23设计模式之原型模式

    1 概述 用一个已经创建的实例作为原型 通过复制该原型对象来创建一个和原型对象相同的新对象 2 结构 原型模式包含一下角色 抽象原型类 规定了具体原型对象必须实现的clone 方法 具体原型类 实现了抽象圆形类的clone 方法 它是可被复
  • ASP.NET开发公众号时微信支付遇到签名错误

    请求返回来xml数据
  • 7-21 口罩发放(标准注释+测试点说明)

    为了抗击来势汹汹的 COVID19 新型冠状病毒 全国各地均启动了各项措施控制疫情发展 其中一个重要的环节是口罩的发放 某市出于给市民发放口罩的需要 推出了一款小程序让市民填写信息 方便工作的开展 小程序收集了各种信息 包括市民的姓名 身份
  • 事件流及事件处理程序总结

    事件流 事件捕获阶段 处于目标阶段 事件冒泡阶段 事件捕获与事件冒泡的区别 如何阻止事件的默认行为 以及如何阻止事件冒泡 事件捕获和事件冒泡的概念是相反的 事件捕获 不具体的节点更早接收到事件 而最具体的节点最后接收到事件 DOM2级事件
  • EndNote在Word中插入文献不能自动生成编号 - 解决方案

    本文出处 新浪博客 小数码植物摄影 之http blog sina com cn s blog 629be3eb0100sih3 html 新浪博客 小数码植物摄影 首页 http blog sina com cn u 1654383595
  • Android Studio中怎样引用图片资源

    随着不断接触Android Studio 越来越发现和Eclipse有着巨大的差别 不管是表面的目录结构 还是内在对各种资源的管理 本篇就来聊聊Android Studio中怎样来显示图片 以及与Eclipse中的差别 在Eclipse中依
  • requests爬虫遇到404怎么办_Python爬虫基础库和实践

    爬虫有三大基础库Requests BeautifulSoup和Lxml 这三大库对于初学者使用频率最高 现在大家一起来看看这基础三大库的使用 Requests库 Requests库的作用就是请求网站获取网页数据 Code res reque
  • C# Modbus Rtu实现

    Modbus Rtu的实现与Modbus Tcp的实现类似 C ModBus Tcp的学习及Master的实现 我们还是需要借用一个开源库NModbus4 在vs中 打开NuGet管理器 安装NModbus4 具体实现 具体实现与之前的Mo
  • 主流大语言模型的技术原理细节

    作者 spring 1 比较 LLaMA ChatGLM Falcon 等大语言模型的细节 tokenizer 位置编码 Layer Normalization 激活函数等 2 大语言模型的分布式训练技术 数据并行 张量模型并行 流水线并行
  • Vue组件(插槽)

    1 插槽属于Vue组件的三个核心之一 其余两个分别是属性和事件 今天主要学习插槽的使用 2 插槽 slot 将子组件和父组件进行组合 可以弥补视图的不足 是组件具有更好的拓展性 组件的封装方式 抽取共性 3 插槽的使用方式 1 vue2 0
  • 解决'Unknown custom element'问题

    报错截图 解决方法 模板少写了一个 然后删除多余的模板就行啦
  • 如何安装mysql5.7包_安装mysql 5.7 最完整版教程

    安装环境 CentOS7 64位 MINI版 安装MySQL5 7 1 配置YUM源 在MySQL官网中下载YUM源rpm安装包 http dev mysql com downloads repo yum 下载mysql源安装包 shell
  • anaconda python3.8目录_Linux系统下Anaconda的安装和使用教程

    一 Anaconda的安装 去官网下载 https www anaconda com products individual 下载到本地后利用FileZilla软件上传到服务器 我这里上传到了 data bioinfosoftware文件夹
  • vcpkg编译第三方库leveldb

    vcpkg编译leveldb 1 安装vcpkg 使用git命令直接pull vcpkg源码 git clone https github com microsoft vcpkg 2 在vcpkg目录执行bootstrap vcpkg ba
  • Android 之 intent内容解析

    文章目录 intent intent 属性 1 Action 匹配规则 Action匹配只要有一个与Intent中携带Action相同即可 2 Category 注意 3 Data 4 Component 5 Type 6 Extras 存
  • DirectShow音视频同步实验报告(2)

    单一视频流 Filter Graph如图2 图2 单一视频流的Filter Graph 注意 紧靠Video Renderer的上一级Filter的Video输出Pin 其GetMediaType函数提供的Media Type的VIDEOI
  • CMake学习之set

    文章目录 一 set关键字 二 变量的使用 一 set关键字 将一个cmake变量设置为给定值 将变量

随机推荐

  • 搭建jupyter notebook,开启线上IDE学习

    一 windows搭建jupyter notebook 在jupyter notebook中利用本地虚拟环境 1 激活本地虚拟环境 activate py36 安装nb conda conda install nb conda 3 在ana
  • 发布一套很有本土特色的闽南语QQ表情

    发布一套很有本土特色的闽南语QQ表情 作为福建本地人 对闽南语在熟悉不过了 平时朗朗上口的俗话 现在演变成活泼可爱有趣的QQ表情咯 大家喜欢的话可以来收藏 底下有QQ表情导入包 直接导入QQ即可使用了
  • 如何安装EasyX图形库

    如何下载 1 打开EasyX官网点我 应该是这样子的 2 点击 下载 EasyX 在图片的右边 找不到算你眼瞎 3 直接打开安装包 4 下一步 来到选择界面 5 点击安装 EasyX文档也可以安装一下 但下面的必须点一个 6 点击关闭 结束
  • 服务器运维基础知识,运维技术必须了解的服务器基础知识

    小影提醒 文章部分内容源于互联网收集整理 不代表影速观点 若有咨询 运维技术必须了解的服务器基础知识 等有关服务器 云主机租用 托管 配置 价格问题 请随时咨询影速科技客服 享受1v1贴心服务 1 双路等于双核么 常听说双路至强XX式服务器
  • Spring Boot单元测试

    目录 什么是单元测试 单元测试的好处 单元测试的实现 断言 修改操作 删除操作 添加数据 返回受影响的行数 返回自增id 什么是单元测试 是指对软件中的最小可测试单元进行检查和验证的过程 单元测试的好处 可以非常简单 直观 快速的测试某一个
  • 模块化 组合化_一流的组合模块系统

    模块化 组合化 这是本系列的第二篇文章 介绍了用于组合的反转控制类型系统 本文讨论了比上一篇文章的 一流过程类型 更通用的 模块类型 系统 注意 某些功能性编程语言也尝试定义一流模块 本文定义的First Class Modules是从反向
  • 前端基础学习之Sass

    一 概念 1 Sass是什么 Sass 英文全称 Syntactically Awesome Stylesheets 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言 Sass
  • AI读天涯神贴----人,应该怎么活

    接着上一期AI读天涯神贴 开悟其实很简单 这期我们来用AI读另外一篇神帖 人 应该怎么活 下面是帖子中的一些节选 老家有句话 叫春天戳一棍 秋天吃一顿 意思是 春天用个棍子在地上捅个窟窿 扔进种子 那秋天就有可能因此吃上一顿的果实 春天 这
  • Prometheus - SSL 证书过期监控

    目录 一 环境 二 部署 Exporter 2 1 配置 blackbox exporter 2 2 配置 Prometheus 2 3 Grafana 监控面板 一 环境 数据采集 Exporter blackbox exporter V
  • Java实现登录[数据库]

    和上篇的随机点名系统一样 都是使用MySQL数据库来实现 因为刚学所以写点简单例子满足下自己 需求分析 1 输入用户名和密码 2 与数据库中的记录进行比较 原理比较 简单 直接贴代码吧 import java sql Connection
  • 黑马点评给店铺类型查询业务添加缓存(List实现)

    代码如下 public Result queryShopTypeList String key CACHE SHOP TYPE KEY List 1 从Redis中查询店铺类型 获取所有 List
  • 红黑树

    1 概念 红黑树是一种近似平衡的二叉搜索树 在每个结点上增加一个存储位表示结点的颜色 可以是Red或Black 通过对任何一条从根到叶子的路径上各个结点着色方式的限制 红黑树确保没有一条路径会比其他路径长出两倍 因而是接近平衡的 2 性质
  • 多项式回归的matlab实现

    一次函数的线性回归 首先我们回顾一下当回归函数为一次函数的情况 存在训练样本矩阵 X 该矩阵大小为m n 其中m为样本数量 n为特征数量 此时回归方程为 其中为系数向量 此时代价函数为 当代价函数取得最小值时 为最优解 对进行求导得到
  • Navicat使用教程:在Navicat Monitor for MySQL/MariaDB中配置实例

    下载Navicat Monitor最新版本 Navicat Monitor是一套安全 简单而且无代理的远程服务器监控工具 它具有强大的功能使你的监控发挥最大效用 受监控的服务器包括 MySQL MariaDB 和 Percona Serve
  • Nvidia RTX A4000 GPU 安装 515驱动记录-Ubuntu22.04

    The record of Nvidia driver installation of Nvidia RTX A4000 in ubuntu22 04 Environment Ubuntu22 04 GPU Nvidia RTX A4000
  • pytorch官方demo(LeNet)——model篇

    前言 以下文章均为学习笔记 目的是加强自己的记忆 同时希望帮助更多的学习者理解视频中的内容 是跟着一位优秀的b站up主霹雳吧啦Wz学习的 附上视频链接 2 1 pytorch官方demo Lenet 哔哩哔哩 bilibili 另外笔记是参
  • 第2章第2节练习题3 使用队列模拟渡口管理

    问题描写叙述 汽车轮渡口 过江渡船每次能载10辆车过江 过江车分为客车和货车类 上渡船有例如以下规定 1 同类车先到先上船 2 客车先于货车上渡船 其每上4辆客车 才同意放上一辆货车 3 若等待客车不足4辆 则以货车取代 4 若无货车等待
  • 利用SimpleDateFormat或者LocalDateTime生成格式为“yyyy-MM-dd HH:mm:ss“的当前时间

    java程序 利用LocalDateTime生成格式为 yyyy MM dd HH mm ss 的当前时间 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyy MM dd
  • CSS3属性之text-overflow:ellipsis

    语法 text overflow clip ellipsis 默认值为clip 不显示省略标记 clip 当前对象内文本溢出时不显示省略标记 而是将溢出部分裁剪 ellipsis 当对象内文本一处时显示省略标记 一 常见的单行文本溢出显示省
  • STM32微控制器综合实训10 基于CAN总线的超声波测距仪设计实验

    实验10 基于CAN总线的超声波测距仪设计实验 利用CAN总线来实现数据的传送 文章目录 代码讲解 c8t6 温度传感器ds18b20 超声波测距 main c中的while CAN通信 代码讲解 zet6 main c 总结 代码讲解 c