精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

STM32使用DMA接收串口數據

商務辦公
在串口講解的文章中,示例代碼采用中斷方式接收和發送數據,中斷的好處在于可以及時響應,快速接收到數據,但缺點也很明顯,那就是頻繁中斷,接收1000個字節需要中斷1000次,頻繁中斷就意味著會打斷其他代碼的執行,對一些應用場景是不允許的。

[[397454]]

01概述

在之前的文章里《STM32串口詳解》和《STM32 DMA詳解》文章中,詳細講解了STM32的串口和DMA外設,本篇文章將不在細述串口和DMA的知識。

在串口講解的文章中,示例代碼采用中斷方式接收和發送數據,中斷的好處在于可以及時響應,快速接收到數據,但缺點也很明顯,那就是頻繁中斷,接收1000個字節需要中斷1000次,頻繁中斷就意味著會打斷其他代碼的執行,對一些應用場景是不允許的。這個時候,使用DMA+串口的組合就可以很好解決這個問題。

DMA每個數據流有8個通道,每個通道映射到不同外設,這有利于針對不同的產品配置不同的DMA外設請求。

每個數據流只能配置為映射到一個通道,無法配置為映射到多個通道。即,與數據流不同,每個DMA控制器可以同時配置多個數據流(因為有仲裁器),但每個數據流不能同時配置多個通道(因為只有選擇器)。

我們使用USART1串口外設,從數據手冊中可以查到,USART1的發送和接收都是支持DMA的,使用的是DMA2.

接下來我們循序漸進了解DMA在串口中的應用

02DMA接收

我們先配置DMA,將DMA外設和串口聯動起來。首先需要配置DMA。

DMA配置這一塊不再詳解,不太懂的同學請看文章《STM32DMA詳解》,這里我們直接貼代碼。

  1. void DMA_Config(void) 
  2.   DMA_InitTypeDef  DMA_InitStructure; 
  3.      
  4.   /* Enable DMA clock */ 
  5.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); 
  6.    
  7.   /* Reset DMA Stream registers (for debug purpose) */ 
  8.   DMA_DeInit(DMA2_Stream2); 
  9.  
  10.   /* Check if the DMA Stream is disabled before enabling it. 
  11.      Note that this step is useful when the same Stream is used multiple times: 
  12.      enabled, then disabled then re-enabled... In this case, the DMA Stream disable 
  13.      will be effective only at the end of the ongoing data transfer and it will  
  14.      not be possible to re-configure it before making sure that the Enable bit  
  15.      has been cleared by hardware. If the Stream is used only once, this step might  
  16.      be bypassed. */ 
  17.   while (DMA_GetCmdStatus(DMA2_Stream2) != DISABLE) 
  18.   { 
  19.   } 
  20.    
  21.   /* Configure DMA Stream */ 
  22.   DMA_InitStructure.DMA_Channel = DMA_Channel_4;  //DMA請求發出通道 
  23.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;//配置外設地址 
  24.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)UART_Buffer;//配置存儲器地址 
  25.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//傳輸方向配置 
  26.   DMA_InitStructure.DMA_BufferSize = (uint32_t)32;//傳輸大小 
  27.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設地址不變 
  28.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//memory地址自增 
  29.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外設地址數據單位 
  30.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//memory地址數據單位 
  31.   DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA模式:正常模式 
  32.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;//優先級:高 
  33.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//FIFO 模式不使能.           
  34.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;// FIFO 閾值選擇 
  35.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存儲器突發模式選擇,可選單次模式、 4 節拍的增量突發模式、 8 節拍的增量突發模式或 16 節拍的增量突發模式。 
  36.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外設突發模式選擇,可選單次模式、 4 節拍的增量突發模式、 8 節拍的增量突發模式或 16 節拍的增量突發模式。 
  37.   DMA_Init(DMA2_Stream2, &DMA_InitStructure);  
  38.    
  39.   /* DMA Stream enable */ 
  40.   DMA_Cmd(DMA2_Stream2, ENABLE); 

除了配置DMA外設外,我們還需要配置串口對應的DMA配置,在手冊有一小章節講解到。

需要配置的寄存器是USART_CR3寄存器。

我們可以通過配置USART_CR3寄存器的bit6和bit7使能串口發送和接收DMA。ST的標準外設庫同樣提供了對應的外設庫。

  1. void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState) 

通過上面接口可以配置串口的DMA配置如下:

  1. /*使能串口DMA接收*/ 
  2. USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE); 

03中斷

我們使用DMA+串口解決了頻繁中斷的問題,但現在有一個問題,我們還需要及時將接收的數據信息通知CPU,以便達到數據的及時性。我們使用DMA和串口兩個外設,他們都有自己的中斷。

使用DMA中斷,如下配置

  1. /* Enable DMA Stream Transfer Complete interrupt */ 
  2. DMA_ITConfig(DMA2_Stream2, DMA_IT_TC, ENABLE); 
  3.    
  4. /* Enable the DMA Stream IRQ Channel */ 
  5. NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream2_IRQn; 
  6. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
  7. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
  8. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  9. NVIC_Init(&NVIC_InitStructure); 

當DMA接收完畢時,會產生中斷通知CPU取數據。

但這有個明顯的缺陷:串口接收一包數據,長度如果小于DMA的緩沖長度,那么久不能觸發中斷,只能等DMA接收滿數據才會產生中斷,如果下一包數據遲遲不來,那么這一包就不能被及時響應。

那么我們采用串口中斷是一個不錯的方案。串口提供了一個空閑中斷,“似乎”就是為了DMA專門使用的。

當串口接收一包數據,接收完最后一個字節,沒有數據接收時,會產生一個中斷,這個時候,CPU就可以取數據。

串口的配置知識不再講解,不太懂的同學請看《STM32串口詳解》,串口空閑中斷配置如下

  1. USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); 
  2.    
  3. /* Enable the USARTx Interrupt */ 
  4. NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 
  5. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0; 
  6. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
  7. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  8. NVIC_Init(&NVIC_InitStructure); 

串口中斷代碼如下

  1. void USART1_IRQHandler(void) 
  2.   uint8_t temp
  3.   if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) == SET
  4.   { 
  5.     DealWith_UartData(); 
  6. //    USART_ClearFlag(USART1, USART_FLAG_IDLE); 
  7.     temp = USART1->SR;   
  8.     temp = USART1->DR; //清USART_IT_IDLE標志   
  9.   } 

重點:這里有一個坑!!!

清除空閑中斷位的代碼是

  1. temp = USART1->SR;    
  2. temp = USART1->DR; //清USART_IT_IDLE標志 

證據如下

這一點很坑人,注意。

04代碼

DMA+串口接收的工程代碼是開源的,Keil和IAR的工程都有

  • 33-USART-DMA-Receive DMA串口接收(沒有使用中斷)
  • 34-USART-Receive-DMAInterrupt DMA串口接收(DMA中斷)
  • 35-USART-DMA-Receive-Interrupt DMA串口接收(串口空閑中斷)

PCB和工程代碼開源地址:

https://github.com/strongercjd/STM32F207VCT6

本文轉載自微信公眾號「知曉編程」,可以通過以下二維碼關注。轉載本文請聯系知曉編程公眾號。

 

責任編輯:武曉燕 來源: 知曉編程
相關推薦

2021-05-20 07:26:22

DMASTM32數據

2021-02-03 13:04:24

STM32網絡控制器

2021-06-26 07:50:20

STM32串口開發環形緩沖區

2021-08-31 08:01:40

STM32DSP指令

2022-07-25 14:31:55

LiteOS開發工具

2021-02-05 08:41:44

STM32網絡中斷

2021-01-20 09:51:25

STM32網絡接口

2021-08-26 06:29:47

STM32DWT數據觀察點觸發

2022-10-10 08:24:15

編程數據邏輯語句

2021-12-22 06:56:07

STM32C語言內存

2022-01-07 08:24:13

STM32枚舉結構體

2021-03-06 21:21:11

STM32單片機追蹤庫

2021-04-22 08:39:23

哈佛結構馮洛伊曼結構ARM架構

2021-02-01 06:39:42

模塊封裝庫

2020-12-03 06:32:21

STM32單片機通信

2021-11-15 09:53:16

STM32PSPMSP

2018-10-15 10:15:30

STM32Linux經驗

2021-02-26 08:46:46

PHY寄存器網絡

2020-01-10 22:51:30

硬件軟件人生第一份工作

2011-07-01 13:03:32

QT 線程 串口
點贊
收藏

51CTO技術棧公眾號

久久精品国产亚洲AV熟女| 91久久久久久久一区二区| 97高清免费视频| www.日日操| 黄色在线免费| 91污在线观看| 国产日韩精品视频| 日韩成人高清视频| 成人羞羞动漫| 亚洲精品国精品久久99热一| 国产 porn| 九九精品调教| 中文天堂在线一区| 国产一区自拍视频| 一区二区三区黄色片| 亚洲久色影视| 久久综合免费视频| 人人人妻人人澡人人爽欧美一区| 精品一区二区三区中文字幕视频| 欧美日韩精品在线观看| 看全色黄大色大片| 成年人视频网站在线| 成人性生交大片| 91精品久久久久久久| 一区二区三区福利视频| 欧美精品一区二区三区久久久竹菊| 亚洲精品网址在线观看| 69xxx免费视频| www.91精品| 欧美日韩国产另类一区| 久久久久久久久久久久久国产精品| av理论在线观看| 中文字幕中文在线不卡住| 免费看污久久久| 日本wwwxxxx| 国产成人免费av在线| 国产免费久久av| 日韩久久久久久久久久| 国产精品免费看| 欧美国产精品日韩| 久久久精品视频免费观看| 久久高清精品| 中文字幕精品久久久久| 国产毛片久久久久久久| 校花撩起jk露出白色内裤国产精品| 日韩欧美一二区| 日本黄色一级网站| 欧美午夜网站| 日韩视频在线你懂得| 天天操狠狠操夜夜操| 99精品国自产在线| 欧美午夜一区二区三区免费大片| 日韩有码免费视频| 日韩影片中文字幕| 在线视频一区二区三| 国产一级不卡毛片| 国产成人亚洲一区二区三区| 91传媒视频在线播放| 少妇性l交大片| jizz欧美| 91精品国产一区二区人妖| 四虎1515hh.com| av成人资源| 日韩激情视频在线播放| 日本aaa视频| 波多野结衣在线播放一区| 国产亚洲欧美日韩美女| 美国一级片在线观看| 亚洲a在线视频| 久久99国产综合精品女同| 免费在线视频观看| 亚洲精品1区| 欧美在线视频免费播放| 极品国产91在线网站| 日韩精品一二三| 91在线免费观看网站| 亚洲成人一级片| 91免费精品国自产拍在线不卡| 免费一区二区三区| 老司机99精品99| 一区二区三区视频在线看| 国产v片免费观看| 欧美黑人一区| 欧美一区二区三区视频在线观看| 一级少妇精品久久久久久久| 精品一区免费| 久久天天躁夜夜躁狠狠躁2022| 欧美三级 欧美一级| 国产农村妇女毛片精品久久莱园子| 国产精品极品在线| 亚洲成a人片77777精品| 国产亚洲污的网站| 日韩黄色片在线| 日韩欧美一区二区三区免费观看 | 欧美中文字幕精在线不卡| 欧美图区在线视频| av电影在线播放| 久久久综合色| 国产91精品视频在线观看| 在线观看国产黄| 不卡视频在线观看| 中国成人在线视频| 日韩大片欧美大片| 日韩欧美区一区二| 极品人妻videosss人妻| 韩国欧美一区| 91精品久久久久久久久不口人| 亚洲精品字幕在线观看| 国产精品久久久久9999吃药| 国产精品沙发午睡系列| 精品久久亚洲| 尤物精品国产第一福利三区| 国产一级片免费看| 国产一区二区伦理| 婷婷精品国产一区二区三区日韩| √8天堂资源地址中文在线| 欧美日韩二区三区| 91精品人妻一区二区| 欧美午夜一区| 91在线视频导航| www.黄在线观看| 香港成人在线视频| 91视频免费入口| 99成人在线视频| 国产精品91久久| 深夜福利视频一区| 亚洲在线视频免费观看| 深夜做爰性大片蜜桃| 欧美一级精品片在线看| 欧美自拍大量在线观看| 欧美一区二不卡视频| 一区二区在线观看免费| 久久精品久久99| 91欧美在线| 国产精品日韩精品| 北条麻妃在线| 91福利在线免费观看| aaaaa级少妇高潮大片免费看| 韩日在线一区| 成人自拍爱视频| 日本高清在线观看视频| 欧美一三区三区四区免费在线看 | 丰满少妇一区二区三区专区| 国产精品久久占久久| 成人福利在线观看| 麻豆传媒在线完整视频| 欧美精品一二三四| 三上悠亚作品在线观看| 国产一区二区在线看| 一区二区三区四区五区视频| 成人免费在线观看视频| 中文字幕一区二区精品| 一级黄色小视频| 中文字幕中文字幕一区二区| 亚洲网中文字幕| 欧美视频成人| 精品一区二区三区免费毛片| 在线手机中文字幕| 亚洲人午夜精品| 中文字幕91爱爱| 国产精品久线观看视频| 中文国产在线观看| 激情自拍一区| 久久免费看av| 色香欲www7777综合网| 中文亚洲视频在线| 国产手机av在线| 亚洲成av人片在线| 成年人网站免费在线观看| 久久午夜精品一区二区| 一区二区三区视频在线播放| 欧美成人精品一级| 4p变态网欧美系列| 国产精品毛片一区二区三区四区| 欧美日韩专区在线| 黄色一级免费视频| 91美女片黄在线| 97超碰人人爽| 亚洲另类自拍| 亚洲不卡一卡2卡三卡4卡5卡精品| 成人在线黄色| 欧美美女18p| 色天堂在线视频| 在线播放/欧美激情| 91av在线免费视频| 日韩一区欧美一区| 久久久老熟女一区二区三区91| 日韩专区在线视频| 日本美女爱爱视频| 精品一区三区| caoporn国产精品免费公开| 欧美大电影免费观看| 蜜月aⅴ免费一区二区三区| 无码国产精品96久久久久| 欧美视频第二页| 日本a在线观看| 国产精品久久久久久久久快鸭 | 国产欧美日韩不卡| aaaaa黄色片| 奇米影视7777精品一区二区| 农民人伦一区二区三区| 国产精品毛片久久| 久久综合九色99| 中文字幕区一区二区三| 国产精品旅馆在线| 女人让男人操自己视频在线观看| 久久久国产视频91| 国产露出视频在线观看| 欧美精品一区二区不卡| 91欧美日韩麻豆精品| 色综合视频在线观看| 久久精品久久精品久久| 中文字幕一区二区在线播放 | 亚洲AV无码一区二区三区性| 欧美中文字幕亚洲一区二区va在线 | 国产精品综合不卡av| 日韩激情电影| 久久久免费精品视频| 二区三区在线观看| 最好看的2019年中文视频| 黄色av网站在线| 亚洲精品美女久久| 高h放荡受浪受bl| 91精品国产91热久久久做人人 | 欧美高清视频一区二区三区| 亚洲国产精品精华液2区45| 99久久久久久久久久| 成人精品高清在线| 俄罗斯女人裸体性做爰| 狠狠色丁香婷婷综合久久片| 亚洲一区在线不卡| 秋霞午夜av一区二区三区| 少妇人妻互换不带套| 欧美亚洲一区| 激情五月宗合网| 亚洲人成人一区二区三区| 人妻夜夜添夜夜无码av| 欧美网站在线| 欧美精品一区二区三区三州| 国产综合网站| 久久久性生活视频| 亚洲美女黄网| 中文字幕无码精品亚洲35| 在线成人av| 青青草成人免费在线视频| 亚洲精品日本| 美女av免费在线观看| 亚洲影院在线| 在线视频日韩一区 | 91中文字幕永久在线| 91浏览器在线视频| 日本乱子伦xxxx| 国产精品久久久久四虎| 亚洲综合久久av一区二区三区| 中文字幕一区二区三区不卡| 一级性生活免费视频| 亚洲精品欧美激情| 日韩av综合在线| 一本久久a久久精品亚洲| 中文天堂在线视频| 678五月天丁香亚洲综合网| www.xxxx国产| 日韩电影大片中文字幕| 黄色在线免费观看大全| 色噜噜久久综合伊人一本| 毛片av在线| 欧美国产日韩一区二区| 深夜在线视频| 国产美女扒开尿口久久久| 91九色鹿精品国产综合久久香蕉| 福利视频久久| 国产精品嫩模av在线| 亚洲一区二区三区精品动漫| 欧美搞黄网站| 欧美少妇性生活视频| 久久99国产精品久久99果冻传媒| avtt中文字幕| 国产亚洲欧美在线| 欧美激情精品久久| 色婷婷综合久久久久中文| 国产视频第二页| 日韩久久精品电影| 欧美性猛交xxx乱大交3蜜桃| 国内精品久久影院| 777午夜精品电影免费看| 成人看片视频| 波多野结衣在线播放一区| 日本欧美视频在线观看| 国产成人手机在线| 在线免费成人| 日韩激情av在线| 制服视频三区第一页精品| 视频在线观看成人| 波多野结衣在线一区二区| 蜜桃视频日韩| 香蕉综合视频| 无罩大乳的熟妇正在播放| 激情成人午夜视频| 亚洲の无码国产の无码步美| 中文字幕日韩一区| 黄色大片网站在线观看| 欧美一区二区三区日韩| 国产视频二区在线观看| 久久久爽爽爽美女图片| 天天综合91| 欧美一区二区福利| 亚洲激情二区| 涩多多在线观看| 久久综合久久鬼色中文字| 美女的奶胸大爽爽大片| 欧美色图在线观看| 你懂得在线网址| 97国产精品视频人人做人人爱| 日韩护士脚交太爽了| 欧美亚洲国产免费| 韩国在线一区| 国产成人精品综合久久久久99| 国产精品美女久久久久久2018 | 国内视频一区| 中文字幕另类日韩欧美亚洲嫩草| 精品欧美色视频网站在线观看| 久久九九免费| 亚洲国产97在线精品一区| 久久精品ww人人做人人爽| 日韩av毛片在线观看| 在线视频观看国产| 国产视频亚洲| 丁香婷婷综合激情| 老司机午夜精品99久久| 双性尿奴穿贞c带憋尿| 一区二区三区精品在线| 国产视频第二页| 精品国产欧美一区二区三区成人 | 奇米777国产一区国产二区| 波多野结衣与黑人| 国产精品主播直播| 国内偷拍精品视频| 日韩欧美你懂的| 少妇av在线| 97超级碰碰| 激情视频一区| 中国av免费看| 粉嫩老牛aⅴ一区二区三区| 香蕉久久国产av一区二区| 97视频在线观看视频免费视频| 北条麻妃一区二区三区在线观看 | 男人的j进女人的j一区| 中文字幕第二区| 欧美日韩国产综合一区二区三区| 懂色av中文在线| 国产精品视频区1| 婷婷色综合网| 人妻体体内射精一区二区| 亚洲第一av色| 视频国产一区二区三区| 欧洲日本亚洲国产区| 国产欧美日韩影院| 久久国产精品国产精品| 亚洲日本一区二区| a在线观看视频| 久久久在线视频| 久久99性xxx老妇胖精品| 日本特黄a级片| 一区二区在线免费观看| 五月婷婷丁香花| 国产成人小视频在线观看| 久久精品国产www456c0m| 久久久久久久久久久影视| 亚洲va在线va天堂| 国产露出视频在线观看| 91在线观看免费高清| 最新国产拍偷乱拍精品| 人妻aⅴ无码一区二区三区| 欧美日韩精品欧美日韩精品一 | 影音先锋亚洲一区| 日本激情小视频| 8x8x8国产精品| 爱啪啪综合导航| 亚洲高清视频一区| 国产成人精品aa毛片| 久久久成人免费视频| 最近2019中文免费高清视频观看www99 | 日本不卡一区二区三区视频| 极品销魂美女一区二区三区| 国产无码精品久久久| 亚洲欧美福利视频| 亚洲码欧美码一区二区三区| 精品免费国产一区二区| 亚洲精品一二三区| 免费在线看v| 91一区二区三区| 免费看欧美女人艹b| 黄色小说在线观看视频| 中文字幕日韩av电影| 精品伊人久久久| 久久久福利影院| 日韩欧美aaa| 丁香花在线电影小说观看| 五月天久久狠狠| 成人性生交大片免费看中文|