最近報名了2017全國大學生電子設計競賽,我們學校是第一次參加這個比賽,由於8/9月份就要比賽了,所以現在準備是比較晚的了,指導老師說只能做控制類的題目了,讓我們學習一下stm32微控制器,51到時候肯定不夠用了,正好前幾天買了一塊stm32f103zet6的最小系統,那就趕緊學習吧!從**學習呢?同樣是從點亮乙個小燈開始,就建個工程模板就讓我沒有耐心了,折騰了一上午終於把工程建立好了!
stm32系列基於專為要求高效能、低成本、低功耗的嵌入式應用專門設計的arm cortex-m3核心,按核心架構分為不同產品:
其中stm32f系列有:
stm32f103「增強型」系列
stm32f101「基本型」系列
stm32f105、stm32f107「互聯型」系列
增強型系列時鐘頻率達到72mhz,是同類產品中效能最高的產品;基本型時鐘頻率為36mhz,以16位產品的**得到比16位產品大幅提公升的效能,是32位產品使用者的最佳選擇。兩個系列都內建32k到128k的快閃儲存器,不同的是sram的最大容量和外設介面的組合。時鐘頻率72mhz時,從快閃儲存器執行**,stm32功耗36ma,是32位市場上功耗最低的產品,相當於0.5ma/mhz。
下圖是 at89s52的資源
再來看看stm32f103zet的資源
可以明顯看出stm3資源是非常豐富,外設介面很多。正因如此,stm32操作起來不如51那麼方便,所以在一些小專案上能用51盡量不用stm32微控制器。
可以看出只要給d13輸出乙個高電平就可以將led點亮,低電平熄滅。
學習微控制器貌似都是從點亮led燈開始的,像51微控制器點亮小燈直接p1=0就ok了,由於stm32的gpio工作模式有8種(輸入4種+輸出4種),所以在gpio輸出之前要先對要操作的gpio進行配置,如下圖:
void gpio_config(void) //可以看出對gpio的配置是通過各種函式實現的, 這點和51有所不同,51是直接操作暫存器,其實庫函式的本質還是操作暫存器,只不過官方將它封裝成了各種函式,來方便操作暫存器,畢竟stm32的暫存器要比51多很多,要記住每個暫存器的名稱是不容易的,而通過各個函式就可以簡單的操作各個暫存器了,在mdk開發環境中可以通過右鍵go to definition of '***'來檢視各個函式是如何操作暫存器的。gpio初始配置
從初始化配置時,要先使能gpio的時鐘,指定引腳,設定輸出速率和工作模式,這些是必不可少的。
如何讓gpiod_13輸出高低電平呢?官方有對應的函式:
#define led_on gpio_setbits(gpiod, gpio_pin_13) //這裡使用了巨集定義,方便書寫,注意高電平點亮,低電平熄滅埠置1#define led_off gpio_resetbits(gpiod, gpio_pin_13) //
埠置0
void delay(u32 t) //由於stm32的主頻有72mhz之高,所以這裡的形參定義為了unsigned long 型別,同樣下面的變數i,定義為了unsigned int型別,為了占用更多的時間。延時函式
int可以看出delay()函式的實參比較大,如果換做100的話,人眼幾乎看不出led燈的閃爍,這是因為主頻很高,執行乙個迴圈用的時間更少。只有實參足夠大,才能達到延時的效果。main()
}
通過控制led閃爍的學習,可以看出stm32的gpio位操作不是很方便,或許做這種簡單的事情大材小用了吧!本文是使用庫函式操作gpio,也可以通過直接操作相關的暫存器來實現,以後會學習一下如何通過暫存器的設定來控制led,以上內容是我初學stm32微控制器的個人理解,有描述不恰當或者錯誤的地方,歡迎各位朋友指正.
STM32學習筆記(一) 點亮乙個LED
最近報名了2017全國大學生電子設計競賽,我們學校是第一次參加這個比賽,由於8 9月份就要比賽了,所以現在準備是比較晚的了,指導老師說只能做控制類的題目了,讓我們學習一下stm32微控制器,51到時候肯定不夠用了,正好前幾天買了一塊stm32f103zet6的最小系統,那就趕緊學習吧!從 學習呢?同...
STM32點亮乙個LED
圖 i o埠位的基本結構 stm32f103c8t6共有2組gpio埠 pa pb,每組16個埠。每個埠有兩個32位配置暫存器 gpiox crl,gpiox crh 兩個32位資料暫存器 gpiox idr,gpiox odr 乙個32位置位 復位暫存器 gpiox bsrr 乙個16位復位暫存器...
學習記錄 STM32點亮LED實驗
使用藍橋杯ct117e板子 使用stm32標準庫檔案 1.初始化gpio埠 使能相應埠的時鐘 gpio inittypedef gpio init gpioc rcc apb2periphclockcmd rcc apb2periph gpioc,enable gpio init gpioc.gpi...