1 | #include "stm32f4xx.h"
|
2 |
|
3 |
|
4 | void USART3_Init(void);
|
5 | void DMAStream3_Channel4_Init();
|
6 |
|
7 | unsigned char buffer[129] = "Hello World, this is a DMA test. If you can read this the DMA is still working!\n";
|
8 |
|
9 | int main(void)
|
10 | {
|
11 | USART3_Init();
|
12 | DMAStream3_Channel4_Init();
|
13 | USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);
|
14 | DMA_Cmd(DMA1_Stream3, ENABLE);
|
15 | while(1);
|
16 | }
|
17 |
|
18 | void USART3_Init(void)
|
19 | {
|
20 | GPIO_InitTypeDef GPIOC_10_11_InitStructure;
|
21 | USART_InitTypeDef USART3_InitStructure;
|
22 |
|
23 | //GPIO C 10/11 Init
|
24 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
|
25 |
|
26 | GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);
|
27 | GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);
|
28 |
|
29 | GPIOC_10_11_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
30 | GPIOC_10_11_InitStructure.GPIO_OType = GPIO_OType_PP;
|
31 | GPIOC_10_11_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
|
32 | GPIOC_10_11_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
33 | GPIOC_10_11_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
34 |
|
35 | GPIO_Init(GPIOC, &GPIOC_10_11_InitStructure);
|
36 |
|
37 | //USART 3 Init
|
38 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
39 |
|
40 | USART3_InitStructure.USART_BaudRate = 9600;
|
41 | USART3_InitStructure.USART_WordLength = USART_WordLength_8b;
|
42 | USART3_InitStructure.USART_StopBits = USART_StopBits_1;
|
43 | USART3_InitStructure.USART_Parity = USART_Parity_No;
|
44 | USART3_InitStructure.USART_HardwareFlowControl =
|
45 | USART_HardwareFlowControl_None;
|
46 | USART3_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
|
47 |
|
48 | USART_Init(USART3, &USART3_InitStructure);
|
49 | USART_Cmd(USART3, ENABLE);
|
50 | }
|
51 | void DMAStream3_Channel4_Init(void)
|
52 | {
|
53 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
|
54 |
|
55 | DMA_InitTypeDef DMA_InitStruct;
|
56 | DMA_StructInit(&DMA_InitStruct);
|
57 | DMA_InitStruct.DMA_Channel = DMA_Channel_4;
|
58 | DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&(USART3->DR);
|
59 | DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)&buffer;
|
60 | DMA_InitStruct.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
61 | DMA_InitStruct.DMA_BufferSize = 129;
|
62 | DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
63 | DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
64 | DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
65 | DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
66 | DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
|
67 | DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;
|
68 | DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
69 | DMA_InitStruct.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
|
70 | DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
71 | DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
72 | DMA_Init(DMA1_Stream3, &DMA_InitStruct);
|
73 | }
|