|
超聲波模塊以及相關(guān)引腳初始化函數(shù)void HC_Init(void)
超聲波觸發(fā)函數(shù)
void HC_pros(void)
中斷服務(wù)程序
//外部中斷讀引腳電平變化,判斷是否發(fā)生中斷
void EXTI9_5_IRQHandler(void)
{
delay_us(10); //RESET=0;
if(EXTI_GetITStatus(EXTI_Line7) != RESET)//發(fā)出超聲波,echo輸出高電平
{
TIM_SetCounter(TIM2,0);//清空定時(shí)器2的值,設(shè)置定時(shí)器2的值
TIM_Cmd(TIM2, ENABLE); //如果沒有接收信號(hào),echo一直為1
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)); //接收到信號(hào)時(shí),echo由1變?yōu)?
TIM_Cmd(TIM2, DISABLE);
//關(guān)鍵在于計(jì)數(shù)周期值,與預(yù)分頻系數(shù)
dis = TIM_GetCounter(TIM2)*5*34/100.0;//TIM_GetCounter獲得定時(shí)器2的計(jì)數(shù)值,//傳感器數(shù)值
// if(dis > 0)
// {
// delay_ms(200);
// printf("distance:%f cm", dis);
// }
EXTI_ClearITPendingBit(EXTI_Line7);
}
}
附:定時(shí)器重裝載值以及預(yù)分頻系數(shù)
TIM_TimeBaseStructure.TIM_Period =4999; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值 計(jì)數(shù)到5000為500ms
TIM_TimeBaseStructure.TIM_Prescaler =7199; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值 10Khz(=72M/7199+1)的計(jì)數(shù)頻率 計(jì)一個(gè)數(shù)需要 0.00001S=1/10k,其中APB1為36M,在預(yù)分頻系數(shù)不為1時(shí),定時(shí)器的時(shí)鐘由APB1倍頻而來,即72M
最重要的測(cè)距公式解釋:
(定時(shí)器2的計(jì)數(shù)值*計(jì)一個(gè)數(shù)所需時(shí)間*聲速)/2,聲速340m/s,發(fā)出聲波即開始計(jì)數(shù)
聲波觸發(fā)應(yīng)該大家都知道,網(wǎng)上也有相關(guān)介紹,這里不再贅述。
51hei.png (6.34 KB, 下載次數(shù): 53)
下載附件
2021-10-24 23:07 上傳
全部代碼51hei下載地址:
超聲波實(shí)驗(yàn).7z
(193.73 KB, 下載次數(shù): 45)
2021-10-24 23:07 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|