STM32F407的6路串口接收發(fā)送DMA 例程
單片機(jī)源程序如下:- /*
- 該工程為寄存器版本,不過在庫函數(shù)中仍可添加使用
- */
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "dma.h"
- #include "malloc.h"
- u8 TestData[10] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A};
- int main(void)
- {
- Stm32_Clock_Init(336,8,2,7);//設(shè)置時(shí)鐘,168Mhz
- delay_init(168); //延時(shí)初始化
-
- Init_USART1(84,115200); //初始化串口波特率為115200
- Init_USART2(42,115200);
- Init_USART3(42,115200);
- Init_UART4(42,115200);
- Init_UART5(42,115200);
- Init_USART6(84,115200);
- my_mem_init(SRAMIN); //初始化內(nèi)部?jī)?nèi)存池
- my_mem_init(SRAMCCM); //初始化內(nèi)部CCM內(nèi)存池
-
- //USART1發(fā)送 --- DMA2,數(shù)據(jù)流7,CH4---USART1_TXD 外設(shè)為串口1,存儲(chǔ)器為USART1_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA2_Stream7,4,(u32)&USART1->DR,(u32)USART1_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART1接收 --- DMA2,數(shù)據(jù)流5,CH4---USART1_RXD 外設(shè)為串口1,存儲(chǔ)器為USART1_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA2_Stream5,4,(u32)&USART1->DR,(u32)USART1_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA2_Stream5,(u32)USART1_RX_BUF,USART_LEN);//開始一次DMA傳輸!
-
- //USART2發(fā)送 --- DMA1,數(shù)據(jù)流6,CH4---USART2_TXD 外設(shè)為串口2,存儲(chǔ)器為USART2_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream6,4,(u32)&USART2->DR,(u32)USART2_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART2接收 --- DMA1,數(shù)據(jù)流5,CH4---USART2_RXD 外設(shè)為串口2,存儲(chǔ)器為USART2_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream5,4,(u32)&USART2->DR,(u32)USART2_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA1_Stream5,(u32)USART2_RX_BUF,USART_LEN);
- //USART3發(fā)送 --- DMA1,數(shù)據(jù)流3,CH4---USART3_TXD 外設(shè)為串口3,存儲(chǔ)器為USART3_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream3,4,(u32)&USART3->DR,(u32)USART3_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART3接收 --- DMA1,數(shù)據(jù)流1,CH4---USART3_RXD 外設(shè)為串口3,存儲(chǔ)器為USART3_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream1,4,(u32)&USART3->DR,(u32)USART3_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA1_Stream1,(u32)USART3_RX_BUF,USART_LEN);
- //USART4發(fā)送 --- DMA1,數(shù)據(jù)流4,CH4---USART4_TXD 外設(shè)為串口4,存儲(chǔ)器為USART4_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream4,4,(u32)&UART4->DR,(u32)UART4_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART4接收 --- DMA1,數(shù)據(jù)流2,CH4---USART4_RXD 外設(shè)為串口4,存儲(chǔ)器為USART4_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream2,4,(u32)&UART4->DR,(u32)UART4_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA1_Stream2,(u32)UART4_RX_BUF,USART_LEN);
-
- //USART5發(fā)送 --- DMA1,數(shù)據(jù)流7,CH4---UART5_TXD 外設(shè)為串口5,存儲(chǔ)器為UART5_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream7,4,(u32)&UART5->DR,(u32)UART5_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART5接收 --- DMA1,數(shù)據(jù)流0,CH4---UART5_RXD 外設(shè)為串口5,存儲(chǔ)器為UART5_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA1_Stream0,4,(u32)&UART5->DR,(u32)UART5_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA1_Stream0,(u32)UART5_RX_BUF,USART_LEN);
- //USART6發(fā)送 --- DMA2,數(shù)據(jù)流6,CH5---USART6_TXD 外設(shè)為串口6,存儲(chǔ)器為USART6_TX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA2_Stream6,5,(u32)&USART6->DR,(u32)USART6_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
- //USART6接收 --- DMA2,數(shù)據(jù)流1,CH5---USART6_RXD 外設(shè)為串口6,存儲(chǔ)器為USART6_RX_BUF,長度為:USART_LEN
- MYDMA_Config(DMA2_Stream1,5,(u32)&USART6->DR,(u32)USART6_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
- MYDMA_Enable(DMA2_Stream1,(u32)USART6_RX_BUF,USART_LEN);
-
- while(1)
- {
- // myDMAprintf(USART1,"usart = %d\tch = %f\r\n",1,1.567);
- // myDMAprintf(USART2,"usart = %d\tch = %f\r\n",2,1.567);
- myDMAprintf(USART3,"usart = %d\tch = %f\r\n",3,1.567);
- myDMAprintf(USART3,"usart = %d\tch = %f\r\n",3,1.567);
- // myDMAprintf(UART4,"usart = %d\tch = %f\r\n",4,1.567);
- // myDMAprintf(UART5,"usart = %d\tch = %f\r\n",5,1.567);
- myDMAprintf(USART6,"usart = %d\tch = %f\r\n",6,1.567);
- myDMAprintf(USART6,"usart = %d\tch = %f\r\n",6,1.567);
-
- // myDMAarray(USART1,(u32)TestData,10);
- // myDMAarray(USART2,(u32)TestData,10);
- // myDMAarray(USART3,(u32)TestData,10);
- // myDMAarray(USART3,(u32)TestData,10);
- // myDMAarray(UART4,(u32)TestData,10);
- // myDMAarray(UART5,(u32)TestData,10);
- // myDMAarray(USART6,(u32)TestData,10);
- // myDMAarray(USART6,(u32)TestData,10);
-
- delay_ms(1000);
- }
- }
復(fù)制代碼
原理圖: 無
仿真: 無
代碼:
DMA發(fā)送&接收.7z
(87.28 KB, 下載次數(shù): 47)
2023-8-25 14:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|