STM32-HAL库,超声波、舵机模块

超声波模块-HC-SR04

在这里插入图片描述

CubeMX配置

配置两个IO口,一个输入模式做为信号接收(ECHO),一个推挽输出做为信号发射(TRIG)
在这里插入图片描述
开启一个基本定时器,用于定时,溢出时间为50ms
在这里插入图片描述

驱动代码

u_ultrasonic.h

#ifndef _U_ULTRASONIC_H_
#define _U_ULTRASONIC_H_

#include "main.h"

float Get_Distance(TIM_HandleTypeDef* htim);		//超声波测距

#endif	//_U_ULTRASONIC_H_

u_ultrasonic.c

//返回值为距离,单位为cm
// 参数为定时器句柄,可自由选择空闲的定时器
float Get_Distance(TIM_HandleTypeDef *htim)   // 超声波使用到的定时器。
{
    unsigned int x1,x2; //接收端高电平起始、结束时定时器的计数值
    float Distance;     //定义距离
    htim->Instance->CNT = 0;  //清空定时器计数值
    HAL_GPIO_WritePin(TRIG_GPIO_Port,TRIG_Pin,GPIO_PIN_RESET);  
    HAL_GPIO_WritePin(TRIG_GPIO_Port,TRIG_Pin,GPIO_PIN_SET);    //开始测距,将TRIG拉高
    HAL_Delay(1);                                                //保持高电平10us以上
    HAL_GPIO_WritePin(TRIG_GPIO_Port,TRIG_Pin,GPIO_PIN_RESET);   //将TRIG拉低
    while(HAL_GPIO_ReadPin(ECHO_GPIO_Port,ECHO_Pin) == 0);      //等待ECHO的高电平起始时间
    x1 = htim->Instance->CNT;
    while(HAL_GPIO_ReadPin(ECHO_GPIO_Port,ECHO_Pin) == 1);      //记录ECHO高电平结束时间
    x2 =  htim->Instance->CNT;                        
    htim->Instance->CNT = 0;                          //        
    Distance = (x2-x1)*0.017 ;                                  //计算距离,单位为cm
    return Distance;
}

main

PrintfDebug()函数的使用方法在之前的文章里有介绍:https://blog.csdn.net/weixin_60301126/article/details/131327438

int main(void)
{
  float Distance;

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();

  HAL_TIM_Base_Start(&htim6);
  while (1)
  {
      Distance = Get_Distance(&htim6);
      PrintfDebug("distance = %0.1fcm\r\n",Distance);	//串口调试函数
      HAL_Delay(400);
  }
}

舵机模块-DS3120

与那种蓝色的小舵机一样使用,黑色线接GND,红色线接+V5,黄色线接单片机IO口。
这种舵机的功耗要比蓝色小舵机的高很多,电源部分如果做的不是很好尽量不要让DS3120转动的太频繁。
在这里插入图片描述

CubeMX配置

开启一个溢出时间为20ms的PWM
在这里插入图片描述
在这里插入图片描述

驱动代码

占空比为2.5%旋转置0度,占空比每增加2.5%旋转角度增加45度

int main()
{
	//.......
	HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1);

	Servo(15); //旋转90度
	while(1)
	{
		
	}
}

void Servo(uint8_t angle) //舵机转向 5 10 15 20 25
{  
  __HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, angle);
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值