




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第八章
存儲器管理目錄SRAM存儲器EEPROM存儲器FLASH存儲器本章小結通過網標USER_ADC0_CH7,PA0口連接到滑動變阻器的分壓輸出端。通過調節滑動變阻器VR1,其分壓輸出端可輸出0~3.3V的電壓,該模擬電壓信號被送到STM32F103RCT6的ADC模塊,進行模數轉換后,得到電壓值。8.1SRAM存儲器23STM32F103RCT6微控制器內置了3個12-bit的ADC模塊,最高采樣速率為1MSPS,具有常規方式和注入方式等多種工作模式。在STM32F103RCT6學習板上,用10kΩ滑動變阻器輸出0~3.3V模擬電壓送給STM32F103RCT6微控制器的ADC通道0輸入端,如圖3-2和圖3-10所示。ADC通道0復用了管腳PA0,需要將PA0配置為ADC123_IN0功能。ADC模塊時鐘最大可為14MHz,ADC模塊時鐘來自APB2總線(即PCLK2,16MHz),需配置時鐘配置寄存器RCC_CFGR的第[15:14]位域為00b,表示對PCLK2二分頻后的8MHz時鐘信號供給ADC模塊。ADC工作原理4ADC模塊相關的寄存器列于下表中。ADC工作原理5下面介紹表中常用的寄存器的含義,其余寄存器請參考STM32F103RCT6用戶手冊。ADC控制寄存器CR1的各位含義如下表所示。ADC工作原理6ADC控制寄存器CR2的各位含義如下表所示。ADC工作原理7ADC工程實例在工程PRJ15的基礎上新建工程PRJ19,保存在“D:\STM32F103RCT6PRJ\PRJ19”目錄下,此時的工程PRJ19與PRJ15完全相同。然后,新建文件adc.c和adc.h,并修改includes.h、bsp.c、exti.c和tim2.c文件。其中,includes.h文件中需要添加對adc.h頭文件的包括,即添加以下一條語句:#include"adc.h"文件bsp.c的MyBSPInit初始化函數中(函數內部末尾處,即在程序段7-4的第16行和第17行中間),插入以下一條語句:MyADCInit();即調用MyADCInit函數初始化模數轉換器ADC。8ADC工程實例文件exti.c的EXTI9_5_IRQHandler中斷服務函數中添加以下一條語句:MyADCStart();當按下按鍵S18時點亮LED燈D10且同時調用MyADCStart函數啟動模數轉換。在文件tim2.c中將下面的語句注釋掉,即//if(i%6==0) //UART2PutString((Int08U*)"Running...\n");即不再通過串口2向上位機發送“Running…”的功能,其位置如下圖所示。將文件adc.c添加到工程管理器的BSP分組下。9工程PRJ19實現的功能如下圖所示,圖中只展示了工程PRJ19在工程PRJ15基礎上新添加的功能。ADC工程實例10在用戶按鍵S18的中斷服務函數EXTI9_5_IRQHandler中,添加了MyADCStart函數,當S18被按下時,將啟動STM32F103RCT6微控制器的ADC1轉換,當模數轉換完成后,自動觸發ADC1中斷服務程序ADC1_2_IRQHandler,在其中讀取模擬電壓的數字信號量,保存在myadcv全局變量中,并進一步調用MyADCValDisp函數將數字電壓通過串口2送到上位機(計算機)顯示出來,其結果如右圖所示。ADC工程實例11下面詳細介紹文件myadc.c和myadc.h的內容,分別如下面的程序段所示。ADC工程實例12ADC工程實例13ADC工程實例14下面介紹庫函數類型的ADC工程。在工程PRJ16的基礎上新建工程PRJ20,保存在“D:\STM32F103RCT6PRJ\PRJ20”目錄下,此時的工程PRJ20與PRJ16完全相同。然后,進行如下的工作:(1)修改文件includes.h、bsp.c、exti.c和tim2.c,其中includes.h和bsp.c與工程PRJ19中的同名文件相同,即在includes.h的末尾添加“#include"adc.h"”,在bsp.c文件中的BSPInit函數內部的末尾添加“MyADCInit();”。在exti.c文件的中斷服務函數EXTI9_5_IRQHandler中添加語句“MyADCStart();”,右面的程序段僅列舉了該中斷服務函數的內容:ADC工程實例15(2)添加新文件adc.h和adc.c,其中adc.h與程序段8-2完全相同,文件adc.c如下面的程序段所示。ADC工程實例16ADC工程實例17(3)將adc.c文件添加到工程管理器的“BSP”分組下,將目錄“D:\STM32F103RCT6PRJ\PRJ20\STM32F10x_FWLib\src”下的文件stm32f10x_adc.c添加到工程管理器的“LIB”分組下,編譯鏈接并運行工程PRJ20,其運行結果與工程PRJ19相同。ADC工程實例8.2EEPROM存儲器1819AT24C128內部ROM容量為131072b,即16384B,被分成256頁,每頁64B。因此,AT24C128的地址長度為14位(被稱為字地址),其中,8位用于頁尋址,6位用于頁內尋址。AT24C128寫入數據方式有兩種,即整頁寫入數據和單個字節寫入數據;其讀出數據方式有三種:當前地址讀出數據、隨機地址讀出數據和順序地址讀出數據。為了節省篇幅,這里僅介紹常用的單個字節寫入數據和隨機地址讀出數據的編程方法,這兩種方法可以實現對AT24C128整個ROM空間任一地址的讀寫操作。單個字節寫入數據和隨機地址讀出數據的時序如下圖所示。EEPROM存儲器20STM32F103RCT6微控制器的I2C1接口模塊支持通過I2C通信協議訪問AT24C128芯片,此時,I2C1接口模塊工作在主模式下,如下圖所示。EEPROM存儲器21下面將討論上圖中各個寄存器的含義,如下面的表所示,I2C1模塊的基地址為0x40005400。EEPROM存儲器22本小節介紹訪問AT24C128存儲器的寄存器類型實例,其建設步驟如下:(1)在工程15的基礎上,新建工程“PRJ21”,保存在“D:\STM32F103RCT6PRJ\PRJ21”目錄下。此時的工程PRJ21與工程PRJ15完全相同,然后,進行后續工作。(2)新建文件iic1.c和iic1.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ21\BSP”下,其源代碼如下面的程序段所示。訪問EEPROM寄存器類型實例23訪問EEPROM寄存器類型實例24訪問EEPROM寄存器類型實例25訪問EEPROM寄存器類型實例26訪問EEPROM寄存器類型實例27訪問EEPROM寄存器類型實例28訪問EEPROM寄存器類型實例(3)修改includes.h文件,其源代碼如右面的程序段所示。29訪問EEPROM寄存器類型實例(4)修改bsp.c文件,其源代碼如右面的程序段所示。30訪問EEPROM寄存器類型實例(5)修改main.c文件,其源代碼如右面的程序段所示。31訪問EEPROM寄存器類型實例(6)將文件iic1.c添加到工程管理器的“BSP”分組下。完成后的工程PRJ21如下圖所示。32訪問EEPROM寄存器類型實例在上圖中,編譯鏈接并在線仿真工程PRJ21,在程序段的第26行設定斷點,運行到斷點處后,可以得到如下圖所示的“Watch1”窗口結果。由圖可知,寫入AT24C128和讀出AT24C128的操作均正確。33訪問EEPROM庫函數類型實例本小節介紹訪問AT24C128的庫函數類型的工程實例,其建設步驟如下:(1)在工程PRJ16的基礎上,新建工程“PRJ22”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ22”下。此時的工程PRJ22與工程PRJ16完全相同,然后,進行后續工作。(2)新建文件iic1.c和iic1.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ22\BSP”下。34訪問EEPROM寄存器類型實例35訪問EEPROM寄存器類型實例36訪問EEPROM寄存器類型實例37訪問EEPROM寄存器類型實例(3)修改includes.h文件。(4)修改bsp.c文件。(5)修改main.c文件。(6)將文件iic1.c添加到工程管理器的“BSP”分組下,將目錄“D:\STM32F103RCT6PRJ\PRJ17\STM32F10x_FWLib\src”下的文件stm32f10x_i2c.c添加到工程管理器的“LIB”分組下。8.3FLASH存儲器3839FLASH存儲器STM32F103RCT6微控制器具有3個同步串行口,其中有2個復用了I2S協議接口。在STM32F103RCT6學習板上,SPI2口與FLASH存儲器W25Q64相連接。本節將以SPI2口為例詳細介紹SPI通信協議、工作時序和STM32F103RCT6微控制器通過SPI2口訪問Flash存儲器W25Q64的程序設計方法。40STM32F103同步串行口STM32F103RCT6微控制器的SPI2口具有4個功能引腳,其中STM32F103RCT6工作在主機模式,W25Q64為從機模式,各個功能引腳的定義如下表所示。41STM32F103同步串行口根據SPI2_SCK信號的時鐘極性CPOL和相位CPHA,SPI工作協議有4種工作模式。這里,設定CPOL=1和CPHA=1,此時SPI的工作時序如下圖所示(摘自STM32F103參考手冊)。42STM32F103同步串行口STM32F103RCT6微控制器的SPI模塊結構如下圖所示。43STM32F103同步串行口下面詳細介紹SPI模塊的各個寄存器的情況。SPI2模塊的基地址為0x40003800,與APB1外設總線(最高36MHz,這里為32MHz)相連接。44STM32F103同步串行口45W25Q64訪問控制W25Q64為64Mb(即8MB)的串行接口FLASH存儲芯片,工作電壓為3.3V,與微控制器STM32F103RCT6的電路連接如圖3-7和圖3-2所示。當采用標準SPI模式訪問W25Q64時,其各個引腳的含義為:CS表示片選輸入信號(低有效),CLK表示串行時鐘輸入信號,DI為串行數據輸入信號,DO為串行數據輸出信號,WP表示寫保護輸入信號(低有效),VCC和GND分別表示電源和地。STM32F103RCT6通過PB12、PB13(SPI2_SCK)、PB15(SPI2_MOSI)和PB14(SPI2_MISO)四根線實現對W25Q64的讀/寫訪問,指令、地址和數據在CLK上升沿通過DI線進入W25Q64,而在SCK下降沿從W25Q64的DO線中讀出數據或狀態字。46W25Q64訪問控制W25Q64芯片容量為8MB,分為32768個頁,每個頁256B。向W25Q64芯片寫入數據,僅能按頁寫入,即一次寫入一頁內容。在寫入數據(稱為編程)前,必須首先對該頁擦除,然后才能向該頁寫入一整頁的內容。對W25Q64的擦除操作可以基于扇區或塊,每個扇區包括16個頁,大小為4KB;每個塊包括8個扇區,大小為32KB;甚至可以整片擦除。對W25Q64的讀操作,可以讀出任一地址的字節,或一次讀出一個頁的內容。W25Q64的編址分為頁地址(16位)和字節地址(8位),通過指定一個24位的地址,可以讀出該地址的字節內容。47W25Q64訪問控制W25Q64具有2個8-bit的狀態寄存器:狀態寄存器1和狀態寄存器2。狀態寄存器1第0位為只讀的BUSY位,當W25Q64為忙時,讀出該位的值為1;當W25Q64空閑時,讀出該位的值為0。狀態寄存器1的第1位為只讀WEL位,當可寫入時WEL為1,當不可寫入時WEL為0。狀態寄存器1的第6:2位域均寫入0,表示非寫保護狀態;第7位SRP0寫入1,該位與狀態寄存器2的第0位SRP1(該位寫入0),組合在一起表示可寫入模式。狀態寄存器2的第7:2位保留,終始為0;第1位為QE位,寫入0表示為標準SPI模式。因此,初始化W25Q64時,狀態寄存器1和2應分別寫入0x80和0x00。48W25Q64訪問控制W25Q64具有27條操作指令,下面介紹常用的幾條,如下表所示。表中讀器件ID號指令讀出的W25Q64的ID號為0xEF16。49W25Q64訪問控制W25Q64整片擦除的工作流程如下圖所示。50W25Q64訪問控制W25Q64芯片4kB扇區擦除的工作流程如下圖所示。51W25Q64訪問控制W25Q64的頁編程工作流程如下圖所示。52訪問FLASH存儲器寄存器類型工程實例工程PRJ23的具體實現步驟如下:(1)在工程PRJ21的基礎上,新建工程“PRJ23”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ23”下。此時的工程PRJ23與工程PRJ21完全相同,然后,進行后續步驟。(2)新建文件spiflash.c和spiflash.h文件,保存在“D:\STM32F103RCT6PRJ\PRJ18\BSP”目錄下。53訪問FLASH存儲器寄存器類型工程實例54訪問FLASH存儲器寄存器類型工程實例55訪問FLASH存儲器寄存器類型工程實例56訪問FLASH存儲器寄存器類型工程實例57訪問FLASH存儲器寄存器類型工程實例58訪問FLASH存儲器寄存器類型工程實例59訪問FLASH存儲器寄存器類型工程實例60訪問FLASH存儲器寄存器類型工程實例(3)修改includes.h文件,如右面程序段所示。61訪問FLASH存儲器寄存器類型工程實例(4)修改bsp.c文件,如下面程序段所示。62訪問FLASH存儲器寄存器類型工程實例(5)修改main.c文件,如下面程序段所示。63訪問FLASH存儲器寄存器類型工程實例64訪問FLASH存儲器寄存器類型工程實例(6)將文件spiflash.c添加到工程管理器的“BSP”分組下。完成后的工程PRJ23如下圖所示。65訪問FLASH存儲器寄存器類型工程實例(7)寫入W25Q64中的數據,在系統掉電后仍然保存著,一般地,W25Q64能有效存儲數據20年,存取次數可達10萬次。現在將程序段中第27~32行全部注釋掉,并將STM32F103RCT6學習板斷開電源幾分鐘后再次上電,再次借助ULINK2在線仿真工程PRJ23,可以看到變量wdat和數組WDat2中的數據仍然是正確的,如右圖中“Watch1”窗口所示。66訪問FLASH存儲器庫函數類型工程實例本小節介紹讀寫W25Q64存儲器的庫函數類型工程實例,具體建設步驟如下:(1)在工程PRJ22的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年普通高等學校招生全國統一考試數學模擬試題(五)(含答案)
- 鐵路旅客運輸服務鐵路客運列車服務工作課件
- 投資房購房合同
- 鐵路超限超重貨物運輸電報鐵路超限超重貨物確認電報的識讀
- 提速道岔轉轍機調整信號工程施工課件
- 瀝青防水改色施工方案
- 中國書法文化課件
- 中華傳統文化課件教學
- 餐飲投資合同
- 東南大學基礎工程課件
- 2025屆上海市浦東新區高三二模英語試卷(含答案)
- 【MOOC】航空燃氣渦輪發動機結構設計-北京航空航天大學 中國大學慕課MOOC答案
- 職業衛生評價考試計算題匯總
- 新蘇教版六年級下冊科學綜合測試卷(單元+期中+期末)
- 國開經濟學(本)1-14章練習試題及答案
- 個人財產申報表
- golf高爾夫介紹課件
- 中國古代文學史(二)正式課件
- 物業管理服務品質檢查表
- JJF 1318-2011 影像測量儀校準規范-(高清現行)
- 動火安全作業票填寫模板2022年更新
評論
0/150
提交評論