首發(fā)極術(shù)社區(qū)。如對兆易創(chuàng)新GD32F310 MCU感興趣,歡迎添加微信 aijishu2020 加入GD32技術(shù)討論群。
1. 測評背景
GD32作為國產(chǎn)化ARM中的旗艦,其全系列產(chǎn)品不僅市場占有率高,而且各具特色,廣受使用者好評。
筆者在測評這款GD32F310之前,曾經(jīng)使用過GD32F450,其強大的性能,低廉的價格、使用方便程度和快速的技術(shù)支持,都給我留下非常深刻的印象?;贕D32F450芯片,我主導(dǎo)了公司主打產(chǎn)品DSP平臺的國產(chǎn)化遷移。實踐證明GD32 M4除了在ADC性能,其他完全可以全面取代業(yè)內(nèi)中低端DSP芯片,同時也節(jié)省了通信和存儲方面的擴展開支。
兆易推出的GD32F310同作為M4下的定位為超值型的產(chǎn)品系列,引起了我的好奇。從產(chǎn)品平臺化的角度考慮,GD32F450可以作為中高端產(chǎn)品平臺的核心,而低成本平臺也需要一款性能強,價格優(yōu)的芯片,GD32F310即可作為考慮。
基于此,測評一方面考慮其運算性能,另一方面考慮其工控通信功能。
2、浮點DSP運算測評
從數(shù)據(jù)手冊可以看到,該款芯片支持FPU,集成DSP指令。
第一步,找相關(guān)庫,因為之前F450已經(jīng)有相關(guān)的移植,所以直接拿過來,添加庫和頭文件不再贅述。
第二步,添加相關(guān)宏定義。
第三步,編寫數(shù)學(xué)運算測試代碼,可以按自己的需求,這邊測試基本浮點運算,和正弦余弦之類。
第四步,通過串口看時間消耗,以時鐘tikc數(shù)為單位,當(dāng)中涉及的串口外設(shè)初始化,和printf重定向也不必多說。
結(jié)論,用ARM MATH庫時,GD32F310正弦余弦運算消耗與GD32F450基本等同,而基本數(shù)學(xué)運算消耗大約是GD32F450的兩倍,不過這是超值版與超性能版的對比,不具備參考意義,可以將同樣測試用于預(yù)取代的芯片上再作對比。
3、Modbus通信測評
在工業(yè)場合應(yīng)用一款芯片,特別是低成本芯片,一般都會考慮用485通信,而大多采用的標(biāo)準(zhǔn)規(guī)約都是Modbus,所以,考慮實際應(yīng)用GD32F310一定需要移植Modbus。
第一步,協(xié)議棧的選擇,這里為了方便,選擇FreeModbus作為移植測試對象,下載源碼包,實際工業(yè)應(yīng)用時,大多選擇自研協(xié)議棧。
第二步,添加相關(guān)的源文件和頭文件。
第三步,對portserial.c porttimer.c作驅(qū)動接口的修改移植。如:
void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
/* If xRXEnable enable serial receive interrupts. If xTxENable enable
* transmitter empty interrupts.
*/
//只接收
if (xRxEnable == TRUE)
{
usart_interrupt_enable(comPort, USART_INT_RBNE);
}
else
{
usart_interrupt_disable(comPort, USART_INT_RBNE);
}
//只發(fā)送
if(xTxEnable == TRUE)
{
usart_interrupt_enable(comPort, USART_INT_TBE);
}
else
{
usart_interrupt_disable(comPort, USART_INT_TBE);
}
}
BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
/* Put a byte in the UARTs transmit buffer. This function is called
* by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
* called. */
usart_data_transmit(comPort, (uint8_t)ucByte);
// while(RESET == usart_flag_get(USART2, USART_FLAG_TBE));
return TRUE;
}
BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
/* Return the byte in the UARTs receive buffer. This function is called
* by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
*/
*pucByte = usart_data_receive(comPort);
return TRUE;
}
void vMBPortTimerPoll(void)
{
uint32_t timeCurrentCount = 0;
uint32_t timeGapCount = 0;
if (bTimeOutEnable)
{
timeCurrentCount = runTimeTicks;
if (timeCurrentCount < timeLastCount)
{
timeGapCount = 0xffffffff - timeLastCount + timeCurrentCount;
}
else
{
timeGapCount = timeCurrentCount - timeLastCount;
}
//進行超時判斷
if (timeGapCount > timeOutCount)
{
bTimeOutEnable = FALSE;
(void)pxMBPortCBTimerExpired(); //關(guān)鍵的超時處理***********
}
}
}
第四步,測試使用合適的工具測試Modbus通信。
結(jié)論,該芯片在移植了FreeModbus協(xié)議棧后,能夠非常好地支持modbus通信,具有廣泛的應(yīng)用場景。文章來源:http://www.zghlxwxcb.cn/news/detail-408229.html
最后,貼一張測評板照片,感謝“技術(shù)社區(qū)”給予的寶貴測評機會。文章來源地址http://www.zghlxwxcb.cn/news/detail-408229.html
到了這里,關(guān)于【GD32F310開發(fā)板試用】浮點DSP運算及Modbus移植測評的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!