單片機(jī)上電后內(nèi)部發(fā)生的事情
單片機(jī)上電后,如果晶振正常起震的話,cpu就會(huì)在晶振的驅(qū)動(dòng)下開始工作,cpu的工作就是在每個(gè)機(jī)器周期到指定的地方提取指令,然后解析并執(zhí)行,51單片機(jī)只有一個(gè)時(shí)鐘源所以51單片機(jī)永遠(yuǎn)只能以一種時(shí)鐘頻率工作,單片機(jī)一上電單片機(jī)的頻率就固定了不能更改了,上電后單片機(jī)就以固定的頻率開始工作了,因此51單片機(jī)也沒有配置系統(tǒng)時(shí)鐘的寄存器,stm32等高級(jí)單片機(jī)就不一樣了,這種單片機(jī)有多個(gè)時(shí)鐘源,上電后單片機(jī)以某種固定的時(shí)鐘頻率開始工作,到指定的地址提取指令,然后解析并執(zhí)行,在后面的程序中可以更改系統(tǒng)的工作時(shí)鐘與工作頻率,
除非是沒有晶振提供時(shí)鐘,或者是系統(tǒng)沒有上電,否則cpu是不可能停止工作的,cpu的任務(wù)就是不停的提取指令,然后解析并執(zhí)行,而且單片機(jī)在我們下載程序之前,就已經(jīng)有程序了,出廠之前廠家就已經(jīng)下載了一部分程序在單片機(jī)里面。單片機(jī)上電之后就會(huì)先執(zhí)行這部分程序。例如:stm32系統(tǒng)存儲(chǔ)器中的用于ISP串口下載的bootloard程序,這段代碼的任務(wù)是與下載器通訊將用戶寫得代碼下載到指定地方。
stm32上電后可能在三個(gè)不同的地址開始提取指令并解析執(zhí)行,
一:用戶FLASH;里面裝載的是用戶下載的程序,如果沒有程序或者程序不正確,單片機(jī)將會(huì)跑飛,
二:系統(tǒng)存儲(chǔ)器:里面出廠前下載了用于ISP串口下載的bootloard程序,這段代碼的任務(wù)是與下載器通訊將用戶寫得代碼下載到指定地方。如果這部分代碼被破壞這個(gè)單片機(jī)將再也不能通過串口下載程序了。
三:片上內(nèi)存SRAM;內(nèi)存中的代碼是掉電不保存的,如果從這里啟動(dòng), 單片機(jī)將會(huì)跑飛 因?yàn)閺?fù)位后的內(nèi)存里面存的都是111111,cpu不認(rèn)識(shí)這些是什么意思。