經(jīng)過昨天對(duì)熱啟動(dòng)和冷啟動(dòng)分析,芯哥奇怪的發(fā)現(xiàn)冷啟動(dòng)是專為下載程序而設(shè)計(jì),熱啟動(dòng)一共有4種方式,這4種方式中有一項(xiàng)啟動(dòng)復(fù)位過程和冷啟動(dòng)一模一樣。芯哥瞬間覺得如果復(fù)位啟動(dòng)過程一模一樣,那是不是意味著可以使用熱啟動(dòng)來實(shí)現(xiàn)下載程序。
既然這兩種復(fù)位啟動(dòng)過程是一樣的,只不過實(shí)現(xiàn)的方式不一樣。那就來具體分析一下這個(gè)過程。熱啟動(dòng)中是通過對(duì)ISP_CONTR寄存器操作為60H數(shù)據(jù)即可產(chǎn)生軟復(fù)位,就實(shí)現(xiàn)和冷啟動(dòng)一樣的過程。而冷啟動(dòng)是通過對(duì)單片機(jī)進(jìn)行無電到有電的操作實(shí)現(xiàn)硬復(fù)位所以是不是只要在需要下載程序的時(shí)候,對(duì)ISP_CONTR寄存器操作為60H數(shù)據(jù)就會(huì)出現(xiàn)下載程序的可能呢?那么首先要清楚ISP_CONTR寄存器如何操作。這里就涉及到寄存器的操作方法,如果你是直接學(xué)習(xí)STM32的同學(xué),我想這個(gè)過程你可能無法理解。這就是為什么要學(xué)好底層操作的原因之一。所以直接在官方手冊(cè)中查找ISP_CONTR寄存器相關(guān)介紹。這里要關(guān)心幾個(gè)信息是:1寄存器的地址:想對(duì)任何寄存器進(jìn)行操作,必須知道寄存器的地址。2寄存器需要操作的數(shù)據(jù):前面已經(jīng)看到需要對(duì)ISP_CONTR寄存器寫入60H。
接下來就是操作過程了。首先新建一個(gè)工程,這個(gè)操作就不演示了,很簡(jiǎn)單,不會(huì)的同學(xué)要先入門。在工程項(xiàng)目頭文件reg52.h中會(huì)定義單片機(jī)相關(guān)的寄存器。但是發(fā)現(xiàn)并沒有關(guān)于ISP_CONTR寄存器的定義,那就只能自己寫了。
想要操作單片機(jī)寄存器,需要知道ISP_CONTR寄存器的地址。從數(shù)據(jù)手冊(cè)中看到ISP_CONTR寄存器地址為E7H。
接下來在程序中,定義ISP_CONTR寄存器。sfr是用來定義寄存器的,這里可以看到將E7H地址對(duì)應(yīng)的寄存器命名為ISP_CONTR。當(dāng)前名稱可以隨便去起。
sfr ISP_CONTR=0xE7;
接下來設(shè)計(jì)一個(gè)按鍵,用于在需要下載程序時(shí),通過按下按鍵后,控制ISP_CONTR寄存器為60H。
if(key1==0)
{ delay_ms(5); if(key1==0) { while(key1==0); ISP_CONTR=0x60; }}
接下來進(jìn)行測(cè)試,燒寫如代碼后,單片機(jī)一致保持通電狀態(tài)。
接下來點(diǎn)擊ISP下載按鈕,軟件提示正在檢測(cè)目標(biāo)單片機(jī)。
這個(gè)時(shí)候不需要對(duì)系統(tǒng)進(jìn)行冷啟動(dòng),只需要按下按鍵即可實(shí)現(xiàn)下載。并且提示操作成功。
是不是可以通過這種方式研究一下OTA升級(jí)呢?