stm32怎么把數(shù)據(jù)轉(zhuǎn)換成內(nèi)存 stm32boot有什么用?
stm32boot有什么用?BOOT0和BOOT1用于設(shè)置STM32的啟動(dòng)模式:一般情況下,如果要通過串口下載代碼,必須將BOOT0配置為1,BOOT1配置為0。如果我們想讓STM32一鍵閃存是電可擦
stm32boot有什么用?
BOOT0和BOOT1用于設(shè)置STM32的啟動(dòng)模式:
一般情況下,如果要通過串口下載代碼,必須將BOOT0配置為1,BOOT1配置為0。如果我們想讓STM32一鍵閃存是電可擦閃存,也就是u盤,存儲(chǔ)卡系統(tǒng)內(nèi)存:指的是存儲(chǔ)系統(tǒng)數(shù)據(jù)的存儲(chǔ)區(qū)域,比如BIOS,嵌入式SRAM是一種靜態(tài)存儲(chǔ)數(shù)據(jù)的內(nèi)存技術(shù)。你不 不需要像DRAM那樣經(jīng)常用電刷新,可以長時(shí)間保存數(shù)據(jù)位密鑰,開始運(yùn)行代碼。需要將BOOT0配置為0,BOOT1可以隨意設(shè)置。
STM32中,寄存器可按字、半字、字節(jié)的方式訪問怎么理解?
這個(gè)問題有點(diǎn)混亂,因?yàn)锳RM是32位的,它的寄存器都是按照32位預(yù)定義的。所以就ARM寄存器而言,都是32位讀寫。而FLASH的其他部分,如ROM、RAM等,可以按字、半字、字節(jié)讀寫。但也要注意效率的問題。
在某些ARM系統(tǒng)中,一次讀寫16位或32位甚至64位的效率是一樣的,一次可以讀取,但是讀取8位數(shù)據(jù)可能會(huì)慢一些,占用更多的CPU時(shí)間。這就提醒我們,在使用ARM的時(shí)候,最好定義16位或者32位的變量,這些變量的特點(diǎn)是臨時(shí)變量,沒有必要定義8位的變量。
對(duì)于8位單片機(jī)來說,一次讀寫8位和16位的效率要比讀32位好,這也是寫程序時(shí)要注意的,雖然影響很小。
一個(gè)字是32位,一次處理4個(gè)字節(jié)長的數(shù)據(jù)。半字是16位,2個(gè)字節(jié)。字節(jié)是8位。與傳統(tǒng)的arm相比,stm32最大的優(yōu)勢是不需要使用,三類數(shù)據(jù)可以無縫存儲(chǔ)在內(nèi)存中。但是傳統(tǒng)的arm7或者arm9是按照地址對(duì)齊的,也就是說無論8bit還是16bit的數(shù)據(jù),都要占用4個(gè)字節(jié)的空間,造成內(nèi)存的浪費(fèi)。
請教單片機(jī)掉電后,如何快速的保存數(shù)據(jù)問題?
針對(duì)題目的問題,我認(rèn)為應(yīng)該從以下幾個(gè)方面著手:
盡量使用內(nèi)部閃存存儲(chǔ)數(shù)據(jù)。內(nèi)部flash讀寫速度快,可靠性高。
如果使用外部flash或eeprom進(jìn)行存儲(chǔ),flash通常是一個(gè)spi接口??紤]到電磁干擾和MCU的響應(yīng)速度,即使使用MCU的硬件SPI模塊進(jìn)行通信,SPI的最大時(shí)鐘也在1MHz左右,發(fā)送一個(gè)字節(jié)的數(shù)據(jù)大約需要10us。不考慮擦除閃存的時(shí)間,存儲(chǔ)100字節(jié)的數(shù)據(jù)大約需要5ms。如果考慮可靠性,需要閱讀和驗(yàn)證。
Eeprom一般采用IIC接口,類似于SPI接口。與高速IIC通信并存儲(chǔ)100字節(jié)的數(shù)據(jù)至少需要5毫秒。
FLASH的特點(diǎn)是寫數(shù)據(jù)只能從1重寫到0,從0重寫到1需要擦除整個(gè)頁面,或者整個(gè)扇區(qū),或者整個(gè)塊。
以STM32F051為例。一個(gè)頁面是1kb,一個(gè)塊是64kByte。擦除一頁大約需要20毫秒。在整個(gè)擦除過程中,整個(gè)MCU被掛起,即不執(zhí)行任何操作。另一方面,閃存是一種快速寫入操作,一個(gè)字節(jié)大約需要1us。
需要掉電檢測電路,掉電檢測需要檢測給MCU供電的LDO或DC-DC的前級(jí)電壓。
比如MCU采用12V-3.3V LDO供電,需要檢測12V的電壓來決定是否斷電。
通過電阻分壓12V的電壓,然后連接到MCU的A/D檢測口,判斷是否斷電。
MCU供電的LDO或DC-DC的前級(jí)并聯(lián)足夠的電容,保證電容的供電能保證MCU能寫數(shù)據(jù)。
電容器的尺寸可通過以下步驟確定:
評(píng)估斷電時(shí)前一電壓提供的工作電流。一旦單片機(jī)檢測到掉電,就需要切斷耗電輸出,比如控制繼電器輸出的I/O口。比如20mA。
確認(rèn)LDO的最低輸入電壓,如5.3。
確認(rèn)判斷斷電的電壓,如10V,確認(rèn)斷電開始與LDO最低輸入電壓的電壓差,如4.7V
確認(rèn)寫入所有數(shù)據(jù)所需的時(shí)間,例如20 ms。
根據(jù)公式CI*T/U20mA*20mS/4.7V85uF計(jì)算所需電容,可選擇100uF的電容。
一旦MCU檢測到掉電,需要切斷耗電輸出,比如控制繼電器輸出的I/O口需要立即斷開。
在正常操作中,預(yù)先準(zhǔn)備一個(gè)存儲(chǔ)空間并將其擦除到0xFF中。
檢測到掉電后,可以直接寫入數(shù)據(jù),無需擦除FLASH內(nèi)容,可以節(jié)省大量時(shí)間。