STM32學(xué)習(xí)體會(huì)
因?yàn)槭罴俚臅r(shí)候?qū)W了MSP430,所以現(xiàn)在學(xué)STM32讓我感覺很容易就上手了,相比51,主要是初始化更加繁瑣了,沒辦法嘛,功能強(qiáng)大,寄存器就多,多了配置起來就復(fù)雜一些。
本文引用地址:http://cafeforensic.com/article/201612/324395.htm個(gè)人感覺一開始還是走寄存器路線,因?yàn)橹挥袑W(xué)懂了底層的東西才能更好的理解它的功能是怎么實(shí)現(xiàn)的,才能從中找出來捷徑。以后的話貌似還可以走庫函數(shù)路線,那樣可以大大的縮短開發(fā)周期。
幾乎所有的單片機(jī)開始都是在介紹IO口,但是我感覺在此之前應(yīng)該學(xué)習(xí)一下時(shí)鐘,STM32的時(shí)鐘使能分的HH特別細(xì),每一個(gè)外設(shè)都有一個(gè)對(duì)應(yīng)的時(shí)鐘使能位,還有相對(duì)應(yīng)的復(fù)位位,基本上都在RCC->APB1ENR,RCC->APB2ENR兩個(gè)寄存器里面,幾乎初始化每一個(gè)外設(shè)之前,包括IO口,都要使能它的時(shí)鐘,STM32還有一個(gè)后背區(qū),當(dāng)單片機(jī)復(fù)位的時(shí)候,這個(gè)區(qū)域是不會(huì)復(fù)位的,它的RTC模塊只要有后備電源,即使單片機(jī)關(guān)機(jī)了,也可以給你提供大概136年的實(shí)時(shí)時(shí)鐘計(jì)時(shí)!
下面就是IO口了,它的IO口有8種模式,但是常用的就那么幾種,推拉式輸出,推拉式輸入,復(fù)用功能等等,每四位控制一個(gè)IO口,最常用的就是0X8,0X3。使能了時(shí)鐘,設(shè)置好模式,就可以使用它的IO了,輸出電平的高低就是控制ODR,輸入就是讀IDR,但是這兩個(gè)寄存器只能整體訪問。但是STM32所有的位帶操作為我們可以像操作51一樣操作它的IO提供了可能,例如,如果要控制PA1這一位,只要對(duì)PAout(1),PAin(1)操作就行了,免去了數(shù)據(jù)的位運(yùn)算!還有一點(diǎn)就是注意特殊IO,因?yàn)橛械腎O復(fù)位的時(shí)候默認(rèn)是復(fù)用功能,如和JTAG有關(guān)的幾個(gè)IO,如果你想把它當(dāng)成普通IO使用,先把JTAG禁用了之后就OK了。
再后面就是外部中斷了,它的每個(gè)IO都可以提供中斷功能,對(duì)應(yīng)著一條中斷線,但中斷線是有復(fù)用的,至于是哪一種中斷,就要看它的中斷標(biāo)志寄存器了,如PA1,PB1,PC1,PD1,PE1共用EXTI1這一條中斷線,幾條中斷線又共用一個(gè)中斷向量,當(dāng)然,有的是獨(dú)享的。如RTC的秒中斷和鬧鐘中斷還有溢出中斷,共用了RTCIRQChannel這個(gè)中斷向量,進(jìn)去中斷服務(wù)程序之后,通過判斷中斷標(biāo)志寄存器的哪一位置位了,就可以知道是哪個(gè)中斷了。但是,中斷標(biāo)志要軟件清零!這點(diǎn)很重要。STM32還有一點(diǎn)很人性化,就是中斷向量可以重新映射!雖然有些限制,但還是很人性化的,給你畫PCB的時(shí)候提供了更多選擇!至于中斷的配置,按部就班的去弄就好了!
后面還玩了看門狗,這個(gè)可以防止程序跑飛,不過目前對(duì)我們來說,作用不大。不過學(xué)過MSP430的朋友要注意,MSP430的看門狗復(fù)位時(shí)默認(rèn)開啟,而STM32的默認(rèn)值也是關(guān)閉!如果對(duì)它不熟悉,就先別用,因?yàn)楣佛I了就會(huì)咬你的。
后面玩了一下TFTLCD,得說明一下,觸摸屏,它的“觸摸”和“屏”是分開的,有不同的控制器,要分別編寫驅(qū)動(dòng)程序。我目前只弄了屏幕顯示,這種彩屏最煩人的就是初始化,我的這塊控制器有200多命令,所以告訴你一個(gè)簡便方法,復(fù)制粘貼,然后做細(xì)節(jié)改動(dòng),因?yàn)槲覀儾皇亲銎聊婚_發(fā)的,沒必要去寫這個(gè)初始化。之后就簡單了,單點(diǎn)操作的話,先寫入坐標(biāo),然后寫入RGB的值,我的屏幕是565格式,就是R有五位控制,G有6位控制,B有5位控制,值越大,顏色越深!唯一煩人的就是他沒有字庫,要自己制作字庫,建議把基本的ASCII中的字符做成字庫存在頭文件中。因?yàn)楹苌儆脻h字,而且漢字量實(shí)在是太大了!用PC2LCD取模軟件制作。
昨天買了一塊OLED屏幕,它是自發(fā)光的,所以看起來很舒服,而且亮度可以軟件調(diào)控,大概只有硬幣大小,就花了我40塊錢,不過分辨率還可以,128×64,用過12864LCD的可以想象一下,同樣的像素點(diǎn),縮小到硬幣大小,而且還是自發(fā)光,效果確實(shí)很漂亮。它的操作也不難,支持5種接口(這個(gè)要看控制器型號(hào)),有8080,6080,三線SPI,四線SPI,IIC,不過SPI模式下不能進(jìn)行讀操作。在8080控制模式下,讀的時(shí)候最好來一次假讀。同樣的,初始化去復(fù)制粘貼就好了!然后每次寫入都要求是整個(gè)字節(jié)寫入。
時(shí)間原因,先寫到這里,定時(shí)器改天再寫。
評(píng)論