1. 程式人生 > >STM32 IAP程式相關記錄

STM32 IAP程式相關記錄

在做STM32 IAP程式時,遇到一些問題,在這裡記錄,供分享。

1. 當程式跟新成功,執行跳轉後,程式不能執行,原因是程式開啟了一些外設,會發生中斷。可採用 __disable_irq() ,但是否為最佳的方法,還有待驗證。有論壇上說__disable_irq()只是禁止CPU響應中斷,當發生中斷,響應的中斷標誌還會置位,所以當使用__enable_irq()開啟中斷後,由於相應的中斷標誌沒有清空,因而還會觸發中斷。

2. 在跳轉前,關閉了某個外設,USART_Cmd(USART1,DISABLE); ,在APP程式中可能造成這個外設不能使用。解決辦法有待研究

3.在進行flash寫操作時,建議查詢返回值,可能會出現錯誤。

ret = FLASH_ProgramHalfWord(WriteAddr,pBuffer[i]);

4. 當定義了一個超大的全域性陣列時,IAR編譯報錯          

unable to allocate space for sections/blocks with a total estimated minimum size of 0xfcac bytes (max align 0x8) in <[0x20000000-0x2000bfff]> (total uncommitted 

記憶體範圍超出了STM32的RAM  ,但是MDK並沒有報錯

5.在MDK中可使用   __attribute__ ((at(0X20001000))) 指定變數位置,在IAR中使用@(0X2001000)

6. 在跳轉前加入 asm("CPSID  I");,在app程式中加入asm("CPSIE  I");解決跳轉後中斷失靈