STM32 串列埠DMA方式接收
STM32 是一款基於ARM Cortex-M3核心的32位MCU,主頻最高可達72M。最近因為要在車機上整合TPMS功能, 便開始著手STM32的開發工作,STM32F10x系列共有5個串列埠(USART1~USART5),支援DMA方式通訊,DMA方式由於不需要CPU的參與,而是直接由DMA控制器完成串列埠資料的讀寫,因而可以很大程度的提高CPU的利用率。在使用STM32串列埠之前需要做一系列的初始化工作:
1.RCC(復位和時鐘控制暫存器)初始化,啟用GPIO、DMA、USART時鐘。
2.NVIC(巢狀向量中斷控制暫存器)初始化,完成各個硬體中斷的配置。
3.USART初始話,配置串列埠,設定DMA通道等。
4.DMA初始化,完成DMA的配置。
最後是使能USART和DMA。下面是通過DMA的方式從串列埠USART1接收資料,STM32工作後串列埠資料由DMA控制器接收存到指定buffer,讀取資料直接從DMA buffer中讀取即可。傳送資料採用非DMA方式,首先將待發送的資料存入到傳送佇列,然後在任務迴圈中將佇列中的資料傳送給USART1。例項程式碼如下:
相關推薦
STM32 串列埠DMA方式接收
STM32 是一款基於ARM Cortex-M3核心的32位MCU,主頻最高可達72M。最近因為要在車機上整合TPMS功能, 便開始著手STM32的開發工作,STM32F10x系列共有5個串列埠(USART1~USART5),支援DMA方式通訊,DMA方式由於不
STM32串列埠中斷方式接收
開啟串列埠的時鐘源 void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
STM32串列埠DMA超時接收方法,可大大節約CPU時間
DMA_DeInit(DMA1_Channel5); //將DMA的通道1暫存器重設為預設值 DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SRC_USART1_DR; //源頭BUF既是 (&(USART1->DR)) DMA_In
STM32 串列埠DMA(一)
今天調USART,資料在晶片內部用DMA傳到串列埠快取,發現DMA真的很好,很快,而且不消耗系統資源。只是在傳輸完的時候中斷的標誌置位。下面解釋一下程式。 void DMA_Configuration(void) { DMA_InitTypeDef DMA_Init
關於RS485通訊中使用STM32串列埠以DMA方式傳送資料丟失位元組的問題
1、開發平臺 計算機作業系統:WIN7 64位; 開發環境:Keil MDK 5.14; MCU:STM32F407ZET6; STM32F4xx韌體庫:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0; 串列埠除錯助手; 2、問題描述 &
STM32串列埠使用心得(一)——DMA+空閒中斷接收
一,因何用之? 之前曾經寫過一篇《關於CubeMX的串列埠全雙工接收發送鎖死的問題》的文章,討論了STM32的串列埠在全雙工模式下會出現鎖死問題的現象。當時的解決辦法是在串列埠接收中斷中加入解鎖機制,貌似臨時解決了這個問題。但這幾天程式不知道怎麼回事,又開
STM32串列埠中斷接收方式詳細比較
本例程通過PC機的串列埠除錯助手將資料傳送至STM32,STM32通過SP3232晶片採用中斷接收方式完成,然後接收資料後將所接收的資料又傳送至PC機。例項一: void USART1_IRQHandler(u8 GetData) { u8 BackData; i
STM32 HAL庫 串列埠DMA(收發)和STM32串列埠中斷接收(接收時間管理機制)+ESP8266 wifi模組通訊問題
一、HAL庫 串列埠 DMA+ESP8266模組通訊問題 用STM32 HAL庫串列埠的DMA傳送和空閒中斷接收處理資料,單片機發送AT指令給ESP8266 wifi模組問題:微控制器連續幾次給wifi模組傳送AT指令,wifi模組總是少一次的應答,在無線通訊過程中是不方便
STM32串列埠傳送資料和接收資料方式總結
之前寫了篇關於ESP8266使用AT指令進行互相通訊的實驗,在寫STM32串列埠接發資料的程式中,覺得有必要將之前學的有關於串列埠方面的使用經歷加以總結。 串列埠傳送資料: 1. 串列埠傳送資料最直接的方式就是標準呼叫庫函式 。 void
STM32 USART串列埠DMA 接收和傳送流程詳解
https://blog.csdn.net/weibo1230123/article/details/80506484 1.dm
STM32串列埠接收字串並控制LED
串列埠相關配置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Peri
STM32串列埠USART用法的進階(標準庫函式版本)空閒中斷+DMA
任務:配置串列埠,完成資料的收發。方法1:普通操作----直接傳送&中斷接收第0步:printf的準備//加入以下程式碼,支援printf函式,而不需要選擇use MicroLIB 百度搜索:半主機模式 #if 1 方法1 #pragma import(__use
STM32串列埠中斷接收和中斷髮送
STM32串列埠USART1中斷接收和中斷髮送 先貼出中斷函式: void USART1_IRQHandler(void){ if (USART_GetITStatus(US
STM32 HAL庫學習系列第10篇---串列埠空閒中斷接收不定長資料
串列埠重定向配置: 可以直接複製使用 /************************************************* * 函式功能: 重定向c庫函式printf到DEBUG
STM32串列埠接收不定長資料原理與源程式
今天說一下STM32微控制器的接收不定長度位元組資料的方法。由於STM32微控制器帶IDLE中斷,所以利用這個中斷,可以接收不定長位元組的資料,由於STM32屬於ARM微控制器,所以這篇文章的方法也適合其他的ARM微控制器。IDLE中斷什麼時候發生?IDLE就是串列埠收到一
STM32的串列埠空閒中斷接收不定長資料
按照此文的方法實現了串列埠的收發,但是實際使用中發現: 接收空閒中斷的產生是在資料接收停止一個位元組時產生的,但是有時由於上位機編寫問題或硬體問題(本人用到的USB轉串列埠的硬體有問題)上位機發送資料不連續,中間有時間間隔大於一個位元組,從而造成無法完整接收資料。通過對
STM32串列埠USART
一、通用同步非同步收發器(USART) 通用同步非同步收發器(USART)提供了一種靈活的方法與使用工業標準NRZ非同步序列資料格式的 外部裝置之間進行全雙工資料交換。USART利用分數波特率發生器提供寬範圍的波特率選擇。 它支
STM32串列埠之空閒中斷
背景 在做Nbiot的一個路燈專案,NBiot模組一般都是串列埠介面,使用AT指令集,對接中國移動onenet平臺。先用串列埠助手去測試,流程測試OK之後需要在MCU上重新寫一遍。一開始用的STC15系列的MCU,然後跟平臺之間對接協議很多,程式碼量較大,所以換到了STM32F1系列
關於STM32串列埠空閒中斷的問題
1.空閒中斷是接受資料後出現一個byte的高電平(空閒)狀態,就會觸發空閒中斷.並不是空閒就會一直中斷,準確的說應該是上升沿(停止位)後一個byte,如果一直是低電平是不會觸發空閒中斷的(會觸發break中斷)。 2.關於第二點有要鋪墊的三個情況,datasheet中 "當一空閒幀被檢測到時,
STM32串列埠通訊中使用printf傳送資料配置方法(開發環境 Keil RVMDK)
出處:STM32串列埠通訊中使用printf傳送資料配置方法(開發環境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47176.html 在STM32串列埠通訊程式中使用printf傳送資料,非常的方便。