基于Nucleo-F031的激光测距仪 Nucleo-F031麻雀虽小,五脏俱全。用它来驱动ST的VL53L1X激光测距传感器,是一个经济实用的方案。
本方案采用RS232串口通讯方式来驱动VL53L1X。有关VL53L1X的详细资料请参考ST官方:https://www.stmcu.com.cn/Article ... ode/news/art_id/707硬件连接:
使用Nucleo-F031的PA0、PA3、PA4来驱动OLED显示屏,PA9、PA10是USART1的TXD、RXD。串口波特率9600,8为数据位,1位停止位,无校验。中断方式接收。CubeMX的配置:
运行结果
主要代码:- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- LCD_Init();
- __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
- __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
- __HAL_UART_CLEAR_IDLEFLAG(&huart1);
- Tx_buf[0]=0xa5;
- Tx_buf[1]=0x45;
- Tx_buf[2]=0xea;
- HAL_UART_Transmit(&huart1,(uint8_t *)Tx_buf,3,0xffff);
- LCD_Print(20,0,"Nucleo-F031",TYPE16X16,TYPE8X16);
- LCD_Print(30,24,"激光测距",TYPE16X16,TYPE8X16);
- Disp_buf[2]='.';
- Disp_buf[4]=' ';
- Disp_buf[5]='C';
- Disp_buf[6]='m';
- Disp_buf[7]='\0';
- while (1)
- {
- bcdcode=HEX2BCD(Lenght);
- Disp_buf[0]=bcdcode%1000/100+0x30;
- Disp_buf[1]=bcdcode%100/10+0x30;
- Disp_buf[3]=bcdcode%10+0x30;
- LCD_Print(36,48,Disp_buf,TYPE16X16,TYPE8X16);
- HAL_Delay(200);
- }
- }
复制代码 中断函数:- void USART1_IRQHandler(void)
- {
- if((USART1->ISR & USART_ISR_RXNE) != RESET)
- {
- Rx_buf[RxCount++]=USART1->RDR;
- }
- if(RxCount==8)
- {
- Lenght=Rx_buf[4]<<8;
- Lenght |=Rx_buf[5];
- RxCount=0;
- }
- HAL_UART_IRQHandler(&huart1);
- }
复制代码 |