一、引出(iap的原理和stm8上實現iap的問題)
因為stm32有位址偏移暫存器scb->vtor,當發生中斷時,stm32會去scb->vtor讀取中斷向量表的位址。執行上面的語句後,發生中斷時就會到flash_base | 0x4000位址去查詢中斷服務函式位址。
二、stm8的iap
讀函式、解鎖、上鎖、寫函式為:
//讀出乙個32位數
uint32_t flash_read(uint32_t address)
//解鎖flash,在寫flash前,只需要在iap中呼叫一次
void flash_unlock(flash_memtype_typedef flash_memtype)
//flash上鎖,寫完flash後,呼叫一次
void flash_lock(flash_memtype_typedef flash_memtype)
//往flash中寫入乙個8位數
void flash_programbyte(uint32_t address, uint8_t data)
//往flash中寫入乙個32位數
void flash_programword(uint32_t address, uint32_t data)
改寫iap向量表的函式為:
void stm8_handeriqr_init(void)
flash_lock(flash_memtype_prog);
}
void jpmainprogram(void)
最後:
stm8的flash很小,建議使用暫存器操作,不要用庫函式,否則不好控制**大小。
iar的swim**對於memory的支援不是很好,當呼叫上面的函式改寫flash後,從memory視窗上看可能並未改變,但實際上已經被改寫了。(本人被坑了半天)
ISP 和 IAP 工作原理
一 isp in system programming,在系統程式設計 pc 機通過串列埠把 bin hex 檔案直接燒錄到微控制器內部 flash 中,比如利用 jlink 或者 usb 轉 ttl 進行燒錄。1 在實現 iap 功能時,微控制器內部一定要有兩塊儲存區,一般一塊被稱為 boot 區...
STM32的IAP韌體公升級
an2606 system memory boot mode an3155 usart for bootloader 指令集詳解 an2557 iap using usart 將0x08000000開始的main memory空間劃分為兩部分,其中低位址空間用於儲存iap driver,剩餘空間用於...
關於STM32的IAP和flash的坑
我用的是stm32f103,正點原子的庫函式版本。剛開始用的用的是stm32c8t6,後來發現程式編譯完都有28k,flash總共64k,考慮的要iap,換了stm32cbt6,封裝都是 lqfp 48的,但是flash大一點,貴一點,咋們不差錢,免得後面不夠用 最後換了國產gd32cbt6 2k留...