<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          N32替換STM32,這些細(xì)節(jié)別忽略!

          共 1909字,需瀏覽 4分鐘

           ·

          2022-07-31 21:44

          前言

          目前大形勢影響,芯片價格日益上漲,采購周期變長,導(dǎo)致國產(chǎn)芯片替代進(jìn)口芯片成為大趨勢,該文章記錄了使用國民技術(shù)的N32替換STM32的操作流程。


          話不多說,上步驟。


          一、工程配置

           

          1.安裝硬件庫

          硬件庫為廠家提供的資料,如下圖所示,雙擊安裝,使得keil能夠找到該芯片。

          2.更改J-Flash配置

          由于Keil官方?jīng)]有對該芯片的支持,所以J-Link下載時也無法找到該芯片,所以需要手動添加芯片。更改步驟官方提供有說明文檔。


          主要步驟是:

          修改JLinkDevices 配置文檔

          添加Nationstech 的下載算法文件

          添加Nationstech 的JFlash 工程文件

          添加解鎖Nationstech 芯片讀保護L1 等級的應(yīng)用程序


          進(jìn)行如上步驟后,啟動J-Flash就能夠掃描并連接到芯片,但是有可能keil鏈接的J-Flash和安裝的J-Flash不是一個路徑,所以將配置好的J-Flash文件替換keil下Keil5\ARM\Segger目錄文件,就能夠正常下載調(diào)試。


          3.更改芯片


          4.添加驅(qū)動文件

          將N32的底層驅(qū)動庫拷貝到工程目錄下,并將include路徑添加進(jìn)去。


          5.更改全局變量


          6.將啟動文件和驅(qū)動文件替換為N32庫文件


          7.將所有的stm32l1xx替換為n32g45x


          二、底層驅(qū)動函數(shù)接口對照表

          更改代碼,將STM32的驅(qū)動函數(shù)替換為N32的驅(qū)動函數(shù),這部分比較繁瑣,需要慢慢替換,下面是我整理的替換對照表。


          三、踩坑記錄

          經(jīng)過上面的替換,應(yīng)該可以編譯過去了,但是這指示開始,后面悲劇的踩坑大戰(zhàn)才剛剛開始。


          1.仿真卡死

          程序仿真卡死,單步調(diào)試發(fā)現(xiàn)卡死在OSInit()函數(shù)里面,這個函數(shù)是OS的初始化函數(shù),所以應(yīng)該是OS配置的問題,排查下來發(fā)現(xiàn)是啟動文件里面的OS啟動項沒有更改,更改如下:


          2.DMA配置出錯

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



          3.Flash配置

          由于國民芯片和STM32芯片的FLASH劃分有區(qū)別,所以FLASH的替換是比較費事的部分,先對比一下兩個片子的區(qū)別:


          STM32L151的flash部分:


          N32G455芯片的flash部分:


          可以看出STM32單獨有EEPROM的劃分,而N32是沒有的,只有flash部分。所以要注意兩點:


          Flash空間的問題,STM32可用空間要比N32的空間大;

          底層接口函數(shù),STM32有操作EEPROM的函數(shù),而N32沒有,只能使用flash操作函數(shù)。


          下面是flash部分的操作:


          4.bootloader移植

          由于本項目采用bootloader引導(dǎo)主程序的方式,因此要注意燒寫空間的配置,配置點在下面位置:



          當(dāng)單獨調(diào)試其中的程序時,燒寫程序需要將整個flash擦除,要不運行不正常。


          5.OS初始化卡死

          又遇到程序卡死問題,這次是主程序,而且主程序起始地址為0x8000000時單獨運行良好,但是改成0x8007000用bootloader跳轉(zhuǎn)過去就卡死,也是卡死在OS的初始化中。因為單獨運行良好,所以排查起來困難些。最終定位是堆棧和堆的空間設(shè)置太大了,設(shè)置小了后就可以運行。更改該空間的位置如下:



          而且問題還不是堆棧的空間不夠用,是空間設(shè)置太大了。有點無語。


          6.程序跳轉(zhuǎn)后運行不正常

          這是最后的問題,程序能夠從bootloader跳轉(zhuǎn),但是運行不正常,咨詢了廠家技術(shù)人員,技術(shù)人員反饋可以采用分散加載的方式進(jìn)行排查,也就是讓芯片直接在主程序燒錄的位置啟動,分散加載的教程網(wǎng)上比較多,主要需要設(shè)置燒錄域和啟動域地址,還有VTOR寄存器,


          配置如下所示:


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



          在keil中加載,使得軟件啟動后先配置單片機:



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



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


          ————————————————

          版權(quán)聲明:本文為CSDN博主「德瑪西亞吳彥祖」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

          原文鏈接:https://blog.csdn.net/zhang421412170/article/details/116779169



          瀏覽 78
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲激情区 | 操你啦网站 | 日逼影视 | 小黄片视频下载 | 青青青草视频在线 |