尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
作者:yinwuqing
來源:EEPW論壇
01
周六繼續上班,明天調班接著上,今天來給大家秀一下開箱靚照。開發板是昨天下班收到的,順豐快遞包裝還是挺周到的,裡面裝好了空氣袋,防止運輸中撞壞。
然後摘開空氣袋,有一個精美的盒子,上面標識兆易創新公司GD32與RISC-V的logo,獵豹很健壯,像是在飛奔著。
然後打開盒子,裡面有我們此次用到的核心開發板,板卡屬於入門RISC-V的基本類型,採用3個mini usb接口與PC端進行通訊,還配送了1根mini usb接口的數據線,這也許是後續不需要同時對這3個mini接口進行通訊吧。
正面靚照如下所示:
然後迫不及待的將排針焊接上去(當然這是自備的排針),為後續使用IO口做好準備。
再來一張焊接後背面的痕跡:
此塊開發板比我想像的要小很多,沒有帶OLED屏,板卡四個角有預留銅柱孔,方便採用銅柱墊高,以免底面與金屬物導通造成短路。該板卡自帶GD-Link模塊,因此無需採用第三方調試下載工具,給GD32F103C8T6來張特寫。
接下來我們需要通過官方給定的SDK包,了解RISC-V架構的知識,熟悉Nuclei Studio集成開發工具的使用。Nuclei Studio是芯來科技基於Eclipse開發的一款支持RISC-V的IDE,貌似操作起來與Keil還是有點區別的哦。再回眸一下我們的核心主控MCU:
02
五一小長假不知道大夥有沒有出行,疫情期間,還是居家調調開發板比較靠譜。今天與大家來分享一下入門的點燈實驗。
首先我們從GD32的官網下載好針對GD32VF103開發的資源包,解壓後在「GD32VF103\GD32VF103_Demo_Suites_V1.0.3\GD32VF103C_START_Demo_Suites\Docs\User Guide」目錄下有《GD32VF103C-START評估板用戶指南_V1.1》,我們可以根據文檔來了解常用接口硬件原理,方便進一步實施我們的第一個小實驗。
搭建基於芯來科技的NucleiStudio集成開發環境,首先我們得在「NucleiStudio_IDE_201909」目錄下安裝「jdk-8u152-windows-x64.exe」,安裝jdk、jre後才能進入NucleiStudio目錄下打開eclipse應用,當然前提是你的電腦之前沒有安裝過java開發環境。
然後進入NucleiStudio目錄下打開eclipse應用,首先設置我們將來創建工程的保存路徑,最好不要選擇默認C槽路徑,增加系統盤的負擔,我這裡選擇到F盤。
然後新建工程,選擇創建C工程,如下圖所示:
然後再給工程命名,該工程將會保存到上述軟體啟動時彈出的設置工作目錄當中。
選擇好RISC-V C工程後,一路默認選擇即可。
最後直到Finish按鈕不再是灰色,點擊Finish按鈕,打開新創建的工程,直擊小錘子編譯一下。
沒有錯誤,沒有警告,說明工程創建沒問題。然後來看看開發板上的LED1燈硬件電路原理圖:
由此可知,LED1與MCU的GPIOA_7相連接,因此需要在工程中修改相對應的代碼。
在Main函數中,將自動生成原始工程的四盞燈控制改成一盞燈,編譯、下載。
然後我們能看到控制列印臺會有下載的進度條和列印資訊,log對話框中顯示紅色字體屬正常情況,習慣使用Keil工具的夥計們可能會感到驚訝,還以為是報錯了。
熟悉芯來科技的NucleiStudio集成開發工具需要慢慢養成習慣,經常使用eclipse開發的java工程師應該比較熟練咯,此次實驗實現控制LED1燈以500ms的頻率在不停的閃爍,現象結果如下。
03
根據前段時間老師的講解,今天來分享一下基於串口的基本功能檢測。首先我們需要了解一下USART的常用理論知識。通用同步異步收發器 (USART)是用於串行數據交換提供接口,數據幀可以通過全雙工或半雙工,同步或異步的方式進行傳輸。USART提供了可編程的波特率發生器,能對系統時鐘進行分頻產生USART發送器和接收器所需的特定頻率。USART支持DMA功能,用以實現高速率的數據通訊。
USART的重要引腳描述如下:
USART模塊內部框圖如下:
關於USART的發送器與接收器、同步通訊時序波形這裡就不再贅述。demo工程中也提供了封裝好的庫函數,至於USART中的狀態寄存器、數據寄存器、波特率寄存器、控制寄存器、保護時間和預分頻器寄存器,在代碼中也有相幹的英文註釋,這裡也不再做過多講解。關於USART的庫函數匯總如下:
按照上回LED燈的簡單操作,重新創建新的C工程,然後在主函數中,敲入代碼:
int main(void)
{
uint i;
uint data;
gd_eval_led_init(LED1);
gd_eval_com_init(EVAL_COM0);
while(1)
{
gd_eval_led_on(LED1);
if(usart_flag_get(USART0,USART_FLAG_RBNE)!= RESET)
{
data = usart_data_receive(USART0);
usart_data_transmit(USART0,data);
while(usart_flag_get(USART0,USART_FLAG_TC)==RESET);
usart_data_transmit(USART0,0X0A);
while(usart_flag_get(USART0,USART_FLAG_TC)==RESET);
usart_data_transmit(USART0,0X0D);
while(usart_flag_get(USART0,USART_FLAG_TC)==RESET);
}
gd_eval_led_off(LED1);
delay_1ms(500);
}
}
然後開發板重新上電,代碼編譯ok,運行下載到開發板中,打開SSCOM V5.13.1串口調試助手,這裡說明一下,如使用SecureCRT軟體則現象不是很明顯,因為它的發送窗口與輸出窗口在同一界面下,因此建議採用SSCOM工具,而且不支持十六進制顯示的低版本效果也不是很好,這裡推薦V5.13.1版本。通過鍵盤在發送窗口輸入相應字符,則會收到GD32VF103返回的相同字符,並加上換行回車字符。
提供ASCII碼對照表如下:
根據官方提供的參考範例,關於串口的操作還有DMA應用,串口中斷響應的使用。總而言之,串口是比較常見的通訊接口方式,根據其通訊協議,同步、異步的特性,熟悉相幹寄存器的設置是非常必要的。
04
今天周末,抽點時間研究了一下GD32VF103的ADC檢測功能,結合視訊講解,簡單談談ADC。ADC即模數轉換,12位ADC是一種採用逐次逼近方式的模擬數字轉換器。GD32VF103有18個多路復用通道,可以轉換來自16個外部通道和2個內部通道的模擬信號。模擬看門狗允許應用程序來檢測輸入電壓是否超出用戶設定的高低閾值。各種通道的A/D轉換可以配置成單次、延續、掃描或間斷轉換模式。ADC轉換的結果可以按照左對齊或右對齊的方式存儲在16位數據寄存器中。片上的硬件過采樣機制可以通過減少來自MCU的相幹計算負擔來提高性能。
ADC模塊框圖如下圖所示:
ADC帶有一個前置校準功能。在校準期間,ADC計算一個校準系數,這個系數是應用於ADC內部的,它直到ADC下次掉電才無效。在校準期間,應用不能使用ADC,它必須等到校準完成。在A/D轉換前應執行校準操作。通過軟體設置CLB=1來對校準進行初始化,在校準期間CLB 位會一直保持1,直到校準完成,該位由硬件清0。當ADC運行條件改變後建議重新執行一次校準操作。內部的模擬校準通過設置ADC_CTL1寄存器的RSTCLB位來重置。
關於ADC的信號同步,在有兩個或者兩個以上的ADC模塊的產品中,可以使用ADC同步模式。在ADC同步模式下,根據ADC_CTL0寄存器中SYNCM[3:0]位所選的模式,轉換的啟動可以是ADC0主和ADC1從的交替觸發或同步觸發。在同步模式下,當配置由外部事件觸發的轉換時,從ADC必須通過軟體來配置觸發來,從而避免錯誤的觸發引起不必要的轉換。此外,對於主ADC和從ADC的外部觸發必須被使能。
共有以下幾種模式:
-
獨立模式
-
規則並行模式註
-
入並行模式快速
-
交叉模式
-
慢速交叉模式
-
交替觸發模式
-
註入並行模式 規則並行模式
-
規則並行模式 交替觸發模式
-
註入並行模式 交叉模式
在ADC同步模式下,即使DMA不用,也要將DMA置位,從ADC的轉換數據可以通過主ADC 數據寄存器讀取。ADC同步框圖如下:
關於ADC的寄存器如下:
ADC庫函數如下:
在原來的串口檢測工程中,添加部分代碼。
05
▼ 5.1 SPI通訊
SPI模塊可以通過SPI協議與外部設備進行通訊。串行外設接口提供了基於SPI協議的數據發送和接收功能可以工作於主機或從機模式。SPI接口支持具有硬件CRC計算和校驗的全雙工和單工模式。
SPI主要特征如下:
-
具有全雙工和單工模式的主從操作;
-
16位寬度,獨立的發送和接收緩沖區;
-
8位或16位數據幀格式;
-
低位在前或高位在前的數據位順序;
-
軟體和硬件NSS管理;
-
硬件CRC計算、發送和校驗;
-
發送和接收支持DMA模式;
-
支持SPI TI模式;
-
支持SPI NSS脈沖模式。
SPI結構框圖如下:
SPI信號線描述詳情如下:
典型的工作模式概括如下:
(1)發送流程:
在完成初始化過程之後,SPI模塊使能並保持在空閒狀態。在主機模式下,當軟體寫一個數據到發送緩沖區時,發送過程開始。在從機模式下,當SCK引腳上的SCK信號開始翻轉且NSS引腳電平為低發送過程開始。所以在從機模式下,應用程序必須確保在數據發送開始前,數據已經寫入發送緩沖區中。
當SPI開始發送一個數據幀時,首先將這個數據幀從數據緩沖區加載到移位寄存器中,然後開始發送加載的數據。在數據幀的第一位發送之後,TBE(發送緩沖區空)位置1。TBE標誌位置1說明發送緩沖區為空,此時如果需要發送更多數據,軟體應該繼續寫SPI_DATA寄存器。在主機模式下,若想要實現延續發送功能那麼在當前數據幀發送完成前軟體應該將下一個數據寫入SPI_DATA寄存器中。
(2)接收流程:
在最後一個采樣時鐘邊沿之後接收到的數據將從移位寄存器存入到接收緩沖區且RBNE(接收緩沖區非空)位置1。軟體通過讀SPI_DATA寄存器獲得接收的數據,此操作會自動清除RBNE標誌位。在MRU和MRB模式中,為了接收下一個數據幀,硬件需要延續發送時鐘信號,而在全雙工主機模式(MFD)中僅當發送緩沖區非空時,硬件才接收下一個數據幀。
SPI的寄存器列表如下:
SPI的庫函數列表如下:
SPI流程如下:
-
初始化時鐘
-
配置管腳
-
cs管腳配置
-
spi參數配置
-
是否使能crc
-
使能spi
-
spi發送/接收
部分代碼如下:
並行總線至I2C總線協議的轉換及接口;
同一接口既可實現主機功能又可實現從機功能;
主從機之間的雙向數據傳輸;
支持7位和10位的地址模式和廣播尋址;
支持I2C多主機模式;
支持標速(最高100kHz),快速(最高400kHz)和快速模式(最高1MHz);
從機模式下可配置的SCL主動拉低;
支持DMA模式;
兼容SMBus2.0和PMBus;
兩個中斷:字節成功傳輸中斷和錯誤事件中斷;
可選擇的PEC(報文錯誤校驗)生成和校驗。
I2C結構框圖如下:
I2C總線術語:
I2C模塊有兩條接口線:串行數據SDA線和串行時鐘SCL線。連接到總線上的設備通過這兩根線互相傳遞資訊。SDA和SCL都是雙向線,通過一個電流源或者上拉電阻接到電源正極。當總線空閒時,兩條線都是高電平。連接到總線的設備輸出極必須是開漏或者開集,以提供線與功能。I2C總線上的數據在標準模式下可以達到100Kbit/s,在快速模式下可以達到400Kbit/s,當I2C_FMPCFG寄存器中FMPEN位被置位時,在快速模式下可達1Mbit/s。由於I2C總線上可能會連接不同工藝的設備,邏輯‘0’和邏輯‘1’的電平並不是固定的,取決於VDD的實際電平。
所有的數據傳輸起始於一個START結束於一個STOP。START起始位定義為S,在SCL為高時,SDA線上出現一個從高到低的電平轉換。STOP結束位定義為P,在SCL為高時,SDA線上出現一個從低到高的電平轉換。
I2C寄存器如下:
I2C庫函數如下:
I2C流程如下:
-
初始化時鐘
-
配置管腳
-
使能,配置I2C時鐘
-
I2C參數配置
-
使能I2C
-
使能應答
-
數據發送/接收
部分代碼如下:
06
最後一堂課盡然是有關硬件電路設計方面的,最小系統板的設包括軟硬件的整體設計。畫板並不是我的特長。只是稀疏的了解硬件原理圖,焊接元器件,至於畫板,在學校學習過Protel99。通過該培訓課程的視訊教學,嘗試使用了AD的20.0.13版本操作了一下PCB板的布線。
學習了Altium Designer的基本操作,也算是有所收獲。不管是硬件電路設計工程師,還是軟體開發工程師,工作都不容易,只能一步一個腳印才能設計出一款優秀的,值得消費者認同的產品,您說呢。基於GD32VF103開發板學習的整套課程早已更新完畢,感興趣的壇友可以回看,重溫學習教程。這是一款入門RISC-V架構學習的開發板,感興趣網友,極力推薦使用。
加入「電子產品世界」粉絲交流群
↓↓↓↓點擊閱讀原文,查看更多新聞
預覽時標簽不可點