99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

小麥大叔
認(rèn)證:普通會(huì)員
作者動(dòng)態(tài)
一款輕量級(jí)的開(kāi)源GUI項(xiàng)目——SimpleGUI,可以完美適配單色屏
02-22 09:47
看到這100多個(gè)軟硬件開(kāi)源項(xiàng)目,真是爽爆了
2024-11-30 14:12
推薦一個(gè)高效,可靠,安全的串口通訊開(kāi)源方案
2024-11-27 11:17
推薦一款開(kāi)源hack硬件平臺(tái)工具
2024-11-26 13:58
新手學(xué)STM32的話,先學(xué)標(biāo)準(zhǔn)庫(kù)還是HAL庫(kù)?
2024-10-18 15:09

高效,可靠,安全的串口通訊開(kāi)源方案

大家好,我是小麥。

在嵌入式開(kāi)發(fā)中,經(jīng)常會(huì)用到串口通訊。面對(duì)不同應(yīng)用場(chǎng)景,需要不同的方案。

今天我們來(lái)講一下高效,可靠,安全的方案,記得看到最后,會(huì)有收獲。

常見(jiàn)的有串口輪詢模式,串口中斷模式,串口DMA接收傳輸?shù)鹊龋?/p>

利用串口的空閑中斷配合DMA的環(huán)形緩沖區(qū)模式,可以高效接收不固定長(zhǎng)度的消息報(bào)文

下圖中經(jīng)過(guò)黃色的高電平時(shí)間空閑之后,就會(huì)產(chǎn)生一個(gè)空閑事件,IDLE EVENT

空閑信號(hào)

因?yàn)镈MA功能有HCTC中斷;

  • HC  (Harf Complete)DMA傳輸一半成功標(biāo)志;
  • TC   (Total Complete)  DMA傳輸完成成功標(biāo)志;

舉個(gè)例子;

如下圖所示,這里分配了一個(gè)DMA緩沖區(qū),大小是12字節(jié),如果從地址1開(kāi)始接收,會(huì)出現(xiàn)以下這兩種情況;

  • DMA接收到第6個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)HC事件;
  • DMA接收到第12個(gè)字節(jié)的時(shí)候,會(huì)觸發(fā)TC事件;

HC TC

這個(gè)思路其實(shí)我之前也有實(shí)踐過(guò),但是沒(méi)有很好地利用HC和TC事件。

所以無(wú)法處理這種情況,即DMA緩沖區(qū)處于環(huán)形模式(Circular)的時(shí)候,數(shù)據(jù)覆蓋的問(wèn)題,最近看到了一個(gè)非常棒的開(kāi)源項(xiàng)目,這里的思路非常不錯(cuò),下面會(huì)詳細(xì)介紹。

下面是DMA HC/DMA TC/Idle組合進(jìn)行串口接收的細(xì)節(jié),如下圖所示;

來(lái)自原項(xiàng)目

再次簡(jiǎn)單介紹一下縮略詞的含義;

  • R 讀取;
  • W 寫入;
  • I 空閑信號(hào);
  • HT Half-Transfer complete DMA緩沖區(qū)半傳輸完成;
  • TC Transfer-Complete DMA緩沖區(qū)全部接收完成;

這里簡(jiǎn)單介紹一下情況E的解決方案,上面圖片最右邊小圖;

  • 緩沖區(qū)大小20格,這里假設(shè)20字節(jié),情況E需要接收30個(gè)字節(jié),也就是說(shuō),10字節(jié)可能會(huì)被覆蓋
  • 經(jīng)過(guò)前面的四次接收后,串口繼續(xù)從字母R處接收數(shù)據(jù)至DMA緩沖區(qū);
  • 接收4字節(jié)時(shí),會(huì)觸發(fā)TC事件,這時(shí)候可以將4字節(jié)數(shù)據(jù)處理;

第一步

  • 因?yàn)槭黔h(huán)形模式,所以回到第一個(gè)字節(jié)處,繼續(xù)接收10字節(jié),觸發(fā)HT事件,這時(shí)候可以處理10字節(jié)數(shù)據(jù);

第二步

  • 第三步,繼續(xù)接收10字節(jié),觸發(fā)TC事件,其中,已經(jīng)有4字節(jié)被覆蓋(下圖橙色所示),因?yàn)橹斑@部分?jǐn)?shù)據(jù)已經(jīng)處理了,所以,即使覆蓋也不影響;

第三步

  • 第四步,上述已經(jīng)接收了24個(gè)字節(jié),所以還有6個(gè)字節(jié)沒(méi)有接收,后面接收會(huì)產(chǎn)生空閑信號(hào),并對(duì)之前的數(shù)據(jù)區(qū)域進(jìn)行覆蓋,如下圖示所示;

所以,不難發(fā)現(xiàn),如果只使用空閑中斷,如果需要接收的數(shù)據(jù)長(zhǎng)度大于緩沖區(qū),就會(huì)出現(xiàn)數(shù)據(jù)覆蓋的情況,而加上DMA的HT和TC中斷,就完美解決了這樣的問(wèn)題;

當(dāng)然除了這些,還有很多優(yōu)秀的方案,這個(gè)項(xiàng)目提供大量的例子。

項(xiàng)目地址https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx

項(xiàng)目主頁(yè)

目前這個(gè)項(xiàng)目主要支持主流的STM32芯片平臺(tái)和一些開(kāi)發(fā)板上的測(cè)試DEMO,具體如下所示;

支持平臺(tái)

相應(yīng)的例子程序如下所示,除了裸機(jī)程序,還有環(huán)形緩沖區(qū)接收,輪詢接收,DMA+空閑中斷基于RTOS的模式接收,挺豐富的,可以參考一下;

例子程序

作者在 STM32F413-Nucleo 開(kāi)發(fā)板進(jìn)行程序的測(cè)試,發(fā)現(xiàn)優(yōu)化效果很不錯(cuò);

115200的串口波特率下,每秒發(fā)送1581個(gè)字節(jié),大約142ms;

  • 不使用DMA,CPU負(fù)載14%;
  • 使用DMA,CPU負(fù)載0%;
聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 3
關(guān)注 145
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 欧美重口另类在线播放二区 | 一级片黄色一级片 | 国产成人精品无码一区二区 | 国产一区久久精品 | 日韩av视屏在线观看 | 少妇穿牛仔裤一级av毛片 | 亚洲a在线播放 | 精品无码国产AV一区二区 | 国产精品久久久久久久婷婷 | 国产不卡一二三区 | 中文字幕第25页 | 成人激情av | 亚洲а∨天堂久久精品2021 | 亚洲精品一区二区制服 | 中文字幕亚洲综合久久菠萝蜜 | 国产精品成人免费精品自在线观看 | 天天爽狠狠噜天天噜日日噜 | 久久超乳爆乳中文字幕 | 色噜噜在线播放 | 一区二区三区精品视频免费看 | 波多老师无码av中字专区 | 亚洲综合成人婷婷五月在线观看 | 911精品美国片911久久久 | 波多野结衣永久免费视频 | 麻豆传媒一区二区三区 | 最好看的中文视频最好的中文 | 九七九色丨麻豆 | 免费视频18上在线观看 | 色偷偷色噜噜狠狠网站久久 | 免费网站看V片在线18禁无码 | 一区二区三区日本 | 国内精品人妻无码久久久影院蜜桃 | 日本少妇激三级做爰在线 | 国产精品民宅偷窥盗摄 | 狠狠躁夜夜a产精品视频 | 天天爽天天狠久久久综合麻豆 | 成人日韩精品 | 日本免费高清 | 午夜精品一区二区三区三上悠亚 | 熟女泄火一区二区三区在线 | 中文字幕久精品免费视频 |