通信電纜 網絡設備 無線通信 云計算|大數據 顯示設備 存儲設備 網絡輔助設備 信號傳輸處理 多媒體設備 廣播系統 智慧城市管理系統 其它智慧基建產品
沈陽芯碩科技有限公司
1 | 1 |
---|
HC32F460 系列是基于 ARM® Cortex®-M4 32-bit RISC CPU,工作頻率 200MHz 的高性能 MCU。Cortex-M4 內核集成了浮點運算單元(FPU)和 DSP,實現單精度浮點算術運算,支持 所有 ARM 單精度數據處理指令和數據類型,支持完整 DSP 指令集。
華大F460支持IAP升級程序,但一般做IAP程序時都需要做一個bootloader,華大*也提供了一個IAP demo。
但是這個demo例程會有一個問題:
此demo是基于華大F460*開發板制作的,*開發板是使用了外部8M晶振。但到了客戶那里,可能不使用外部晶振,使用內部HRC晶振。
那么問題就來了,460 在Flash 0x00000400地址上存儲ICG數據(ICG配置,請參考華大編程手冊第6章內容)
這個IGC功能是在MCU上電時,硬件讀取Flash地址0x0400上的系統配置數據。
其中ICG1存儲了HRC上電時是16M RC還是20M的RC。
客戶出現的問題是,每次編譯bootloader后,系統時鐘一會是16M,一會是20M,每次編譯后都隨機變動。
對比了一下客戶的.map文件和*SDK內例程的.map :
SDK*例程uart_dma_rx_tx map文件 華大給的IAP hc32f46x_boot程序(bootloader)map文件
會發現在0x00000400地址上,SDK中例子是data區,放入的是默認的ICG數據信息。而華大IAP bootloader 0x000004000地址范圍內是代碼函數,是code區。
那么MCU上電后從Flash的0x00000400地址開始讀ICG數據 設置MCU硬件,SDK內例子沒問題,而IAP bootloader 讀到的卻是code代碼數據,這樣HRCFREQSEL確定RCH頻率的位就變得不確定。
那么確實,華大*給的IAP demo中boot代碼工程是由問題的。
那改怎么做呢?看了一下uart_dma_rx_tx例子工程代碼,其中該工程把華大driver中的hc32f46x_icg.c文件加入到了工程參與編譯。
請看hc32f46x_icg.c內容:
hc32f46x_icg.c 中把默認的ICG信息map到了0x00000400地址上,而且是data分區(定義成const數組)。
所以根據460 MCU上電后硬件自動讀取0x00000400地址上數據 ,把數據加載到初始化配置寄存器 這一操作,我們必須把ICG數據放入到0x00000400地址上。
那么可以參考SDK中例程的方法,直接在keil或其他IDE中添加hc32f46x_icg.c文件,讓hc32f46x_icg.c文件參與編譯,參與code map。
這樣 在程序下載hex的同時,ICG數據 自動下載到了地址0x00000400地址上。
當然,我們可以根據我們的需要,更改hc32f46x_icg.c 各個數據,以便ICG配置適合我們的使用。
華大*460 IAP例子 bootloader代碼中沒有加入hc32f46x_icg.c文件:
以上ICG一定要注意添加,而且華大460 IAP demo代碼是沒有添加ICG的,這個是一個明顯的錯誤。
您感興趣的產品PRODUCTS YOU ARE INTERESTED IN
智慧城市網 設計制作,未經允許翻錄必究 .? ? ?
請輸入賬號
請輸入密碼
請輸驗證碼
請輸入你感興趣的產品
請簡單描述您的需求
請選擇省份