|
MX_GPIO_Init();
MX_TIM4_Init();
MX_USART1_UART_Init();
MX_TIM5_Init();
/* USER CODE BEGIN 2 */
delay_init();
// OLED_init();//oled初始化
CSB_Init();//超聲波初始化
printf ( "STM32 輸入捕獲實(shí)驗(yàn)\n" );
printf ( "按下KEY1,測試KEY1按下的時間\n" );//當(dāng)初測試時沒來得及修改,不影響程序正常進(jìn)行
t=' ';
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/* 超聲波觸發(fā)信號*/
GPIO_SetBits(GPIOA,GPIO_PIN_1);
US100_DelayUS(20);
GPIO_ResetBits(GPIOA,GPIO_PIN_1);
/* 進(jìn)行超聲波反饋高電平脈寬測量*/
if(strCapture.ucFinishFlag == 1 )
{
/*計(jì)算高電平數(shù)值 */
ulTime = strCapture .usPeriod * GENERAL_TIM_PERIOD + strCapture .usCtr;
temp=((ulTime % ulTmrClk)*340)/(1000*2);
printf ( ">>測得距離為%dmm\n",temp);
strCapture .ucFinishFlag = 0;
HAL_Delay(100);
}
}
/* USER CODE END 3 */
}
定時器中斷回調(diào)函數(shù)
/**
* oˉêy1|Äü: ¶¨ê±Æ÷êäèë2¶»ñÖD¶Ï»Øμ÷oˉêy
* êäèë2Îêy: htim£o¶¨ê±Æ÷¾ä±ú
* ·μ »Ø Öμ: ÎT
* Ëμ Ã÷: ÎT
*/
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
TIM_IC_InitTypeDef sConfigIC;
if ( strCapture .ucStartFlag == 0 )
{
__HAL_TIM_SET_COUNTER(htim,0); //清除定時器計(jì)數(shù)
strCapture .usPeriod = 0;
strCapture .usCtr = 0;
// 配置輸入捕獲參數(shù)。主要是修改觸發(fā)電平
sConfigIC.ICPolarity = GENERAL_TIM_END_ICPolarity;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, GENERAL_TIM_CHANNELx);
// 清除中斷標(biāo)志位
__HAL_TIM_CLEAR_IT(htim, GENERAL_TIM_IT_CCx);
// 啟動輸入捕獲并開啟中斷
HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);
strCapture .ucStartFlag = 1;
}
else
{
// 獲取定時器計(jì)數(shù)值
strCapture .usCtr = HAL_TIM_ReadCapturedValue(&htim5,GENERAL_TIM_CHANNELx);
//配置輸入捕獲參數(shù),主要是修改觸發(fā)電平
sConfigIC.ICPolarity = GENERAL_TIM_STRAT_ICPolarity;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, GENERAL_TIM_CHANNELx);
// 清除中斷標(biāo)志位
__HAL_TIM_CLEAR_IT(htim, GENERAL_TIM_IT_CCx);
//啟動輸入捕獲并開啟中斷
HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);
strCapture .ucStartFlag = 0;
strCapture .ucFinishFlag = 1;
}
}
以下代碼請見tim.c
void CSB_Init(void)
{
ulTmrClk = HAL_RCC_GetHCLKFreq()/GENERAL_TIM_PRESCALER;
/*啟動定時器*/
HAL_TIM_Base_Start_IT(&htim5);
/*啟動定時器輸入捕獲并開啟中斷*/
HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);
/*復(fù)位超聲波引腳*/
GPIO_ResetBits(GPIOA,GPIO_PIN_1);
GPIO_ResetBits(GPIOA,GPIO_PIN_0);
}
|
-
-
可用超聲波模塊函數(shù).7z
2020-2-6 21:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
3.79 MB, 下載次數(shù): 77, 下載積分: 黑幣 -5
HAL庫版本32超聲波
|