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