目录
最后,就这样给程序下载到板子里面,通过Dubeg查看一下距离 变量就可以了,相关工程已经上传,也可以问我要,怎么方便怎么来吧! !!!
超声波传感器实物图
1、CUbeMX配置
第一步:打开CUbeMX
第二步:选择所需要的芯片
第三步:配置下载为SW
第四步:配置外部时钟
第五步:配置时钟树
第六步:配置定时器
第七步:配置定时器中断
第八步: 配置GPIO引脚
PB10配置
PB11配置
第九步:配置工程(可有可无)
第十步:给工程起名字。然后生成
2、代码编写
第一步:打开生成的工程
第二步:编写计时代码
第二步:编写采集代码
void Delay_us(unsigned long i)
{
unsigned long j;
for(i;i>0;i--)
{
for(j=27;j>0;j--);
}
}
uint32_t Distance_Calculate(uint32_t count)//传入时间单位100us
{
uint32_t Distance = 0;
Distance = (uint32_t)(((float)count *17)/100);//距离单位cm,声速340M/S,时间*速度/2=距离
return Distance;
}
uint32_t Distance;//距离单位cm
uint32_t Timcounter;
uint32_t HalTime1,HalTime2;
extern volatile uint32_t TimeCounter;
/*超声波1,采集数据函数*/
void SR_04_1(){
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,GPIO_PIN_RESET);//预先拉低Trig引脚
HAL_Delay(5);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,GPIO_PIN_SET);//拉高Trig引脚
Delay_us(20);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10,GPIO_PIN_RESET);//拉低Trig引脚
Delay_us(20);
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == 0);//读取PA1脉冲值
HalTime1= TimeCounter;
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == 1);
if(TimeCounter>HalTime1)
{
HalTime2 = TimeCounter-HalTime1;
if(HalTime2<0x300)
{
Distance = Distance_Calculate(HalTime2);//计算距离值,单位cm
}
}
}
第三步:编写main函数代码
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
/*启动定时器3*/
if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK)
{
while(1);
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/*超声波采集函数*/
SR_04_1();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
第四步:编译没有问题
最后,就这样给程序下载到板子里面,通过Dubeg查看一下距离 变量就可以了,相关工程已经上传,也可以问我要,怎么方便怎么来吧! !!!