前言
目前大形勢影響,芯片價格日益上漲,采購周期變長,導致國產芯片替代進口芯片成為大趨勢,該文章記錄了使用國民技術的N32替換STM32的操作流程。
話不多說,上步驟。
一、工程配置
1.安裝硬件庫
硬件庫為廠家提供的資料,如下圖所示,雙擊安裝,使得keil能夠找到該芯片。
2.更改J-Flash配置
由于Keil官方沒有對該芯片的支持,所以J-Link下載時也無法找到該芯片,所以需要手動添加芯片。更改步驟官方提供有說明文檔。
主要步驟是:
修改JLinkDevices配置文檔
添加Nationstech的JFlash 工程文件
添加解鎖Nationstech芯片讀保護L1 等級的應用程序
進行如上步驟后,啟動J-Flash就能夠掃描并連接到芯片,但是有可能keil鏈接的J-Flash和安裝的J-Flash不是一個路徑,所以將配置好的J-Flash文件替換keil下Keil5ARMSegger目錄文件,就能夠正常下載調試。
3.更改芯片
4.添加驅動文件
將N32的底層驅動庫拷貝到工程目錄下,并將include路徑添加進去。
5.更改全局變量
6.將啟動文件和驅動文件替換為N32庫文件
7.將所有的stm32l1xx替換為n32g45x
二、底層驅動函數接口對照表
更改代碼,將STM32的驅動函數替換為N32的驅動函數,這部分比較繁瑣,需要慢慢替換,下面是我整理的替換對照表。
三、踩坑記錄
經過上面的替換,應該可以編譯過去了,但是這指示開始,后面悲劇的踩坑大戰才剛剛開始。
1.仿真卡死
程序仿真卡死,單步調試發現卡死在OSInit()函數里面,這個函數是OS的初始化函數,所以應該是OS配置的問題,排查下來發現是啟動文件里面的OS啟動項沒有更改,更改如下:
2.DMA配置出錯
程序能夠進入到任務中后,調試發現無法進入到串口接收中斷,但是示波器中有數據,而且中斷都沒有進入,應該是卡死在優先級高的中斷中,排查發現,是DMA發送中斷的配置有問題,導致一直卡死在DMA中斷中。下面是DMA部分的配置。
3.Flash配置
由于國民芯片和STM32芯片的FLASH劃分有區別,所以FLASH的替換是比較費事的部分,先對比一下兩個片子的區別:
STM32L151的flash部分:
N32G455芯片的flash部分:
可以看出STM32單獨有EEPROM的劃分,而N32是沒有的,只有flash部分。所以要注意兩點:
Flash空間的問題,STM32可用空間要比N32的空間大;
底層接口函數,STM32有操作EEPROM的函數,而N32沒有,只能使用flash操作函數。
下面是flash部分的操作:
4.bootloader移植
由于本項目采用bootloader引導主程序的方式,因此要注意燒寫空間的配置,配置點在下面位置:
當單獨調試其中的程序時,燒寫程序需要將整個flash擦除,要不運行不正常。
5.OS初始化卡死
又遇到程序卡死問題,這次是主程序,而且主程序起始地址為0x8000000時單獨運行良好,但是改成0x8007000用bootloader跳轉過去就卡死,也是卡死在OS的初始化中。因為單獨運行良好,所以排查起來困難些。最終定位是堆棧和堆的空間設置太大了,設置小了后就可以運行。更改該空間的位置如下:
而且問題還不是堆棧的空間不夠用,是空間設置太大了。有點無語。
6.程序跳轉后運行不正常
這是最后的問題,程序能夠從bootloader跳轉,但是運行不正常,咨詢了廠家技術人員,技術人員反饋可以采用分散加載的方式進行排查,也就是讓芯片直接在主程序燒錄的位置啟動,分散加載的教程網上比較多,主要需要設置燒錄域和啟動域地址,還有VTOR寄存器,
配置如下所示:
需要編寫*.ini文件更改VTOR,ini文件編寫如下:
在keil中加載,使得軟件啟動后先配置單片機:
配置好后可以實現分散加載,能夠是程序在燒錄位置啟動,發現程序分散加載可以運行正常,但是bootloader跳轉不正常,因此需要排查跳轉部分的問題。最終定位STM32在主程序啟動時不會重啟向量表,而N32會重啟向量表,在主程序啟動位置更改如下:
跳轉部分代碼如下:
CSDN德瑪西亞吳彥祖
原文鏈接:https://blog.csdn.net/zhang421412170/article/details/116779169
審核編輯 :李倩
-
芯片
+關注
關注
456文章
51057瀏覽量
425656 -
STM32
+關注
關注
2270文章
10918瀏覽量
356821
原文標題:國產芯片N32替換STM32的步驟
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論