當(dāng)前位置:首頁 > 公眾號精選 > 硅農(nóng)亞歷山大
[導(dǎo)讀]串行通信(SerialCommunication)是一種常見的通信方式,指的在發(fā)送或接收數(shù)據(jù)時逐位傳輸,一次只傳輸一位;與此相對的是并行通信,一次可傳輸多個數(shù)據(jù)位。相比于并行通信,串行通信雖然數(shù)據(jù)傳輸速率較慢,但其占用資源少、成本低、實現(xiàn)簡單,因此在嵌入式系統(tǒng)中應(yīng)用十分廣泛,而U...

串行通信(Serial Communication)是一種常見的通信方式,指的在發(fā)送或接收數(shù)據(jù)時逐位傳輸,一次只傳輸一位;與此相對的是并行通信,一次可傳輸多個數(shù)據(jù)位。相比于并行通信,串行通信雖然數(shù)據(jù)傳輸速率較慢,但其占用資源少、成本低、實現(xiàn)簡單,因此在嵌入式系統(tǒng)中應(yīng)用十分廣泛,而UART(通用異步收發(fā)器)則是眾多串行通信協(xié)議中最典型的一種。本期內(nèi)容將通過PC主機與RV-STAR開發(fā)板間的三個通信小實驗,簡單講解UART串口通信的應(yīng)用方法。



系統(tǒng)環(huán)境


Windows 10-64bit



軟件平臺


NucleiStudio IDE 202102版或 PlatformIO IDE


CoolTerm



硬件需求


RV-STAR開發(fā)板




GD32VF103 USART介紹
通用同步異步收發(fā)器(USART)提供了一個靈活方便的串行數(shù)據(jù)交換接口,數(shù)據(jù)幀可以通過全雙工或半雙工,同步或異步的方式進行傳輸。USART提供了可編程的波特率發(fā)生器及奇偶校驗位、數(shù)據(jù)位和停止位等可編程的串口特性。它還支持多處理器通信、多種狀態(tài)標志和硬件流控操作(CTS/RTS)。另外,USART還支持DMA功能,以實現(xiàn)高速率的數(shù)據(jù)通信(除了UART4)。


(USART模塊內(nèi)部框圖)


更多USART詳細特性可查閱《GD32VF103用戶手冊》


RV-STAR的USB UART電路
在之前的文章中介紹過,RV-STAR的開發(fā)板上使用了一個雙端口的FT2232 USB設(shè)備芯片,一個端口用于JTAG調(diào)試,另一個端口可建立開發(fā)板到電腦的串口連接,其電路原理圖如下:



(GD32VF103部分引腳電路圖)


(FT2232部分引腳電路圖)


從電路原理圖可知,RV-STAR是通過UART4_TX(PC12)和UART4_RX(PD2)連接到FT2232芯片,進而和電腦建立連接,了解這個才便于我們稍后編寫實驗代碼。






實驗1:返回接收的字符
實驗1是讓RV-STAR開發(fā)板接收從PC主機發(fā)送的字符,再回發(fā)給PC主機。在進行UART編程的時候,首先需要對UART外設(shè)進行初始化,代碼片段如下:
void uart_init()
{
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_UART4);

// UART4_TX - PC12
gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
// UART4_RX - PD2
gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

usart_deinit(UART4);
usart_baudrate_set(UART4, 115200U);
usart_word_length_set(UART4, USART_WL_8BIT);
usart_stop_bit_set(UART4, USART_STB_1BIT);
usart_parity_config(UART4, USART_PM_NONE);
usart_hardware_flow_rts_config(UART4, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(UART4, USART_CTS_DISABLE);
usart_receive_config(UART4, USART_RECEIVE_ENABLE);
usart_transmit_config(UART4, USART_TRANSMIT_ENABLE);
usart_enable(UART4);
}
首先需要初始化外設(shè)時鐘,然后將發(fā)送引腳初始化為推挽輸出模式、接收引腳初始化為浮空輸入模式,然后依次設(shè)置UART4的波特率(115200)、數(shù)據(jù)位(8位)、停止位(1位)、奇偶校驗位(無)、硬件流控以及使能收發(fā)器。UART發(fā)送器和接收器支持若干個中斷事件,為了保證接收數(shù)據(jù)的完整和及時,我們通常使用中斷的方式處理數(shù)據(jù)的接收,因此需要在主程序開始時進行中斷使能,這里使用非向量模式中斷,當(dāng)接收器接受到數(shù)據(jù)幀,其狀態(tài)寄存器的RBNE產(chǎn)生置位時觸發(fā)中斷,其代碼片段如下:
int main()
{
uart_init();

ECLIC_Register_IRQ(UART4_IRQn, ECLIC_NON_VECTOR_INTERRUPT, ECLIC_LEVEL_TRIGGER, 1, 0, NULL);
__enable_irq();

usart_interrupt_enable(UART4, USART_INT_RBNE);

while (1);
}
主程序中只進行外設(shè)初始化中斷使能,接收字符和回傳因為時間極短,可以都在中斷服務(wù)程序中處理:使用字符型變量c保存使用usart_data_receive()接收到的數(shù)據(jù),然后再使用usart_data_transmit()發(fā)送出去(每次發(fā)送數(shù)據(jù)幀,需要等待USART_FLAG_TBE置位后再發(fā)送下一幀)。



void UART4_IRQHandler(void)
{
if (RESET != usart_interrupt_flag_get(UART4, USART_INT_FLAG_RBNE))
{
uint8_t c = usart_data_receive(UART4);

usart_data_transmit(UART4, c);
while (SET != usart_flag_get(UART4, USART_FLAG_TBE));
}
}



完成代碼編寫后,連接開發(fā)板,編譯并上傳代碼。為了屏蔽不同IDE的串口終端的差異,我們使用通用的PC串口軟件CoolTerm來觀察串口實驗的現(xiàn)象,它是一個免費而功能強大的串口調(diào)試軟件。


下載鏈接:


https://coolterm.sooftware.com/windows


首先打開Windows設(shè)備管理器,查看RV-STAR開發(fā)板的串口端口號(筆者的電腦上是COM15,讀者的電腦上可能不同)。



(設(shè)備管理器查看端口)



然后打開CoolTerm,點擊“Options”按鈕進行串口配置,選擇COM15端口,設(shè)置波特率為115200,其他采用默認設(shè)置(和代碼中對UART4串口的配置一致),點擊下方的“OK”按鈕后,點擊“Connect”按鈕,即可連接到RV-STAR的串口上。




(配置CoolTerm)



連接成功后,參照下圖,在“Connection”選項卡中找到“Send String”然后打開。


(打開發(fā)送窗口)



在發(fā)送窗口中,輸入字符,然后點擊“Send”發(fā)送,會發(fā)現(xiàn)RV-STAR將字符進行了回傳,并打印顯示在了終端窗口中。


(在發(fā)送窗口中輸入字符)



也可以不使用“Send String”,直接將光標移動到終端窗口中,然后鍵入字符,也可正?;仫@。




(直接在終端窗口中鍵入字符)



完整代碼請參考:





實驗2:控制板載RGB LED
實驗2是通過PC主機向RV-STAR的串口發(fā)送'r','g','b'三種不同的字符,用以控制RV-STAR的板載RGB LED產(chǎn)生不同的亮光。和實驗1的回傳字符程序不同的地方是,實驗2的代碼里使用了一個char類型的全局變量led_color作為主程序和中斷服務(wù)程序的橋梁,用于存儲在中斷服務(wù)程序中接收到的字符,然后在主程序的循環(huán)體中調(diào)用函數(shù),據(jù)此變量改變led的狀態(tài)。完整代碼請參考:


實驗現(xiàn)象參考以下動圖,在CoolTerm終端中鍵入'r','g','b'字符,LED依次亮紅光、綠光和藍光。




實驗3:返回接收的字符串
實驗3是實驗1和實驗2的升級版,可以讓RV-STAR開發(fā)板接收從PC主機發(fā)送的一串字符串并進行回傳。其實現(xiàn)思路是:在全局變量中定義了一個數(shù)組用作接收數(shù)據(jù)的環(huán)形緩沖區(qū),每次在接收中斷里將收到的字符存入環(huán)形緩沖區(qū),在主循環(huán)中檢測接收緩沖區(qū)是否收到了一段完整的字符串(通過判斷頭尾指針和'\n'結(jié)束符),然后再將緩沖區(qū)中的字符依次傳出。在CoolTerm中的實驗現(xiàn)象參照下圖(需要鍵入一個回車光標作為結(jié)束符):



完整代碼請參考:






“RVMCU課堂”專欄已在社區(qū)開通如有實驗相關(guān)問題可在專欄對應(yīng)文章下進行討論



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉