分享一篇我刚刚弄完的一个超声波模块的学习
超声波模块的介绍:
1.单片机的一个IO口发送高电平的信号给Trig,信号时间要大于10us
2.然后模块的内部会发送方波
3.然后Echo会给单片机的IO口发送高电平,这个高电平持续的时间是超声波模块从碰到物体再返回的时间
模块的连接问题
我使用的是CH340G模块与电脑进行通信
编程思路:
1、先需要去配置定时器(基本定时器也可以,我用的是TIM2),还有串口的配置,还有延时函数的配置(推荐大家使用systick定时器)因为比较精准
2、基本的配置好了下面就要去写程序了
先随便定义两个IO口,连接Trig的IO口配置要推挽输出,连接Echo的IO口要浮空输入。
3、我看好多大神写的程序都是给Trig一个超过10us的高电平的时候进行了位操作和51很像,是定义在了sys.h这个头文件里。其实这个位操作在keil5中我没有看到有sys.h这个头文件,其实没有咱们也可以用STM32中的库函数去代替
4、给Trig发送高电平可以直接用GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);函数
5、检测Echo传给IO口的高电平时使用
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);函数
这个函数的说明是读取他输入的这个位的值
6、然后给Trig高电平超过10us然后在置低,然后等待Echo连接的IO口为高电平的时候开始打开定时器,开始计数,等待Echo连接的IO口为低电平的时候在关闭定时器,时间的确定就需要去定义一个全局变量msHcCount来记录定时器溢出的次数。定时器时间的计算是在你配置好了重装在计数器的值和时钟的分频以后 定时器记录的总时间=中断溢出次数*(时钟分频+1)/系统时钟*(重装载计数器的值+1)+一个库函数uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);这个库函数是记录的时间是当不满足溢出一次次数的时候剩余的值(因为如果假设你设置的重装载寄存器的值是999,到990的时候如果此时信号高电平停止,那么这个时间你就不知道是多少了,因为他不满足定时器一次的溢出情况,就需要这个函数来把剩余的时间算出来)
时间计算和好了以后,为低电平关闭定时器,然后时间有了你就可以通过公式算出距离了。
程序我下一篇会发
来源:CSDN
作者:weixin_45749794
链接:https://blog.csdn.net/weixin_45749794/article/details/104628574