|
實(shí)驗(yàn)器材:
NANO STM32F103開發(fā)板V1版本,US-015避障模塊
實(shí)驗(yàn)?zāi)康?
超聲波避障測(cè)試程序
硬件資源:
1.Trig連接PA8
2.Echo連接PC8
實(shí)驗(yàn)現(xiàn)象:
本實(shí)驗(yàn)利用PA8產(chǎn)生20us高電平觸發(fā)信號(hào),周期10ms;
利用TIM3_CH3來做輸入捕獲,我們將捕獲PC8上的高電平脈寬,并將脈寬時(shí)間通過串
口打印出來,
注意事項(xiàng):
硬件連接在電源關(guān)閉的狀態(tài)下進(jìn)行.
**編程時(shí)PC8底層程序要使能其復(fù)用功能。
#include "us015timer.h"
// PC8---Echo TIM3 CH3
//TIM3 捕獲初始化
TIM_HandleTypeDef TIM33_Handler; //定時(shí)器3句柄
//定時(shí)器2通道1輸入捕獲配置
//arr:自動(dòng)重裝值(TIM3是16位的!!)
//psc:時(shí)鐘預(yù)分頻數(shù)
void TIM3_CH3_Cap_Init(u32 arr,u16 psc)
{
TIM_IC_InitTypeDef TIM3_CH3Config;
TIM33_Handler.Instance=TIM3; //通用定時(shí)器3
TIM33_Handler.Init.Prescaler=psc; //分頻系數(shù)
TIM33_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上計(jì)數(shù)器
TIM33_Handler.Init.Period=arr; //自動(dòng)裝載值
TIM33_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//時(shí)鐘分頻因子
TIM33_Handler.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;//使能自動(dòng)重載
HAL_TIM_IC_Init(&TIM33_Handler); //初始化輸入捕獲時(shí)基參數(shù)
TIM3_CH3Config.ICPolarity=TIM_ICPOLARITY_RISING; //上升沿捕獲
TIM3_CH3Config.ICSelection=TIM_ICSELECTION_DIRECTTI;//映射到TI1上
TIM3_CH3Config.ICPrescaler=TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM3_CH3Config.ICFilter=0; //配置輸入濾波器,不濾波
HAL_TIM_IC_ConfigChannel(&TIM33_Handler,&TIM3_CH3Config,TIM_CHANNEL_3);//配置TIM3通道3
HAL_TIM_IC_Start_IT(&TIM33_Handler,TIM_CHANNEL_3); //開啟TIM3的捕獲通道3,并且開啟捕獲中斷
__HAL_TIM_ENABLE_IT(&TIM33_Handler,TIM_IT_UPDATE); //使能更新中斷
HAL_NVIC_SetPriority(TIM3_IRQn,2,0); //設(shè)置中斷優(yōu)先級(jí),搶占優(yōu)先級(jí)2,子優(yōu)先級(jí)0
HAL_NVIC_EnableIRQ(TIM3_IRQn); //開啟ITM3中斷通道
}
//定時(shí)器2底層驅(qū)動(dòng),時(shí)鐘使能,引腳配置
//此函數(shù)會(huì)被HAL_TIM_IC_Init()調(diào)用
//htim:定時(shí)器2句柄
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM3_CLK_ENABLE(); //使能TIM3時(shí)鐘
__HAL_AFIO_REMAP_TIM3_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘
GPIO_Initure.Pin=GPIO_PIN_8; //PC8
GPIO_Initure.Mode=GPIO_MODE_AF_INPUT; //復(fù)用推挽輸入
GPIO_Initure.Pull=GPIO_PULLDOWN; //下拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
HAL_NVIC_SetPriority(TIM3_IRQn,2,0); //設(shè)置中斷優(yōu)先級(jí),搶占優(yōu)先級(jí)2,子優(yōu)先級(jí)0
HAL_NVIC_EnableIRQ(TIM3_IRQn); //開啟ITM3中斷通道
}
//捕獲狀態(tài)
//[7]:0,沒有成功的捕獲;1,成功捕獲到一次.
//[6]:0,還沒捕獲到低電平;1,已經(jīng)捕獲到低電平了.
//[5:0]:捕獲低電平后溢出的次數(shù)
u8 TIM3CH3_CAPTURE_STA=0; //輸入捕獲狀態(tài)
u16 TIM3CH3_CAPTURE_VAL; //輸入捕獲值(TIM3是16位)
//定時(shí)器2中斷服務(wù)函數(shù)
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM33_Handler); //定時(shí)器共用處理函數(shù)
}
//定時(shí)器更新中斷(計(jì)數(shù)溢出)中斷處理回調(diào)函數(shù), 該函數(shù)在HAL_TIM_IRQHandler中會(huì)被調(diào)用,實(shí)現(xiàn)多個(gè)計(jì)數(shù)器滿裝載的計(jì)數(shù)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//更新中斷(溢出)發(fā)生時(shí)執(zhí)行
{
if((TIM3CH3_CAPTURE_STA&0X80)==0) //還未成功捕獲上升沿
{
if(TIM3CH3_CAPTURE_STA&0X40) //已經(jīng)捕獲到高電平了
{
if((TIM3CH3_CAPTURE_STA&0X3F)==0X3F) //高電平太長(zhǎng)了
{
TIM3CH3_CAPTURE_STA|=0X80; //標(biāo)記成功捕獲了一次
TIM3CH3_CAPTURE_VAL=0XFFFF;
}else TIM3CH3_CAPTURE_STA++;
}
}
}
//定時(shí)器輸入捕獲中斷處理回調(diào)函數(shù),該函數(shù)在HAL_TIM_IRQHandler中會(huì)被調(diào)用
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//捕獲中斷發(fā)生時(shí)執(zhí)行
{
if((TIM3CH3_CAPTURE_STA&0X80)==0) //還未成功捕獲
{
if(TIM3CH3_CAPTURE_STA&0X40) //捕獲到一個(gè)下降沿
{
TIM3CH3_CAPTURE_STA|=0X80; //標(biāo)記成功捕獲到一次高電平脈寬
TIM3CH3_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&TIM33_Handler,TIM_CHANNEL_3);//獲取當(dāng)前的捕獲值.
TIM_RESET_CAPTUREPOLARITY(&TIM33_Handler,TIM_CHANNEL_3); //一定要先清除原來的設(shè)置!!
TIM_SET_CAPTUREPOLARITY(&TIM33_Handler,TIM_CHANNEL_3,TIM_ICPOLARITY_RISING);//配置TIM3通道3上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM3CH3_CAPTURE_STA=0; //清空
TIM3CH3_CAPTURE_VAL=0;
TIM3CH3_CAPTURE_STA|=0X40; //標(biāo)記捕獲到了上升沿
__HAL_TIM_DISABLE(&TIM33_Handler); //關(guān)閉定時(shí)器3
__HAL_TIM_SET_COUNTER(&TIM33_Handler,0);
TIM_RESET_CAPTUREPOLARITY(&TIM33_Handler,TIM_CHANNEL_3); //一定要先清除原來的設(shè)置!!
TIM_SET_CAPTUREPOLARITY(&TIM33_Handler,TIM_CHANNEL_3,TIM_ICPOLARITY_FALLING);//定時(shí)器3通道3設(shè)置為下降沿捕獲
__HAL_TIM_ENABLE(&TIM33_Handler); //使能定時(shí)器3
}
}
}
|
-
-
避障停車.7z
2020-2-6 21:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
548.44 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5
能正常運(yùn)行
|