從STM32編程手冊中,可以知道:在進行寫或擦除操作時,不能進行代碼或數據的讀取操作。
比如:你在寫Flash期間有接收串口數據,很有可能會丟串口數據。
因為比較耗時,所以,在寫數據時,CPU不會執行其他操作。
簡單說:在寫Flash時,CPU 不能取指令,導致中斷得不到及時響應,從而發生接收到的數據未及時讀走而被覆蓋的現象。
遇到這種情況,解決的辦法:使用DMA。DMA不需要CPU干預,一旦 USART 有數據接收到,由 DMA 負責將其傳輸至循環緩沖區中。軟件定期檢測循環緩沖區中是否有接收到的數據,如果有則加以處理。
提示:
如果你的代碼會反復讀Flash,建議使用外部Flash。
轉載自:strongerHuang