娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

使用MCU GD32替代STM32的體會

發布者:平和的心情最新更新時間:2024-10-30 來源: elecfans關鍵字:MCU  GD32  STM32 手機看文章 掃描二維碼
隨時隨地手機看文章

GD32作為國產MCU里的佼佼者,產品線也比較豐富,是替代STM32的一個很好的選擇。前段時間有個項目用到GD32的單片機,今天來說說使用的一些體會。  


1.硬件我用的單片機型號為GD32F405RGT6,對應STM32F405RGT6。首先,硬件上基本兼容,有一點不同的是GD32的31和47腳為NC,STM32的為VCAP。STM32這兩個引腳需要分別連接一個電容到GND,而GD32則不需要。當然,有這兩個電容也無所謂,所以,硬件上GD32可以直接替換STM32。216ee10c-0e8a-11ed-ba43-dac502259ad0.png                                      仿真器可以使用Jlink,也可以使用STLink,但是下載程序時會彈框提示,非ST芯片。    


2.軟件軟件上,前期為了快速實現功能,直接使用ST的HAL庫開發(版本為V1.27.0)。用到的外設有:外部高速時鐘、Systick定時器、GPIO、串口1(DMA、中斷)、SPI1、SPI2、I2C1、外部中斷。用STM32CubeMx生成代碼,不做任何改動,直接當做ST的芯片使用,上述外設功能都正常。說明兩者的兼容性還是不錯的。其它外設基本上也都是兼容的(未做測試),但USB部分貌似只能用GD官方提供的USB庫。  但是,用別人的庫文件,總覺得不太可靠,最后還是改成了GD官方的庫,版本為GD32F4xx_Firmware_Library_V3.0.0。總結一下修改過程中的一些體會:  首先,GD的庫跟ST之前的標準庫很類似,很多功能使用起來不如ST的HAL庫方便。比如,串口DMA發送數據,用HAL庫,只需調用一個函數就行:

 

HAL_UART_Transmit_DMA(&huart1,tx_buffer,64);

而GD的庫沒有現成的函數,需要自己去實現:


void usart_dma_transmit(uint8_t *pData,uint32_t num)

{

    usart_flag_clear(USART0, USART_FLAG_TC);


    dma_channel_disable(DMA1, DMA_CH7);

    dma_flag_clear(DMA1, DMA_CH7, DMA_FLAG_FTF);

    dma_memory_address_config(DMA1, DMA_CH7, DMA_MEMORY_0, (uint32_t)pData);

    dma_transfer_number_config(DMA1, DMA_CH7, num);

    dma_channel_enable(DMA1, DMA_CH7);

}


類似的還有很多,比如I2C讀寫24Cxx系列EEPROM的函數,HAL庫中也封裝好了函數:

 

HAL_I2C_Mem_Write(&hi2c1, AT24Cxx_ADDR_WRITE, addr, I2C_MEMADD_SIZE_16BIT, dat, size, 0xFFFFFFFF);

HAL_I2C_Mem_Read(&hi2c1,  AT24Cxx_ADDR_READ, addr, I2C_MEMADD_SIZE_16BIT, recv_buf, size, 0xFFFFFFFF);

 GD的庫也需要自己去實現,官方雖然也提供了相關的例程,但是只支持24C02等8位地址的器件,24C64等16位地址的器件就需要自己修改了。當然,HAL庫雖然好用,但是效率很低。記得之前做一個低功耗的東西,用STM32L151,主頻設置的較低,使用HAL庫回調函數的方式寫串口中斷程序,竟然會出錯。后來中斷部分改為寄存器操作才正常了,可見其效率低下。  


其次,兩者的命名方式不一樣。HAL庫中時鐘叫RCC_xxxx,而GD的庫中時鐘叫RCU_xxxx。還有,HAL庫中的外設標號是從1開始的,比如USART1、USART2…,而GD庫的外設標號是從0開始的,USART0、USART1…。用慣了ST庫的朋友們,這一點在使用時要特別注意。  


最后,實現相同功能的程序,兩者編譯后的大小也有區別。GD庫編譯后的大小如下:717df64aaf411edf8e38f9dcdec8fdc3_wKgaomTnEMKAE99fAAAFMT85jrE996.png

HAL庫編譯后的大小如下:

27cdadd6fe68e5ac20f3810dd3e33d5f_wKgaomTnEMKAcUC2AAAFddltHU4340.png

可以看到HAL庫編譯后的代碼要比GD庫大了將近4KB,占用的RAM也大了1KB多。主要是因為HAL庫為了不同系列芯片的兼容性好,做了很多層的封裝,程序比較繁瑣。  


3.總結

總的來說,HAL庫用起來方便,但效率較低。GD的庫有些功能需要自己實現,但執行效率高。當然,如果用GD的芯片,我還是建議用GD官方的庫,不然出了問題都不好排查。如果用ST的芯片,我建議用HAL庫。很多人排斥HAL庫,一方面覺得效率低,另一方面覺得封裝了很多層,看起程序來比較麻煩。我倒是覺得效率低的問題可以通過局部優化來完善。(HAL庫也提供了類似標準庫的一些高效的底層函數,一般都是以“__HAL”開頭的)。而且,現在單片機資源都比較富裕,很多時候我們也不必那么追求極致的效率。另一方面,官方一直在主推這個,這也是個趨勢,我們還是與時俱進比較好。



關鍵字:MCU  GD32  STM32 引用地址:使用MCU GD32替代STM32的體會

上一篇:你了解GD32 MCU的命名規則嗎
下一篇:GD32 ADC轉換時間如何計算?

推薦閱讀最新更新時間:2025-05-24 10:19

GD32開發實戰指南(基礎篇) 第13章 DAC
開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK 1 DAC工作原理 1.1 DAC介紹 數字/模擬轉換模塊(DAC)是12位數字輸入,電壓輸出的數字/模擬轉換器。DAC可以配置為8位或12位模式,也可以與DMA控制器配合使用。DAC工作在12位模式時,數據可以設置成左對齊或右對齊。DAC模塊有2個輸出通道,每個通道都有單獨的轉換器。在雙DAC模式下,2個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新2個通道的輸出。DAC可以通過引腳輸入參考電壓VREF+ 以獲得更精確的轉換結果。 1.2 DAC主要特征 ● 2個DAC轉換器:每個轉換器對應1個輸出通道 ●
[單片機]
STM32單片機如何處理QT上位機串口中發過來的數據?
首先,在使用STM32單片機處理QT上位機串口中發過來的數據前,需要了解一些基礎知識。 1. 串口通信 串口通信指的是通過串口進行數據傳輸的通信方式。串口通信是一種簡單、穩定、可靠的通信方式,其原理是通過串口發送端口將數據轉換為串行數據,并將其發送到接收端口,接收端口將接收到的串行數據還原成原始數據。 在STM32單片機和QT上位機之間進行串口通信時,需要確定好使用的波特率、數據位、停止位和校驗位等參數,以保證數據傳輸的正確性。 2. 數據格式 在STM32單片機中處理QT上位機串口中發過來的數據時,需要了解數據格式。一般情況下,串口收發數據的格式是由數據幀構成。數據幀一般包括開始標志、數據段、校驗段和結束標志等部分。 開始標志用
[單片機]
STM32單片機ADC的模擬看門狗的測試
ADC的模擬看門狗用于檢查電壓是否越界。他又上下兩個邊界,可分別在寄存器ADC_HTR和ADC_LTR中設置。庫函數是使用ADC_AnalogWatchdogThresholdsConfig設置的,無論是常規通道還是注入通道,都非常簡單 當模擬看門狗檢測到電壓高于上限或者低于下限時將會產生看門狗中斷。捕獲這個中斷,可以做出一些應對措施。 數據手冊上特別之處的一個東西:模擬看門狗說使用的比較數據與ADC_CR2寄存器中設置的數據對齊方式無關。看門狗比較是在數據對齊之前完成的。先進行看門狗比較,再將數據放入ADC_DR數據寄存器。 在ST的庫中,只有簡單的三個與看門狗相關的函數: void ADC_AnalogWatchdogCm
[單片機]
<font color='red'>STM32</font><font color='red'>單片機</font>ADC的模擬看門狗的測試
如何采用STM32單片機串口接收數據
0目標1STM32串口簡介 2硬件設計3軟件設計 4下載驗證 0.目標 利用串口1不停的打印信息到電腦上,同時接收從串口發過來的數據,把發送過來的數據直接送回給電腦。 1.STM32串口簡介 串口設置的一般步驟可以總結為如下幾個步驟: 1)串口時鐘使能,GPIO時鐘使能 2)串口復位 3) GPIO端口模式設置 4)串口參數初始化 5)開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個步驟) 6)使能串口 7)編寫中斷處理函數 注:對于復用功能的IO,我們首先要使能GPIO時鐘,然后使能復用功能時鐘,同時要把GPIO模式設置為復用功能對應的模式。 查看手冊《STM32 中文參考手冊 V10》P110 的表格“8.1.1
[單片機]
如何采用<font color='red'>STM32</font><font color='red'>單片機</font>串口接收數據
如何入坑STM32 STM32為何能在單片機中脫穎而出
在STM32之前,都是老大頭51,帶著它的“小弟們” MSP430、AVR、PIC在單片機界呼風喚雨。 那個時候,市場上遍布8位機,大學教材用51入門,個人、企業學單片機基本上也都在用51。 雖然AVR也有一些8位機市場,但與stc帶領下的51單片機是完全不能相比的。 當然,這個時候也有16位機的msp430,其他廠家單片機還有pic,高端嵌入式處理器等市場有arm7、arm9等。 這個時期的單片機市場是百花齊放、百家爭鳴,但總體來說,還是勢均力敵、一片祥和的。 那么,這個局勢是從什么時候開始打破的呢?這還得從物聯網的崛起說起。 原因 當時,物聯網(Internet of Things,IoT)逐步進入人們的視野范圍。隨著它的
[單片機]
如何入坑<font color='red'>STM32</font> <font color='red'>STM32</font>為何能在<font color='red'>單片機</font>中脫穎而出
STM32單片機ADC庫函數的定義和使用方法
ADC的基本概念希望各位網友查閱相應的手冊,上面對ADC有比較詳盡的介紹,包括誤差的分析和消除。這里主要介紹ADC的基本庫函數的定義和使用。 1.ADC_DeInit函數的功能是將外設ADCx的全部寄存器重設為默認值。 ADC_DeInit(ADC2); 2.ADC_Init函數的功能是根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器。其中ADC_InitTypeDef定義在stm32f10x_adc.h中。其結構體如下所示: typedef struct { u32 ADC_Mode;//可以設置ADC_Mode FunctionalState ADC_ScanConvMode;//規定了模數轉換工
[單片機]
意法半導體TouchGFX Stock簡化并加快在STM32 MCU上用戶界面設計
2022 年 12 月 23 日, 中國—意法半導體TouchGFX軟件包最新版本進一步簡化在STM32 微控制器上開發美觀的用戶界面 (UI) 。4.21 版增加了TouchGFX Stock功能,在網址 4.21 版還增加了對 SVG 圖像(可縮放矢量圖形圖像格式)的支持,這為開發酷炫的 UI 提供了更多自由空間。用戶獲取SVG圖像需要用 TouchGFX Designer工具中新增的一個小部件,為確保高性能,SVG圖像需用到意法半導體 STM32 MCU中的專用圖形處理硬件,例如,NeoChrom GPU 處理器。 此外,4.21版的TouchGFX Designer工具在導航、一般用途等方面進行50 多項改進,
[單片機]
意法半導體TouchGFX Stock簡化并加快在<font color='red'>STM32</font> <font color='red'>MCU</font>上用戶界面設計
基于STM32單片機采集數據&數據上云
前言 以往采集數據均是采用Arduino開發板、esp32wifi模塊等,本次實驗采用的是STM32單片機,STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARM Cortex-M3內核,功能非常強大,為本次實驗提供了無限可能。 參考博客:https://blog.csdn.net/weixin_43271542/article/details/117384011?spm=1001.2014.3001.5502 1.實驗原理 本項目采用ARM結構中最為代表的Cortex-M4系列的芯片,選用STM32F407ZGT6開發板進行項目開發,選用的傳感器為常見通用的DHT11溫濕度傳感器。傳感器將采
[單片機]
基于<font color='red'>STM32</font><font color='red'>單片機</font>采集數據&數據上云
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 安康市| 连云港市| 巴楚县| 利津县| 辛集市| 修水县| 略阳县| 光泽县| 高邑县| 英山县| 东丽区| 靖江市| 南通市| 泰宁县| 漠河县| 虹口区| 福建省| 永新县| 六安市| 慈溪市| 岳普湖县| 延边| 宜州市| 南雄市| 广饶县| 阜平县| 仁布县| 绿春县| 祁东县| 砀山县| 图木舒克市| 怀仁县| 怀安县| 浦北县| 平原县| 双鸭山市| 富源县| 宁津县| 侯马市| 株洲县| 连云港市|