stm32F1使用us-100超声波测距
扫描二维码
随时随地手机看文章
依旧,使用CubeMX进行外设配置。
使用电平方式,需要进行两次捕捉,而且发送10us触发脉冲,需要延时。103VBT6的Timer不多,还是UART口方便。
硬件配置:
1)UART波特率设为9600
2)开启NVIC中断
软件:
我使用US-100测量料斗里的颗粒料消耗,项目使用Freertos系统。
1)
在main函数里启用UART2端口监听
HAL_UART_Receive_IT(&huart2,rx_data_sonic,2);
触发模块后,它会返回2个字节的数据,这里直接读2个。
2)
在Task里每10秒触发一次,发送一个字节0x55。任务是20ms运行一次,使用一个计数。
check_interval++;
if(check_interval>=499){
HAL_UART_Transmit(&huart2,&command_sonic,1,1);
check_interval=0;
}
3)
在中断回调函数里做计算。
料斗高度是50厘米,因此限制返回的值。譬如把料斗盖打开,测的几米的数据,扔掉不用。可不必考虑料斗打开的情况。
//超声波数据
if(huart->Instance==USART2){
uint16_tdistance=rx_data_sonic[0]*256+rx_data_sonic[1];
if(Q_SonicDataHandle!=NULL){
if(distance<500){
osMessagePut(Q_SonicDataHandle,(uint32_t)distance,0);
}
}
HAL_UART_Receive_IT(&huart2,rx_data_sonic,2);
}
语句末尾要再次启动串口中断监听。