由於stm32交期太長,產品需要更換晶元。國產晶元有數家可選,gd32、mm32、at32等等。
當前我使用的是gd32,在國產晶元中算比較好的了。不過在移植過程中,也遇到過奇奇怪怪的問題,下面總結一下踩過的坑。
第一次移植gd時,沒有完全移植,只是部分外設移植,導致配置混亂。
stm和gd在暫存器命名上有區別,部分暫存器gd專用,導致配置困難,所以,最後進行了完全移植。
gd和st的一些差異
下面重點說明一些gd32f130x移植時遇到的問題
移植初期,一切順利,定時器,adc,i2c,usart等等都能正常工作。但是等到產品測試時,各種問題體現出來,如串列埠不正常,宕機,lcd螢幕顯示異常等等,折騰了很久,沒有一點進展。
通過分析,首先發現串列埠總是溢位錯誤(usart_flag_orerr),進入溢位中斷,由於沒有清除這個中斷標誌,導致停頓到串列埠中斷中。
串列埠溢位錯誤,是不應該發生的,意味著資料接收出錯。這個問題前後折騰了很久,沒有找到出錯原因,最後提高主頻,發現串列埠不在產生溢位錯誤。
接著又出現宕機問題。****後,發現總是進入 hardfault_handler中斷中,通過跟蹤**,發現進入中斷前,要麼在乙個lcd顯示函式中死迴圈,要麼從這個函式中進入硬體錯誤中斷中。**lcd**本身邏輯沒有問題,也不會產生陣列越界等問題,問題困擾很久。
通過了解後,gd說64k的flash的後32k執行**會比較慢。我檢視了生成的**,是50k左右,我通過刪減**,控制在32k以下,晶元不會宕機。
所以懷疑,串列埠出錯,可能是執行**的速度跟不上中斷響應速度,導致串列埠資料錯誤,lcd顯示時會操作i2c,也會對通訊造成錯誤導致,接下來就開始驗證這個想法。
最後提高主頻,修改stc檔案,雙管齊下,徹底解決以上所有問題。
一下是移植時除錯**
usart
在串列埠中斷中,總是有益處錯誤,清除這個錯誤雖然能繼續響應中斷,但是串列埠資料錯誤是不能接受的,最後這個方法行不通,這個**最後是不應該有的。
if
(usart_flag_get
(usart0,usart_flag_orerr)
!= reset)
}
stc檔案
把需要快速響應的**,即中斷函式等,置於前32k中
lr_irom1 0x08000000
0x10000
er_irom2 0x08008000
0x8000
rw_iram1 0x20000000
0x00002000
}
續貸… GD32F20x系列使用問題總結
gd微控制器近幾年越來越火了,既有他自身相比與st的 優勢,也有支援國貨的信仰加成。然而乙個新的東西,或者說乙個相對較新的東西,在使用的友好性和資料的完整性方面還有很長的路要走。現將個人使用過程中碰到過的問題總結一下 1 jlink燒錄和除錯問題 這個問題非常坑!以致於後面在錯誤的道路上浪費了大量的...
STM32F10x程式移植到GD32E10x
前言 兩個晶元是pin to pin的,因此硬體基本不用修改,只需修改軟體即可。1 開發化境 ide iar,mdk 2 資料型別定義 在stm32早期的庫中使用了u8,u16,u32等資料型別,需要在gd32e10x.件中定義u8,u16,u32等資料型別。3 時鐘配置 根據硬體設計,在syste...
兆易創新 GD32F103系列
北京兆易創新科技股份 成立於2005年4 月,是一家以中國為總部的全球化晶元設計公司。公司致力於各類儲存器 控制器及周邊產品的設計研 發,已通過 sgs iso9001 及iso14001 等管理體系的認證,研發人員佔全員比例 62 在中國 南韓 美國等多個國家設有分支機構,營銷網路遍布全球,為我們...