STM32F1編寫簡單的五路黑白循跡

2021-10-10 08:03:09 字數 2880 閱讀 6000

一、小車模型設計

1)硬體搭配:四輪小車底盤、五路紅外循跡感測器、l298n兩路電機驅動模組、stm32f103rc最小系統板、電源、降壓模組。

2)說明:這裡只用到了兩路電機驅動模組,是因為我將同一邊的電機進行了併聯;使用的電源應大於7v,才能有效的驅動小車行駛;降壓模組的作用是將電壓調節到適合微控制器最小系統板工作的5v供電。

3)組裝起來大概長這個模樣

二、循跡程式設計

1)需要配置的外設:五個gpio輸入口,兩個定時器輸出pwm波(這裡只有兩路也可以只配置乙個定時器,因為乙個定時器可以輸出4路pwm波);

2)gpio口配置(五路輸入):

// 埠巨集定義:

#define track_port 					gpioa

//選擇a埠

#define track_port_clk rcc_apb2periph_gpioa

//埠a時鐘

#define track_infrared_l2_pin gpio_pin_9

//左2感測器對應的引腳

#define track_infrared_l1_pin gpio_pin_8

//左1感測器對應的引腳

#define track_infrared_m_pin gpio_pin_7

//中間感測器對應的引腳

#define track_infrared_r1_pin gpio_pin_6

//右1感測器對應的引腳

#define track_infrared_r2_pin gpio_pin_5

//右2感測器對應的引腳

// 埠模式配置函式:

void

track_init

(void

)//循跡埠初始化

4)電機驅動函式:

/*******

功 能:左邊電機驅動函式

形 參:cont1 配置ccr3比較暫存器的值(占空比調整)

cont2 配置ccr4比較暫存器的值(占空比調整)

返回值: 無

說 明:當cont1大於0,cont2為0時,電機正轉,反之則反轉(這裡仔細理解一下,後面函式會使用到)

******/

void

motor_l_cont

(uint16_t cont1,uint16_t cont2)

/*******

功 能:右邊電機驅動函式

形 參:cont1 配置ccr3比較暫存器的值(占空比調整)

cont2 配置ccr4比較暫存器的值(占空比調整)

返回值: 無

說 明:當cont1大於0,cont2為0時,電機正轉,反之則反轉(這裡仔細理解一下,後面函式會使用到)

******/

void

motor_r_cont

(uint16_t cont1,uint16_t cont2)

/*******

功 能:雙邊電機驅動函式

形 參:l_speed 設定左電機前進的轉速

r_speed 設定右電機前進的轉速

返回值: 無

說 明:這裡呼叫左電機驅動和右電機驅動函式,

******/

void

motor_speed_adjust

(uint16_t l_speed,uint16_t r_speed)

/*******

功 能:小車旋轉函式(左右電機反方向轉動)

形 參:fx 為1時,逆時針轉動(左電機反轉,右電機正轉)

為0時,順時針轉動(左電機正轉,右電機反轉)

返回值: 無

說 明:這裡使用到的starter_speed,為巨集定義的初始占空引數,這裡呼叫左電機驅動和右電機驅動函式,

******/

void

motor_opposite

(u8 fx)

//旋轉

else

}/********

功 能:後退,左右電機反轉

形 參:無

返回值: 無

說 明:這裡使用到的starter_speed,為巨集定義的初始占空引數,這裡呼叫左電機驅動和右電機驅動函式,

******/

void

motor_retreat

(void

)

5)循跡函式:

/********

功 能:讀取5個感測器輸出的狀態

形 參:無

返回值:state 感測器狀態

說 明:感測器檢測到白線輸出1,黑線輸出0。。

因為使用的時gpioa埠的5到9引腳,這裡直接讀出gpioa所有引腳的狀態,

然後將得到的資料向右移動5位,去掉0到4引腳的資料,

再與上0x001f,得到5到9引腳的狀態,

******/

u8 get_infrared_state

(void

)/********

功 能:循跡調整函式

形 參:無

返回值: 無

說 明:根據獲取到的感測器輸出狀態,進行左右電機的速度調整

******/

void

track_adjust

(void)}

}

(好的,到這裡就完了。寫的非常簡單,不足的地方請各位不吝賜教)

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...

STM32F1外部中斷例項

使用外部中斷的基本步驟如下 1.設定好相應的時鐘 2.設定相應的中斷 3.io口初始化 4.把相應的io口設定為中斷線路 要在設定外部中斷之前 並初始化 5.在選擇的中斷通道的響應函式中中斷函式。1 開啟時鐘 void rcc config void 設定相應的時鐘所需要的rcc函式在stm32f1...

STM32f1學習筆記 GPIO

參考文章 stm32自學筆記 stm32可以提供很多gpio,一般分別在5個埠 port gpioa gpioe 每個埠有16個gpio,最大耐壓值為5v。每個埠有32為寬頻的設定暫存器,一共64位,每個gpio占用4位配置位。其中兩位設定gpio的方向,另外兩位設定gpio的工作模式。1 gpio...