在STM32上驅動超聲波測距模組

2021-09-25 09:08:41 字數 1224 閱讀 6822

#include "sys.h"

#include "stm32f10x.h"

#include "delay.h"

#include "usart.h"

#include "time.h"

void hcsr04_init(u16 arr,u16 psc)

u8 tim2ch1_capture_sta=0; //輸入捕獲狀態

u16 tim2ch1_capture_val; //輸入捕獲值

//定時器2中斷服務程式

void tim2_irqhandler(void)

else tim2ch1_capture_sta++;}}

if(tsr&0x02) //捕獲1發生捕獲事件

else //還未開始,第一次捕獲上公升沿}}

tim2->sr=0; //設定為中斷標誌位

}#define trig paout(4)

int main(void)

delay_ms(200);

}}

該**將pa0作為輸入口、pa4作為輸出口。

對於「my_nvic_init(nvic_preemptiopriority,nvic_subpriority,nvic_channel,nvic_group)」這一函式,自己從前沒用過。在網上搜尋後才知道,該函式在設定其所在中斷的搶占優先順序和響應優先順序時也會設定中斷優先順序分組(由第四個引數確定)。所以,對於同一段****現的不同「my_nvic_init」函式它們的第四個引數都要相同以保證中斷優先順序分組相同不會出錯。

對各個引數的解釋:

(1)nvic_preemptionpriority:這個引數是用來設定搶占優先順序的

(2)nvic_subpriority:這個引數是用來設定響應優先順序的      

(3)nvic_channel:這個引數是用來設定中斷編號的(範圍是0~59)

(4)nvic_group:這個引數是用來設定中斷分組的(範圍是0~4)

對於超聲波測距模組的驅動演算法來說自己在上次做arduino小車時就有了解。在這裡麻煩的不只是超聲波模組的演算法,還要對各種各樣的暫存器進行操作。有些暫存器的功能本來不了解,看過stm32的中文參考手冊後更是一頭霧水,只能硬著頭皮往上懟。等到能夠執行之後再逐個暫存器地在網上查資料。本人對**的理解分析

STM32驅動超聲波測距感測器

先貼 以後再補說明 tim icinittypedef tim5 icinitstructure void tim5 cap init u16 arr,u16 psc u8 tim5ch1 capture sta 0 輸入捕獲狀態 u16 tim5ch1 capture val 輸入捕獲值 定時器5...

stm32驅動超聲波模組

define hcsr04 port gpiob define hcsr04 clk rcc apb2periph gpiob define hcsr04 trig gpio pin 8 define hcsr04 echo gpio pin 9 define trig send n dowhile...

stm32驅動超聲波模組

下面是關於stm32驅動超聲波模組的一段 有需要的朋友可以複製參考,希望對大家能夠有所幫助和啟發。define hcsr04 port gpiob define hcsr04 clk rcc apb2periph gpiob define hcsr04 trig gpio pin 8 define ...