关于超声波测量距离的技术细节:

本文介绍了五个STM32任务,包括超声波测量距离的TIM3/TIM2输入捕获技术,以及ESP8266的联网任务,涉及优先级管理、堆栈分配和使用MQTT协议进行数据传输。
摘要由CSDN通过智能技术生成

一共有5个任务

任务1:CS100A_task1 靠近检测 优先级7 堆栈分配512(*4)字节

任务2:CS100A_task2 溢出检测 优先级7 堆栈分配512(*4)字节

任务3:Motor_task 盖子打开关闭 优先级10 堆栈分配256(*4)字节

任务4:YD5010_task 风扇转动 优先级11 堆栈分配256(*4)字节

任务5:ESP8266_task 联网任务 优先级10 堆栈分配256(*4)字节

关于超声波测量距离的技术细节:

使用TIM3/TIM2输入捕获功能完成靠近检测与溢出检测

我们主动给出Triq信号,等待超声波测完距离后的回响时间echo。那么我们需要做的就是将这个方波echo高电平的时间给他测量出来。简单来说,就是我们要测量一个方波输入信号的高电平持续时间delaytime。

下面这个段不用看,没什么用,主要是分析我写的代码

使用stm32自带的定时器输入捕获的功能。我们将echo的输入,通过直连和交叉连接的方式,将通道二的输入信号变成两路进去,直连下降沿触发,交叉沿上升沿触发。原先这个功能是用来同时测量PWM输入的频率与占空比。好吧但实际上我们也没用到这个功能。

我们需要的上升沿触发,当上升沿触发我们主动开启一个捕获中断后进行,在中断函数中实现立即设置下降沿,静静等待下一次下降沿触发捕获中断。上升沿计算一个Atime(us),下降沿记录一个Btime(us),两者之间的差值就是echo高电平的持续时间。

使用从模式自动将自身的计数器CNT清零,顺序是先捕获CNT的值到CCR中,再将CNT清零重新计数。当CRR计数N达到我们设定的最大值ARR的时候,CRR清0产生更新中断,update_count++。

找到中断号后,进入中断服务函数,我们需要用中断临界区将内部代码包含住。保护代码段不会被打断。

捕获中断测量的原理:用stm32自己的fc,去测量方波的持续长度。N/fc。

OLED显示公式(将距离拆成小数和整数部分):

关于联网技术细节:

订阅主题:阿里云发布主题后,接收RX中断数据,串口中断(RX读中断)服务函数GPIOA_Pin_9:保存到咋们定义的REC字符数组当中。

发布主题:创建任务定时发布主题,以便阿里云获取数据

这个数据的格式是什么样子的呢?我们的消息传输协议是MQTT协议,使用 TCP/IP 提供网络连接。简单来说就是esp作为一个客户端,连接到wifi后呢,通过这wifi去连接到外网阿里云物联网平台。连接好之后需要通信传数据。遵循这个协议传输数据。简单说MQTT就是一个主题,订阅者获取主题消息,发布者放置消息再主题中。

那么我们需要阿里云平台和esp都能作为发布者和订阅者,就需要两个主题。一个主题是阿里云发布消息操作stm32,一个主题是阿里云提取stm32消息。

我们的esp烧写了透传,也就是esp负责不对数据进行包装修改的串口传输(原封不动)。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值