stm32F1使用us-100超声波测距
2017-09-27 来源:eefocus
依旧,使用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_t distance = 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);
}
语句末尾要再次启动串口中断监听。
上一篇:STM32定时器单脉冲输出