今天操控了超声波测距模块并尝试了关于超声波精度的测量。后来学习了OLED显示屏的一些知识。
首先先说一下超声波测距控制程序中timer.c里面除去相应的串口,定时器,中断等相应的初始化后的一些函数:
float Senor_Using(void)
{
float length=0,sum=0;
u16 tim;
unsigned int i=0;
while(i!=5)
{
PAout(6)=1;
delay_us(20);
PAout(6)=0;
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==RESET);
TIM_Cmd(TIM3,ENABLE);
i+=1;
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==SET);
TIM_Cmd(TIM3,DISABLE);
tim=TIM_GetCounter(TIM3);
length=(tim+overcount*1000)/170.0;
sum=length+sum;
TIM3->CNT=0;
overcount=0;
delay_ms(100);
}
length=sum/5;
return length;
}
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3,TIM_IT_Update)!= RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
overcount++;
}
}


while(i!=5)//表明要执行5次,而后取5次的平均值以增加精确度。
PAout(6)=1;
delay_us(20);
PAout(6)=0;
//发送20us的高电平信号(给Trig一个至少10us的高电平信号)
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==RESET);
TIM_Cmd(TIM3,ENABLE);
i+=1;
//判断IO口A7所连接的Echo是否处于高电平状态是的话开启定时器开始计时,i加1,共执行5次取平均值。
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==SET);
TIM_Cmd(TIM3,DISABLE);
//当IO口A7所连接的Echo是否处于低电平状态关闭定时器,结束计时
length=(tim+overcount1000)/170.0;
sum=length+sum;
//超声波测距模块原理,距离=(高电平时间声速(340m/s))/2 overcount
1000它表明的是昨天博客中提到的那种情况,高电平持续时间超出设定的ARR值之后发生溢出,定时器更新重新计时,所以高电平持续长度为(tim+overcount*1000)。
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3,TIM_IT_Update)!= RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
overcount++;
}
}//在定时器3的中断服务函数中完善了更新中断的情况,当发生TIM3更新中断的时候, overcount++。
当然也别忘了/清除TIMx更新中断标志 。
而后在学习OLED过程中发现了一个还不错的博客,以初学者角度解释了OLED的程序,比较通俗易懂,也加强我对OLED的认知。
https://blog.csdn.net/HouQi02/article/details/51393163

STM32F103关于输入捕获以及控制超声波测距模块的笔记(2)相关推荐

  1. stm32控制超声波测距模块HC-SR04

    引脚:PB15 TRIG,PB0 ECHO: 不同距离,LED对应不良.闪烁.亮状态,并通过串口发送到PC; TIM3定时中断,测出脉宽长度,没有像野火一样使用捕捉功能: 1.HS-SR04模块实物图 ...

  2. Arduino 控制超声波测距模块

    一.实物图 二.例子代码 用到数字2 和3 引脚,还有两个就是vcc GND两个阴脚,用模块连线比较简单 转载于:https://www.cnblogs.com/caoguo/p/4785700.ht ...

  3. STM32用超声波测距模块实现测距

    STM32用超声波测距模块实现测距 通过超声波测距模块可以实现超声波反射型距离测试.市面上的超声波测距模块主要有两种.一种是分体式模块(HC-SR04等),由超生波发射头和接收头组成,一种是一体式模块 ...

  4. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块

    STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...

  5. 使用超声波测距模块控制LED灯

    本文章为你介绍如何使用Arduino开发板和超声波测距模块来控制LED灯的明灭. 所需硬件 -Arduino开发板 -LED -超声波测距模块 下面主要为大家说明一下超声波模块. 超声波传感器通过采用 ...

  6. 【树莓派】raspberry pi控制超声波测距

    目录 一.超声波 1.模块介绍 2.工作原理 二.gettimeofday函数 三.树莓派控制超声波测距 一.超声波 1.模块介绍 简介:   超声波传感器模块上面通常有两个超声波元器件,一个用于发射 ...

  7. Arduino超声波测距模块控制蜂鸣器

    Arduino超声波测距模块控制蜂鸣器 超声波传感器 蜂鸣器 电路连接.接线 源码 超声波传感器 超声波传感器是利用超声波的特性研制而成的传感器.超声波是一种振动频 率高于声波的机械波,由换能晶片在电 ...

  8. STM32F103—有关HC-SR04超声波测距模块的代码

    关于HC-SR04超声波测距模块(Trig和Echo的引脚可以自定义,我用的TRIG是PBout(11) ECHO是PBin(10)) 硬件连接: Vcc :5V输入(最好不要用3.3V输入) Tri ...

  9. JSN-SR04T倒车雷达超声波测距模块

    JSN-SR0T4-2.0 超声波测距模块可提供 20cm-600cm 的非接触式距离感测功能,测距精度可达高到 2mm,采用工业级一体化超声波探头设计,防水型,性能稳定,兼容市场上所有的 MCU 工 ...

最新文章

  1. as 关联 android源码,android studio 2.x以上关联源码
  2. 平衡二叉查找树 AVL 的实现
  3. RxSwift 系列(一)
  4. 1006. 换个格式输出整数 (15)
  5. Linux学习总结(45)——Linux服务器出现卡慢的基本解决方法
  6. LEBERT:基于词汇增强的中文NER模型
  7. 树莓派之安装dlna服务
  8. 菜鸟升级记——模板方法模式
  9. 离散数学主析取及主合取范式
  10. 微前端(single-spa和qiankun)
  11. 十八.国民技术MCU开发之UART模块LIN模式主从通信交互案例
  12. ubuntu中安装软件的方法
  13. FormData数据格式
  14. 个人怎么开发APP?APP开发全流程解析!
  15. 3.9 haas506 2.0开发教程-example-oled
  16. ffmpeg statis vs dev技术选型?
  17. win10上VMware虚拟机设置固定IP地址
  18. 淘宝新手开店怎么做才能破零
  19. 引力波是怎样产生的?
  20. 用Kbuilder制作卡拉OK教程

热门文章

  1. Linux C 字符串函数sprintf()和snprinttf()
  2. 【优化分配】基于遗传算法求解医疗资源分配优化问题附Matlab源码
  3. eclipse中jsp和html文件中文乱码
  4. MSTP和Eth-trunk
  5. mysql怎么设计抽奖表_抽奖系统设计方案
  6. FreeNAS问题杂锦
  7. 华为鸿蒙新机是哪款,【麒麟9000|Mate40不再是绝唱!华为新机曝光,麒麟9000+鸿蒙系统!】...
  8. matlab svmtrain多标签,train_label:训练集的标签,格式要求与svmtrain相同怎么改啊
  9. bind函数失败linux,为什么bind函数返回-1(绑定失败)?
  10. 合并excel不同工作簿同名工作表