1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| OLED_Init(); OLED_ShowString(1,1,"Distance:"); while (1) { __HAL_TIM_SET_COUNTER(&htim1, 0); __HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_CC1); __HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_CC2); HAL_TIM_IC_Start(&htim1, TIM_CHANNEL_1); HAL_TIM_IC_Start(&htim1, TIM_CHANNEL_2); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET); for(uint32_t i=0; i<10; i++); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); uint32_t expireTime = HAL_GetTick() + 50; uint32_t success = 0; while(HAL_GetTick() < expireTime ) { uint32_t cc1Flag = __HAL_TIM_GET_FLAG(&htim1, TIM_FLAG_CC1); uint32_t cc2Flag = __HAL_TIM_GET_FLAG(&htim1, TIM_FLAG_CC2); if(cc1Flag && cc2Flag) { success = 1; break; } } HAL_TIM_IC_Stop(&htim1, TIM_CHANNEL_1); HAL_TIM_IC_Stop(&htim1, TIM_CHANNEL_2); if(success == 1) { uint16_t ccr1 = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_1); uint16_t ccr2 = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_2); float pulseWidth = (ccr2 - ccr1) * 1e-6f; float distance = 340.0f * pulseWidth/2.0f; if(distance < 0.2) { HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,GPIO_PIN_RESET); OLED_ShowNum(1,10,distance*1000.0,5); } else { HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,GPIO_PIN_SET); OLED_ShowNum(1,10,distance*1000.0,5); } } } }
|