
基于STM32F030+FT1610FF1高精度超声波测距模块测距教程及参考程序等开源分享 资料下载见附件,电脑登入 微信公众号:游名开源 硬件说明: 2脚、3脚:需要接4.7到10K上拉电阻到3.3V或5V电源 特性: 极简的设计; 极轻的重量; 极高的测量灵敏度; 极低的消耗电流; 接口ESD保护; 偏捷的安装及使用方式; 有效测量距离3cm-1.5m(其它距离范围可定制); 支持3到5V宽电压,默认采用IO通信方式(默认IO通讯),接口兼容IIC、UART通信、485通信; |
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{
if(TIM3CH2_CAPTURE_STA&0X40)
{
TIM3CH2_CAPTURE_STA|=0X80;
TIM3CH2_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
long long temp=0;
float distance=0.0;
temp=TIM3CH2_CAPTURE_STA&0X3F;
temp*=0XFFFF;
temp+=TIM3CH2_CAPTURE_VAL;
temp=(temp*100)/58;
distance=(float)temp/100;
printf("Goal distence:%.2lf cm\r\n",distance);
__HAL_TIM_DISABLE(&htim3);
}
else
{
TIM3CH2_CAPTURE_STA=0;
TIM3CH2_CAPTURE_VAL=0;
TIM3CH2_CAPTURE_STA|=0X40;
__HAL_TIM_DISABLE(&htim3);
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2, TIM_ICPOLARITY_FALLING);
}
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART2_UART_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
while (1)
{
Measure_Start();
if(TIM3CH2_CAPTURE_STA&0X80)
{
__HAL_TIM_SET_COUNTER(&htim3,0);
TIM_RESET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2);
TIM_SET_CAPTUREPOLARITY(&htim3,TIM_CHANNEL_2,TIM_ICPOLARITY_RISING);
__HAL_TIM_ENABLE(&htim3);
TIM3CH2_CAPTURE_STA=0;
}
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
HAL_Delay(1000);
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if((TIM3CH2_CAPTURE_STA&0X80)==0)
{
if(TIM3CH2_CAPTURE_STA&0X40)
{
if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)
{
TIM3CH2_CAPTURE_STA|=0X80;
TIM3CH2_CAPTURE_VAL=0XFFFF;
}
else TIM3CH2_CAPTURE_STA++;
}
}
}
NUC_LEO-DG-------------- FT1610FF1
PB3------------------------------T/SDA/TX
PB5------------------------------E/SCL/RX
5V/3V----------------------------VCC
GND-----------------------------GND
然后再NVICSetings中选上TIM3 global interrupt,入下图:
全局变量:
uint8_t TIM3CH2_CAPTURE_STA=0;
uint32_t TIM3CH2_CAPTURE_VAL;
int fputc(int ch,FILE *f)
{
while(0==(USART2->ISR&0x40));
USART2->TDR=ch;
return ch;
}
void Measure_Start(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}