硬件条件
- HC-SR04超声波模块
- STM2F103RBT6 定时器3CH1通道
涉及知识
单脉冲的产生
本来一开始想使用定时器产生PWM波作为HC-SR04的触发信号的,后来发现测得的距离一直很古怪,后来才发现需要先产生单脉冲,然后等待超声波完成一次完整的收发过程之后再发送第二次脉冲。所以,只需要如下简单的代码就可以产生超声波模块所需要的触发信号:
#define Trigger PAout(5)
//HCSR04.c文件
GPIO_InitTypeDef GPIO_A;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_A.Pin=GPIO_PIN_5;
GPIO_A.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_A.Pull=GPIO_PULLUP;
GPIO_A.Speed=GPIO_SPEED_HIGH;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_GPIO_Init(GPIOA,&GPIO_A);
...
//main.c
Trigger=1;
delay_us(12);
Trigger=0;
定时器输入捕获
当检测到上升沿时,清零定时器此时的CNT值,同时设置定时器CHx通道为下降沿捕获。设定时器的频率为 T c o u n t e r T_{counter} Tcounter,则定时器自加1所需时间为 1 T c o u n t e r \frac{1}{T_{counter}}