![]() |
發(fā)布時間: 2023-5-11 12:38
正文摘要:進入中斷l(xiāng)ed燈關閉,中斷返回led燈。中斷入口地址不知道怎么寫。 以下是程序 RCCAPB2_ENR EQU 0X40021018 GPIOC_CRH EQ ... |
lyonkon 發(fā)表于 2023-5-13 23:12 你看的視頻教程講的是ARMv3~v5體系結構,中斷向量表跟51類似,要放跳轉指令。而STM32是v6(Cortex-M0)或v7(Cortex-M3以及更以后的產(chǎn)品)體系,中斷向量表里面只有地址沒有指令。 你要么不看書,不看例程,現(xiàn)在稍微進步了,開始看視頻學了,又找到了錯誤的視頻,你到底是怎么做到無論怎么做都是錯的呢??? |
yzwzfyz 發(fā)表于 2023-5-12 10:57 STM32有“手冊”,但是全英文的,很難翻譯,能看懂原文不需要翻譯,對于看不懂的人來說,就算是最好的翻譯,翻譯過來也看不懂。現(xiàn)在只有《cortex-m*權威指南》一本科普讀物介紹STM32匯編,請問你看的是什么“手冊”? |
51:是到指定的地方去運行: 32:是到指定的地方取地址,再到這個地址處運行。這個指定的地方叫中斷向量。 單片機復位也有多種形式: 51:是0000H處執(zhí)行。 32:是到00000004H處取4個字節(jié)作為地址,再到這個地址處運行。 6502:是到FFFEH處取2個字節(jié)作為地址,再到這個地址處運行。MSP430普通運行也如此。 MSP430:有兩個起動地址源,從哪個源起動運行,由RESET和TEST引腳上的信號決定。 這些都需要你讀CPU的手冊,CPU手冊讀多了,讀通了,你也就趨于高手了。 記住:多讀芯片手冊。 |
不是放跳轉指令!而是放目標地址。 由于你是用【標號】來表址的,所以在地址位置上,寫入【標號】即可,剩下的事讓編譯器替你做。 有些頭文件中,已經(jīng)將中斷向量的【標號】定義好了。如果你INCLUDE了這個頭文件,那么直接引用它定義的【標號】也可以。 STM32執(zhí)行中斷的過程序: 1、保護現(xiàn)場(與你無關)。 2、從中斷源地址中取出4個字節(jié)組成一個32的地址(這個地址由你事先放置),放入PC指針中,即執(zhí)行了跳轉(至中斷響應地址)!如果你的CPU地址不足32位,則高位自動丟棄。 3、執(zhí)行PC指向的中斷服務程序…… 4、遇到RETI時,恢復現(xiàn)場(與你無關),并從現(xiàn)場中取出中斷前的地址,送入PC,即中斷返回。 |
那個s文件里面有了完整的中斷處理程序,你不去看,反而像個沒頭蒼蠅一樣四處碰壁有意思嗎?照著startup_stm32f10x_md.s里面的中斷處理程序寫你自己的中斷處理程序,然后去掉weak屬性即可。那個weak屬性是在連接obj文件的時候,遇到同名的兩個模塊,直接去掉有weak屬性的那個,使用沒有weak屬性的,連warning都不會有。 |
yzwzfyz 發(fā)表于 2023-5-11 14:34 請問,EXTI0 中斷地址是0x00000058 , 中斷地址當中放一條跳轉指令。在程序中用什么語句 或者方法才能做到 。 |
讀STM32的手冊,手冊上有。 從地址0起,每四個字節(jié)中的數(shù)據(jù),構成一個32位的地址,這個地址就是中斷向量,即這個中斷被響應后,要去運行的地方。 |
圖中你選定的那個s文件就是中斷入口。早就跟你說過了,匯編完全不通用,你要忘掉以前學過的其他平臺全部匯編知識,重新學一門新的匯編才可以。你還是用51匯編那一套寫出不堪入目完全不能用的代碼。 |
Powered by 單片機教程網(wǎng)