在线时间1853 小时
UID45393
ST金币0
蝴蝶豆82
注册时间2008-5-4
社区小助手
- 最后登录
- 2020-12-9
|
发表于 2020-11-19 16:22:24
|
显示全部楼层
a0a.1 32b0c
为双十一心愿添砖加瓦:
基于Nucleo -f031激光测距仪
图1
Nucleo -f031麻雀虽小,五脏俱全,用它来驱动ST的VL53L1X激光测距传感器,非常经济实用。
本方案中驱动VL53L1X采用RS232串口通讯方式。
硬件连接(图2):
Nucleo -f031的PA0、PA1、 PA3、PA4驱动OLED显示屏,
PA9、PA10用于USART1,9600波特率,8位数据位,1位停止位,中断接收。
图3
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;
- else
- if((USART1->ISR & USART_ISR_IDLE) != RESET)
- {
- USART1->ICR = UART_CLEAR_IDLEF;
- Lenght=Rx_buf[4]<<8;
- Lenght |=Rx_buf[5];
- RxCount=0;
- }
- HAL_UART_IRQHandler(&huart1);
- }
复制代码
|
|