欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2356|回復(fù): 10
收起左側(cè)

stm單片機(jī)串口發(fā)送的疑問(wèn)

[復(fù)制鏈接]
ID:525511 發(fā)表于 2023-11-28 11:39 | 顯示全部樓層 |閱讀模式
在串口數(shù)據(jù)發(fā)送操作中,單片機(jī)代碼一般是這樣寫(xiě)的:void USART_SendByte(USART_TypeDef* USARTx, uint8_t Data){    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);    USART_SendData(USARTx,Data);    }
那么這里while不是一直在死等嗎?這個(gè)過(guò)程程序是不做任何事的,和delay有什么分別?都說(shuō)程序中不要用延時(shí)死等,那么這里怎么辦?如果要發(fā)送的數(shù)據(jù)很多的話,每次都在這里死等一下,整體會(huì)拖慢程序運(yùn)行速度吧?不加這個(gè)while的話還有其它方法實(shí)現(xiàn)發(fā)送功能嗎?我知道可以用DMA,但好像不是所有片子都有DMA吧?虛心求教
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2023-11-28 14:35 | 顯示全部樓層
雖然說(shuō)都是死等,但效率并不會(huì)太慢
你看一下代碼就知道了
調(diào)用函數(shù)之后并不是先發(fā)送數(shù)據(jù),而是先查詢(xún)發(fā)送完成標(biāo)志位
然后,就發(fā)送數(shù)據(jù),函數(shù)就返回了,程序在返回之后就可以去做其它的事了
其實(shí)這就已經(jīng)可以了,串口本身就是不用來(lái)進(jìn)行超高速數(shù)據(jù)傳送的
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2023-11-28 14:50 | 顯示全部樓層
while是檢測(cè)到發(fā)送完就進(jìn)行下一步,delay不可能比while時(shí)間短,最好用while。
回復(fù)

使用道具 舉報(bào)

ID:744809 發(fā)表于 2023-11-28 15:23 | 顯示全部樓層
可以寫(xiě)一個(gè)發(fā)送隊(duì)列,然后用發(fā)送中斷的方式進(jìn)行發(fā)送,每發(fā)送一個(gè)字節(jié)會(huì)進(jìn)入發(fā)送中斷一次,此時(shí)在中斷里判斷發(fā)送buf還有沒(méi)有待發(fā)送的字節(jié),有則繼續(xù)發(fā)送,沒(méi)有則說(shuō)明此次發(fā)送已經(jīng)好了。
回復(fù)

使用道具 舉報(bào)

ID:470485 發(fā)表于 2023-11-28 16:12 | 顯示全部樓層
不是死等,是反復(fù)檢查,當(dāng)檢測(cè)到發(fā)送完(時(shí)間可長(zhǎng)可短),就進(jìn)入下一步
Delay等待只能固定時(shí)間,不能靈活控制。
回復(fù)

使用道具 舉報(bào)

ID:1093268 發(fā)表于 2023-11-28 16:12 | 顯示全部樓層
大部分應(yīng)用對(duì)于:“串口阻塞發(fā)送”,并不會(huì)對(duì)其他進(jìn)程的時(shí)效有多大影響。除非要發(fā)送很多很多字節(jié)或其他進(jìn)程的實(shí)時(shí)要求特別高,才不會(huì)選擇這種阻塞發(fā)送。如果不能用阻塞發(fā)送,可以利用串口BUF空中斷+串口發(fā)送完成中斷+軟件做個(gè)發(fā)送緩沖器。
回復(fù)

使用道具 舉報(bào)

ID:124486 發(fā)表于 2023-11-28 18:43 | 顯示全部樓層
不是死等,是檢測(cè)是否接收或者發(fā)送完成等待,任務(wù)不需要即時(shí)響應(yīng)的話,波特率調(diào)快一點(diǎn)還好這種方式也還行,如果不想等就用中斷做
回復(fù)

使用道具 舉報(bào)

ID:384109 發(fā)表于 2023-11-28 19:33 | 顯示全部樓層
改中斷發(fā)送方式就好了
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-11-28 22:43 | 顯示全部樓層
可以把這個(gè)死等程序放主循環(huán)里面,其他功能在中斷完成,就不會(huì)有卡死的現(xiàn)象了。這個(gè)死等只要?jiǎng)e放在中斷里面等就沒(méi)問(wèn)題。
回復(fù)

使用道具 舉報(bào)

ID:744809 發(fā)表于 2023-11-29 16:53 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-11-28 22:43
可以把這個(gè)死等程序放主循環(huán)里面,其他功能在中斷完成,就不會(huì)有卡死的現(xiàn)象了。這個(gè)死等只要?jiǎng)e放在中斷里面 ...

你這太抽象了,哪有把串口放主函數(shù),其他放中斷的。本末倒置了不是
回復(fù)

使用道具 舉報(bào)

ID:525511 發(fā)表于 2023-12-1 15:51 | 顯示全部樓層
好的,明白了,多謝各位
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表