前言
目前大形勢(shì)影響,芯片價(jià)格日益上漲,采購(gòu)周期變長(zhǎng),導(dǎo)致國(guó)產(chǎn)芯片替代進(jìn)口芯片成為大趨勢(shì),該文章記錄了使用國(guó)民技術(shù)的N32替換STM32的操作流程。
話不多說(shuō),上步驟。
一、工程配置
1.安裝硬件庫(kù)
硬件庫(kù)為廠家提供的資料,如下圖所示,雙擊安裝,使得keil能夠找到該芯片。

2.更改J-Flash配置
由于Keil官方?jīng)]有對(duì)該芯片的支持,所以J-Link下載時(shí)也無(wú)法找到該芯片,所以需要手動(dòng)添加芯片。更改步驟官方提供有說(shuō)明文檔。

主要步驟是:
修改JLinkDevices配置文檔
添加Nationstech的JFlash 工程文件
添加解鎖Nationstech芯片讀保護(hù)L1 等級(jí)的應(yīng)用程序
進(jìn)行如上步驟后,啟動(dòng)J-Flash就能夠掃描并連接到芯片,但是有可能keil鏈接的J-Flash和安裝的J-Flash不是一個(gè)路徑,所以將配置好的J-Flash文件替換keil下Keil5ARMSegger目錄文件,就能夠正常下載調(diào)試。
3.更改芯片

4.添加驅(qū)動(dòng)文件
將N32的底層驅(qū)動(dòng)庫(kù)拷貝到工程目錄下,并將include路徑添加進(jìn)去。


5.更改全局變量

6.將啟動(dòng)文件和驅(qū)動(dòng)文件替換為N32庫(kù)文件

7.將所有的stm32l1xx替換為n32g45x
二、底層驅(qū)動(dòng)函數(shù)接口對(duì)照表
更改代碼,將STM32的驅(qū)動(dòng)函數(shù)替換為N32的驅(qū)動(dòng)函數(shù),這部分比較繁瑣,需要慢慢替換,下面是我整理的替換對(duì)照表。



三、踩坑記錄
經(jīng)過(guò)上面的替換,應(yīng)該可以編譯過(guò)去了,但是這指示開(kāi)始,后面悲劇的踩坑大戰(zhàn)才剛剛開(kāi)始。
1.仿真卡死
程序仿真卡死,單步調(diào)試發(fā)現(xiàn)卡死在OSInit()函數(shù)里面,這個(gè)函數(shù)是OS的初始化函數(shù),所以應(yīng)該是OS配置的問(wèn)題,排查下來(lái)發(fā)現(xiàn)是啟動(dòng)文件里面的OS啟動(dòng)項(xiàng)沒(méi)有更改,更改如下:

2.DMA配置出錯(cuò)
程序能夠進(jìn)入到任務(wù)中后,調(diào)試發(fā)現(xiàn)無(wú)法進(jìn)入到串口接收中斷,但是示波器中有數(shù)據(jù),而且中斷都沒(méi)有進(jìn)入,應(yīng)該是卡死在優(yōu)先級(jí)高的中斷中,排查發(fā)現(xiàn),是DMA發(fā)送中斷的配置有問(wèn)題,導(dǎo)致一直卡死在DMA中斷中。下面是DMA部分的配置。


3.Flash配置
由于國(guó)民芯片和STM32芯片的FLASH劃分有區(qū)別,所以FLASH的替換是比較費(fèi)事的部分,先對(duì)比一下兩個(gè)片子的區(qū)別:
STM32L151的flash部分:

N32G455芯片的flash部分:

可以看出STM32單獨(dú)有EEPROM的劃分,而N32是沒(méi)有的,只有flash部分。所以要注意兩點(diǎn):
Flash空間的問(wèn)題,STM32可用空間要比N32的空間大;
底層接口函數(shù),STM32有操作EEPROM的函數(shù),而N32沒(méi)有,只能使用flash操作函數(shù)。
下面是flash部分的操作:

4.bootloader移植
由于本項(xiàng)目采用bootloader引導(dǎo)主程序的方式,因此要注意燒寫(xiě)空間的配置,配置點(diǎn)在下面位置:

當(dāng)單獨(dú)調(diào)試其中的程序時(shí),燒寫(xiě)程序需要將整個(gè)flash擦除,要不運(yùn)行不正常。
5.OS初始化卡死
又遇到程序卡死問(wèn)題,這次是主程序,而且主程序起始地址為0x8000000時(shí)單獨(dú)運(yùn)行良好,但是改成0x8007000用bootloader跳轉(zhuǎn)過(guò)去就卡死,也是卡死在OS的初始化中。因?yàn)閱为?dú)運(yùn)行良好,所以排查起來(lái)困難些。最終定位是堆棧和堆的空間設(shè)置太大了,設(shè)置小了后就可以運(yùn)行。更改該空間的位置如下:

而且問(wèn)題還不是堆棧的空間不夠用,是空間設(shè)置太大了。有點(diǎn)無(wú)語(yǔ)。
6.程序跳轉(zhuǎn)后運(yùn)行不正常
這是最后的問(wèn)題,程序能夠從bootloader跳轉(zhuǎn),但是運(yùn)行不正常,咨詢了廠家技術(shù)人員,技術(shù)人員反饋可以采用分散加載的方式進(jìn)行排查,也就是讓芯片直接在主程序燒錄的位置啟動(dòng),分散加載的教程網(wǎng)上比較多,主要需要設(shè)置燒錄域和啟動(dòng)域地址,還有VTOR寄存器,
配置如下所示:

需要編寫(xiě)*.ini文件更改VTOR,ini文件編寫(xiě)如下:

在keil中加載,使得軟件啟動(dòng)后先配置單片機(jī):

配置好后可以實(shí)現(xiàn)分散加載,能夠是程序在燒錄位置啟動(dòng),發(fā)現(xiàn)程序分散加載可以運(yùn)行正常,但是bootloader跳轉(zhuǎn)不正常,因此需要排查跳轉(zhuǎn)部分的問(wèn)題。最終定位STM32在主程序啟動(dòng)時(shí)不會(huì)重啟向量表,而N32會(huì)重啟向量表,在主程序啟動(dòng)位置更改如下:

跳轉(zhuǎn)部分代碼如下:

CSDN德瑪西亞吳彥祖
原文鏈接:https://blog.csdn.net/zhang421412170/article/details/116779169
審核編輯 :李倩
-
芯片
+關(guān)注
關(guān)注
462文章
53499瀏覽量
458568 -
STM32
+關(guān)注
關(guān)注
2305文章
11118瀏覽量
370954
原文標(biāo)題:國(guó)產(chǎn)芯片N32替換STM32的步驟
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
國(guó)民技術(shù)N32H78x系列MCU榮獲2025年度全球電子成就獎(jiǎng)
國(guó)民技術(shù)發(fā)布N32G033x/N32M0xx系列MCU:高集成度電控平臺(tái)的技術(shù)突破與創(chuàng)新
國(guó)民芯片N32G435KB 能否用N32G43XCL-STB的BSP?
昂科燒錄器支持Nation國(guó)民技術(shù)的多用途安全芯片N32S032

使用國(guó)民技術(shù)的N32替換STM32的操作流程
評(píng)論