国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
串口通信的三種方式(查詢、中斷、DMA)

 PC機(jī)串口定義如下圖:

一般的單片機(jī)串口應(yīng)用只需3根信號(hào)線:3腳TXD(發(fā)送數(shù)據(jù))、2腳RXD(接收數(shù)據(jù))、5腳SG(信號(hào)地)。其中單片機(jī)的TXD對(duì)應(yīng)連接PC機(jī)的RXD,單片機(jī)RXD連接PC的TXD。即兩者是交叉連接。需要注意的是如果單片機(jī)部分串口接收電路已經(jīng)將兩者交換,則連接使用直通線即可。否則需要使用交叉線連接(如萬(wàn)利的板子)。通常兩頭都是“母”的串口線是RXD與TXD是交叉連接的。如使用直通線注意在MAX232等電平轉(zhuǎn)換電路中將TX與RX交叉連接。

使用上面的三線連接,注意在超級(jí)終端里將COMx口的“數(shù)據(jù)流控制”設(shè)為“無(wú)”。即使你不使用超級(jí)終端調(diào)試,也要注意,錯(cuò)誤的設(shè)置將導(dǎo)致PC機(jī)出現(xiàn)只能接收而不能發(fā)送數(shù)據(jù)的現(xiàn)象。

串口使用-3V~-25V的負(fù)邏輯電平表示“1”, 3V~ 25V表示邏輯“0”。調(diào)試時(shí)通過(guò)示波器捕捉串口波形是個(gè)比較好的方法。(為了捕捉數(shù)字信號(hào),對(duì)于大多數(shù)示波器設(shè)置觸發(fā)類型為脈沖)

USART數(shù)據(jù)傳輸由低位向高位傳。串口電平轉(zhuǎn)換電路串口電平轉(zhuǎn)換為標(biāo)準(zhǔn)TTL(或LVTTL)電平。如下圖:

 

當(dāng)發(fā)送器激活,并且沒(méi)有數(shù)據(jù)發(fā)送時(shí),TX引腳處于高電平;當(dāng)發(fā)送器禁止時(shí),TX恢復(fù)它的I/O端口配置。一個(gè)完整的幀包括:起始位、數(shù)據(jù)位(8或9位)、停止位(1或2位)。兩個(gè)特殊的幀:完全由“1”組成的數(shù)據(jù)幀幀稱為空閑字符幀;完全由“0”組成的幀稱為斷開(kāi)字符幀。

在STM32處理器中,將發(fā)送數(shù)據(jù)寫入U(xiǎn)SART_DR寄存器,此動(dòng)作清除TXE(發(fā)送允許位)。軟件讀RXNE位完成對(duì)RXNE(接收寄存器非空位)清零。RXNE必須在下一個(gè)字符接收結(jié)束前清零。

USART的所有中斷事件被連接到一個(gè)中斷向量中,也就是說(shuō)需要在中斷例程中判別各種可能出現(xiàn)的情況。

數(shù)據(jù)寄存器實(shí)際上由兩個(gè)寄存器組成,一個(gè)給發(fā)送用(TDR只寫),一個(gè)給接收用(RDR只讀)。和AVR的類似,兩個(gè)寄存器合并成一個(gè)UDR寄存器




采用中斷方式進(jìn)行串口通信

通過(guò)對(duì)CodeVersion AVR上的串口通信程序的移植,在STM32上實(shí)現(xiàn)了串口數(shù)據(jù)收發(fā)的中斷通信。收發(fā)各自使用兩個(gè)循環(huán)隊(duì)列實(shí)現(xiàn)文件緩沖,從而提高了執(zhí)行效率。

隊(duì)列:一種先進(jìn)先出(FIFO:First In First Out)的策略。

在向USART寫數(shù)據(jù)時(shí),先檢測(cè)接收數(shù)據(jù)寄存器是否“滿” ,如有數(shù)據(jù)則寫入隊(duì)列中。當(dāng)每發(fā)送完一幀數(shù)據(jù)后進(jìn)入中斷程序,檢測(cè)隊(duì)列中是否有數(shù)據(jù),如有數(shù)據(jù)則發(fā)送,否則退出。USART數(shù)據(jù)時(shí)的情況類似。需要注意的是在USART_putchar() 和USART_getchar() 函數(shù)對(duì)緩沖區(qū)隊(duì)列指針操作時(shí)需要禁止中斷。

Tips:在串口通訊中調(diào)用函數(shù)USART_GetITStatus(USART1, USART_IT_TC)檢測(cè)接收是否完成,函數(shù)USART_ClearFlag(USART1,USART_FLAG_TC)清除完成中斷標(biāo)志位,它們操作的都是同一寄存器位USART_CR->TC(狀態(tài)寄存器中的完成標(biāo)志位)。在其它中斷中的USRAT_FLAG_xx(標(biāo)志位)和USART_TI_xx(中斷標(biāo)志位)都表示同一個(gè)位。只是為了強(qiáng)調(diào)其在特定函數(shù)中的作用,而采用不同表述方式。但USART_ITConfig(USART1, USART_IT_TC, DISABLE)函數(shù)中的USART_IT_TC位則是相應(yīng)的中斷允許位,實(shí)際是對(duì)寄存器USART_CR1->TCIE位操作。

采用DMA方式進(jìn)行串口通信

STM32串口通信模塊支持使用DMA方式進(jìn)行數(shù)據(jù)傳輸,以下代碼實(shí)現(xiàn)了數(shù)據(jù)DMA發(fā)送方式。當(dāng)發(fā)送完畢產(chǎn)生中斷。

程序首先在SRAM中開(kāi)辟大小為BufferSize的緩沖區(qū)SRC_Char_Buffer[],在main()函數(shù)中對(duì)其進(jìn)行初始化。DMA初始化后SRC_Char_Buffer為源地址,USART1_DR_Base(USART1數(shù)據(jù)寄存器)為目的地址。通過(guò)USART_DMACmd()函數(shù)設(shè)置USART_CR3中的DMAT(允許DMA發(fā)送位)。執(zhí)行DMA_Cmd()函數(shù)后使能DMA通道4傳輸,開(kāi)始向串口數(shù)據(jù)寄存器發(fā)送數(shù)據(jù)。每發(fā)送一個(gè)字節(jié)源地址自動(dòng)加1,總共發(fā)送BufferSize個(gè)字節(jié)。這一過(guò)程由DMA控制器完成,無(wú)須CPU參與。發(fā)送完成后進(jìn)入中斷,中斷服務(wù)程序CurrDataCounter的值并通過(guò)軟件設(shè)置清除通道全局標(biāo)志(同時(shí)發(fā)送完成標(biāo)志TC自動(dòng)得到清除)。主程序通過(guò)判斷CurrDataCounter的值是否為零,決定DMA傳輸是否結(jié)束。為“0”則表示成功,打印相應(yīng)信息。在實(shí)際使用中,CPU可以在數(shù)據(jù)發(fā)送同時(shí)執(zhí)行其它操作。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
stm32串口通信的一個(gè)小總結(jié)(從底層進(jìn)行理解)
STM32串口空閑中斷接收不定長(zhǎng)數(shù)據(jù)(DMA方式)
【青風(fēng)帶你學(xué)stm32f051系列教程】第9課 串口UART | 愛(ài)板網(wǎng)
ARM嵌入式編程與實(shí)戰(zhàn)應(yīng)用(STM32F1系列)第5章 USART串口通信
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服