stm32串列埠+dma使用
stm32有5個串列埠資源(usart1,usart2,usart3及uart4,uart5)。其中3個usart(通用同步/非同步收/髮器universalsynchronous asynchronous receiver and transmitter);2個uart(通用非同步收/髮器universalasynchronous receiver and transmitter);至於usart與uart的區別,如果只是拿來做串列埠用,沒什麼區別,在車載專案裡,我們拿來做串列埠用,usart與uart在程式設計上並沒有區別。
其中usart1,usart2,usart3,uart4支援dma方式,uart5不支援dma。(詳見資料手冊stm32f105&107_datesheet_english的p18/2.3.17)。
dma(derect memoryacess直接儲存器訪問),stm32有2個dma,dma1有7個通道,dma2有5和通道,每個通道對應不同的外設(詳見資料手冊p272/13.3.7)。
1.時鐘rcc配置:
串列埠時鐘 + dma時鐘 + io時鐘
static void rcc_configuration(void)
2.gpio配置:
uart4的tx為pc10腳,傳送端配置為復用推挽輸出模式(gpio_mode_af_pp)
uart4的rx為pc11腳,接收端配置為浮空輸入模式(gpio_mode_in_floating)
static void gpio_configuration(void)
3.中斷nvic配置:
配置兩個dma通道中斷:
uart4的rx的dma通道為dma2的通道3;
uart4的tx的dma通道為dma2的通道5;
static void nvic_configuration(void)
4.串列埠配置:
即填充串列埠配置結構體
static void uart4_configuration(void)
5.dma配置:
dma可以把資料從外設轉移到記憶體(如串列埠接收的時候),也可以從記憶體轉移到外設(如串列埠傳送的時候);不同方向的資料轉移要各做相應的配置
串列埠接收:
void uart4_start_dma_recv(void * recvbuf, uint32_t buflen)
串列埠傳送:
void uart4_start_dma_send(void * sendbuf, uint32_t buflen)
6.dma中斷函式:
串列埠接收或傳送的時候,dma資料傳輸完成後會產生中斷,在相應中斷函式編寫**(注意中斷函式名一定要與啟動檔案中斷向量表一致)
dma串列埠接收完成中斷:
void dma2_channel3_irqhandler(void)//接收完成中斷
else
}else if(1 == dmarecivestate)
else
}else if(2 == dmarecivestate)
memcpy(pmsgbuffer,uart4_dma_headbuf, sizeof(host_msg_header_t));//把陣列資料(startcode+cmdtype+bodylen)拷貝到記憶體塊
pmcumsgheader = (host_msg_header_t*)pmsgbuffer;//指標型別轉換
uart4_start_dma_recv((void*)(pmsgbuffer +sizeof(host_msg_header_t)), pmcumsgheader->bodylen + crc_len);//再讀取後面資料(data+crc)到記憶體塊
}else if(3 == dmarecivestate)}}
osintexit();//ucos退出中斷服務函式
}dma串列埠傳送完成中斷:
void dma2_channel5_irqhandler(void)//傳送完成中斷
osintexit();
}
附:dma
常用庫函式:
文章標籤:
stm32
uart
dma
STM32 串列埠DMA(一)
今天調usart,資料在晶元內部用dma傳到串列埠快取,發現dma真的很好,很快,而且不消耗系統資源。只是在傳輸完的時候中斷的標誌置位。下面解釋一下程式。void dma configuration void 再弄幾個重要的語句。這裡是開始dma傳輸前的一些準備工作,將usart1模組設定成dma方...
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...
STM32串列埠通訊
1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...