




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,說(shuō)明:為什么選擇STM32:經(jīng)過(guò)幾天的學(xué)習(xí),基本掌握了STM32的調(diào)試環(huán)境和一些基本知識(shí)。想拿出來(lái)與大家共享,笨教程本著最大限度簡(jiǎn)化刪減STM32入門(mén)的過(guò)程的思想,會(huì)把我的整個(gè)入門(mén)前的工作推薦給大家。就算是給網(wǎng)上的眾多教程、筆記的一種補(bǔ)充吧,所以叫學(xué)前班教程。其中涉及產(chǎn)品一律隱去來(lái)源和品牌,以防廣告之嫌。全部漢字內(nèi)容為個(gè)人筆記。先來(lái)說(shuō)說(shuō)為什么是它我選擇STM32的原因。 我對(duì)未來(lái)的規(guī)劃是以功能性為主的,在功能和面積之間做以平衡是我的首要選擇,而把運(yùn)算放在第二位,這根我的專業(yè)有關(guān)系。里面的運(yùn)算其實(shí)并不復(fù)雜,在入門(mén)階段想盡量減少所接觸的東西。 不過(guò)說(shuō)實(shí)話,對(duì)DS
2、P的外設(shè)并和開(kāi)發(fā)環(huán)境不滿意,這是為什么STM32一出就轉(zhuǎn)向的原因。下面是我自己做過(guò)的兩塊DSP28的全功能最小系統(tǒng)板,在做這兩塊板子的過(guò)程中發(fā)現(xiàn)要想盡力縮小DSP的面積實(shí)在不容易(目前只能達(dá)到50mm×45mm,這還是沒(méi)有其他器件的情況下),尤其是雙電源的供電方式和1.9V的電源讓人很頭疼。 后來(lái)因?yàn)橐粋€(gè)項(xiàng)目,接觸了LPC2148并做了一塊板子,發(fā)現(xiàn)小型的ARM7在外設(shè)夠用的情況下其實(shí)很不錯(cuò),于是開(kāi)始搜集相關(guān)芯片資料,也同時(shí)對(duì)小面積的AVR和51都進(jìn)行了大致的比較,這個(gè)時(shí)候發(fā)現(xiàn)了CortexM3的STM32,比2148擁有更豐富和靈活的外設(shè),性能幾乎是2148兩倍(按照MI
3、PS值計(jì)算)。正好2148我還沒(méi)上手,就直接轉(zhuǎn)了這款STM32F103。 與2811相比較(核心1.8V供電情況下),135MHz×1MIPS?,F(xiàn)在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管腳)芯片面積只有2811的51%,STM32F103C型(48管腳)面積是2811的25%,最大功耗是DSP的20%,單片價(jià)格是DSP的30%。且有更多的串口,CAP和PWM,這是有用的。高端型號(hào)有SDIO,理論上比SPI速度快。 由以上比較,準(zhǔn)備將未來(lái)的擁有操作系統(tǒng)的高端應(yīng)用交給DSP的新型浮點(diǎn)型單片機(jī)2
4、8335,而將所有緊湊型小型、微型應(yīng)用交給STM32。 2,首先:stm32f107vc和stm32f103vb的個(gè)區(qū)別stm32f107vc和stm32f103vb有幾個(gè)區(qū)別,都是芯片內(nèi)部設(shè)備的區(qū)別,就像好電腦和差電腦的配置不同,但都用xp,win7系統(tǒng),而且軟件也是通用的。首先看頭幾個(gè)字母“stm32”,這兩個(gè)都是stm32芯片,是意法半導(dǎo)體為ARM M3內(nèi)核出的用于自動(dòng)控制領(lǐng)域的微處理器。F107是互聯(lián)型接口和內(nèi)部資源較多,F(xiàn)103是曾強(qiáng)型(比F101強(qiáng)),相比103,F(xiàn)107加入ieee以太網(wǎng)接口,2個(gè)i2s音頻接口(做音頻解碼用),全部64kb的SRAM緩存。但是
5、這兩個(gè)芯片的開(kāi)發(fā)方法和調(diào)用的庫(kù)函數(shù)都是一樣的,你看官方稱他們?yōu)镾TM32f10X就知道了,引腳也是兼容的。 你學(xué)習(xí)的話都是學(xué)習(xí)庫(kù)函數(shù),f107多出來(lái)的增強(qiáng)功能等你學(xué)完基本的stm32開(kāi)發(fā)的時(shí)候很快上手的。送你一副圖哦,看看吧。3,然后,講講對(duì)于STM32學(xué)習(xí),熟悉過(guò)程可以分以下階段:1、 入門(mén)程序的熟悉2、 GPIOX的操作,各類寄存器原理的了解3、 逐個(gè)寄存器熟悉4、 中斷,定時(shí)器的基礎(chǔ)入門(mén)熟悉5、 USART的了解,6、 重復(fù)2345的步驟,加深對(duì)這些模塊寄存器直接的協(xié)同了解突破,達(dá)到熟練。 在這里,我發(fā)下了STM32的USART基本字節(jié)發(fā)送非常簡(jiǎn)單,然后用這個(gè)來(lái)配合
6、中斷顯示,在程序中插入各類輸出顯示,可以很清楚的知道程序中的運(yùn)行狀態(tài),先后次序,對(duì)于程序調(diào)試有很大幫助。STM32F107開(kāi)發(fā)板入門(mén)篇一第一個(gè)程序的理解: 準(zhǔn)備開(kāi)發(fā)環(huán)境MDK4.0以上,最簡(jiǎn)單的入門(mén)方式就是先調(diào)用MDK里面自帶的例程程序,然后最好是先看D:KeilARMBoardsKeilMCBSTM32CBlinkyBlinky.c這里我就拿例這個(gè)例程序分析,雖然每句都分析了,但是剛?cè)胧諷TM32可能還是會(huì)有很多疑問(wèn),所以暫時(shí)不考慮寄存器問(wèn)題,這里先給出一個(gè)程序的概念以及一些基本注意的東西,后面會(huì)有寄存器的說(shuō)明: 閱讀下面程序最好用MDK打開(kāi)上面的程序配合看,效果更直觀。 RCC->A
7、PB2ENR|=1<<6; /使能PE口時(shí)鐘(STM32所有的寄存器操作都需要先使能時(shí)鐘) GPIOE->CRH=0x33333333; /配置PE口的高八位輸出方式 每位由4位二進(jìn)制數(shù)控制,這里每位都是0011 代表 50MHZ的高速輸出參考GPIO->CRH SystemInit(); /* Setup and initialize ADC converter */ RCC->APB2ENR |= 1 << 9; /* Enable ADC1 clock ADC1使能時(shí)鐘 */ GPIOC->CRL &= 0xFFF0FFFF; /*
8、 Configure PC4 as ADC.14 input ADC1在此芯片用PC4來(lái)作為模擬輸入 設(shè)置為輸入(IO口使用前都必須對(duì)其功能設(shè)置) */ ADC1->SQR1 = 0x00000000; /* Regular channel 1 conversion 主要是第1,2位設(shè)置為0表示單通道采集 其他位置0不是用其他功能 */ ADC1->SQR2 = 0x00000000; /* Clear register 清領(lǐng)SQR2寄存器 不適用其他功能 */ ADC1->SQR3 = 14 << 0; /* SQ1 = channel 14 選用通道14,就是
9、PC4 */ ADC1->SMPR1 = 5 << 12; /* Channel 14 sample time is 55.5 cyc 通道14的采樣周期選擇101 即55.5周期 */ ADC1->SMPR2 = 0x00000000; /* Clear register 清0采樣寄存器二 */ ADC1->CR1 = 1 << 8; /* Scan mode on 開(kāi)啟掃描模式 */ ADC1->CR2 = (1 << 20) | /* Enable external trigger */ (7 << 17) | /*
10、 EXTSEL = SWSTART */ (1 << 1) | /* Continuous conversion */ (1 << 0) ; /* ADC enable 設(shè)置ADC控制寄存器配置,使能ADC */ ADC1->CR2 |= 1 << 3; /* Initialize calibration registers 初始化校準(zhǔn)寄存器,由于此步驟需要一些周期,多以必須等待完成后才開(kāi)始下一步操作 */ while (ADC1->CR2 & (1 << 3); /* Wait for initialization to f
11、inish */ ADC1->CR2 |= 1 << 2; /* Start calibration 開(kāi)始校準(zhǔn) ,然后等待校準(zhǔn)完成 */ while (ADC1->CR2 & (1 << 2); /* Wait for calibration to finish */ ADC1->CR2 |= 1 << 22; /* Start first conversion 啟動(dòng)轉(zhuǎn)換 */ for (;) /* Loop forever */ if (ADC1->SR & (1 << 1) /* If conversi
12、on has finished 轉(zhuǎn)換完成狀態(tài)寄存器的1位置1 */ AD_val = ADC1->DR & 0x0FFF; /* Read AD converted value 轉(zhuǎn)換結(jié)果保存在寄存器ADC1->DR 的低12位 */ ADC1->CR2 |= 1 << 22; /* Start new conversion 讀取數(shù)據(jù)后再次啟動(dòng)轉(zhuǎn)換 */ / GPIOE->BSRR=(AD_val<<4); /* Calculate 'num': 0, 1, . , LED_NUM-1, LED_NUM-1, . , 1,
13、0, 0, . */ num += dir; if (num >= LED_NUM) dir = -1; num = LED_NUM-1; else if (num < 0) dir = 1; num = 0; GPIOE->BSRR = led_masknum; /* Turn LED on */for (i = 0; i < (AD_val << 8) + 100000); i+);/這里的FOR 循環(huán)延時(shí)就是用來(lái)讀取AD轉(zhuǎn)換的高8位加上100000構(gòu)成延時(shí),通過(guò)改變AD控制延時(shí)時(shí)間,12位的低4 位不是很穩(wěn)定,在這里可以忽略GPIOE->BSRR
14、 = led_masknum << 16; /* Turn LED off */ 看了這些分析后,一定有很多疑問(wèn),在入門(mén)篇二中將逐個(gè)解除這些疑問(wèn)。當(dāng)這些基本疑問(wèn)解決后,就可以運(yùn)用STM32的基本功能了。 STM32入門(mén)篇二端口的認(rèn)識(shí)理解端口控制GPIOSTM32系列給每個(gè)端口都分配了一個(gè)地址空間,然后通過(guò)對(duì)地址的賦值操作來(lái)完成對(duì)端口的控制,差不多端口也就是寄存器控制。每個(gè)GPI/O端口有兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR),一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存
15、器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。 根據(jù)數(shù)據(jù)手冊(cè)中列出的每個(gè)I/O端口的特定硬件特征, GPIO端口的每個(gè)位可以由軟件分別配置成多種模式。 輸入浮空 輸入上拉 輸入下拉 模擬輸入 開(kāi)漏輸出 推挽式輸出 推挽式復(fù)用功能 開(kāi)漏復(fù)用功能 每個(gè)I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(wèn)(不允許半字或字節(jié)訪問(wèn))。GPIOx_BSRR和GPIOx_BRR寄存器允許對(duì)任何GPIO寄存器的讀/更改的獨(dú)立訪問(wèn);這樣,在讀和更改訪問(wèn)之間產(chǎn)生IRQ時(shí)不會(huì)發(fā)生危險(xiǎn)。 在這里要說(shuō)下前面用的GPIOX->CPL,ADC1->DR等等,寄存器的表示方
16、式都是在庫(kù)文件stm32f10x_cl.c中定義的,這個(gè)庫(kù)文件也可以根據(jù)自己的習(xí)慣去定義,但是初學(xué)建議不要去動(dòng)里面的文件,因?yàn)楹竺娴睦潭际且赃@個(gè)為基礎(chǔ)編寫(xiě)的。這個(gè)文件必須要先去熟悉,在里面找到上一節(jié)提到的所有的寄存器,然后差不多就能看明白這些命名規(guī)律,繼續(xù)后面的學(xué)習(xí)了。CPIOX_CRL/CRH 寄存器如下:CPIOX_CRL/CRH寄存器各位代表的端口模式:GPIOX_的高8位和低8位控制寄存器都一樣 寄存器都是32位的 每4位控制IO口的一位。然后介紹GPIOX的數(shù)據(jù)存儲(chǔ)器,分為輸入和輸出存儲(chǔ)器IDR和ODR;IDR是一個(gè)端口輸入數(shù)據(jù)寄存器,只用了低16位。該寄存器為只讀寄存器,并且只能
17、以16位的形式讀出。該寄存器各位的描述如下圖所示: 圖3.1.1.2 端口輸入數(shù)據(jù)寄存器IDR各位描述 要想知道某個(gè)IO口的狀態(tài),你只要讀這個(gè)寄存器,再看某個(gè)位的狀態(tài)就可以了。使用起來(lái)是比較簡(jiǎn)單的。ODR是一個(gè)端口輸出數(shù)據(jù)寄存器,也只用了低16位。該寄存器雖然為可讀寫(xiě),但是從該寄存器讀出來(lái)的數(shù)據(jù)都是0。只有寫(xiě)是有效的。其作用就是控制端口的輸出。該寄存器的各位描述如下圖所示: 圖3.1.1.3 端口輸出數(shù)據(jù)寄存器ODR各位描述這些都是16位操作,如果需要為操作就可以用到寄存器BSRR和BRR 這個(gè)也是我們前面的例程中用到的寄存器,描述如下:BRR寄存器和BSRR相反:BRR寄存器描述對(duì)于ADC寄存器還有其他類型寄存器可以參考STM32編程手冊(cè)對(duì)于相應(yīng)部分的介紹,這里暫時(shí)就介紹這么多。下一章我們將簡(jiǎn)單的實(shí)現(xiàn)ADC的配置。STM32入門(mén)篇三ADC的基本操作在前面
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律文書(shū)要素提取員考試試卷及答案
- 2025年氣液動(dòng)閥門(mén)、電磁閥、自鎖閥項(xiàng)目建議書(shū)
- 消費(fèi)者保護(hù)工作總結(jié)
- 消防員年末工作個(gè)人總結(jié)
- 金融行業(yè)工作計(jì)劃范文5篇
- 2025年碳纖維預(yù)浸布合作協(xié)議書(shū)
- 2025年廂式改裝車、特種車輛合作協(xié)議書(shū)
- 2025年高純超細(xì)石英粉合作協(xié)議書(shū)
- 2025年沐浴清潔海綿項(xiàng)目合作計(jì)劃書(shū)
- 智慧城市背景下智能垃圾分類系統(tǒng)的政策支持與市場(chǎng)響應(yīng)
- 自救器發(fā)放管理制度
- 基于AI的物聯(lián)網(wǎng)設(shè)備遠(yuǎn)程升級(jí)智能算法研究-洞察闡釋
- T/CACEM 25-2023高速公路限速標(biāo)志設(shè)置規(guī)范
- 《嚴(yán)重心律失?!氛n件示例
- 《北宋東京城市場(chǎng)調(diào)研》課件
- 電線發(fā)生火災(zāi)的風(fēng)險(xiǎn)分析報(bào)告
- 2025-2030中國(guó)硝酸銀(CAS 7761-88-8)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 醫(yī)院DRG培訓(xùn)課件
- 2025輪軸裝修工(技師)重點(diǎn)考試題庫(kù)及答案(濃縮300題)
- 針刺傷試題及答案
- 電腦硬件及產(chǎn)品供應(yīng)計(jì)劃策略
評(píng)論
0/150
提交評(píng)論