1 | #include "stm32f4xx.h"
|
2 | #include "stm32f4xx_tim.h"
|
3 | #include "stm32f4xx_dma.h"
|
4 |
|
5 | // togglet Pin 5 bei jedem CC4 Event
|
6 | uint16_t LED_PIN_SET[10] = { GPIO_Pin_5, 0x0000,
|
7 | GPIO_Pin_5, 0x0000,
|
8 | GPIO_Pin_5, 0x0000,
|
9 | GPIO_Pin_5, 0x0000,
|
10 | GPIO_Pin_5, 0x0000 };
|
11 |
|
12 |
|
13 | void TIM3_Config()
|
14 | {
|
15 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
16 |
|
17 | DMA_InitTypeDef DMA_InitStructure;
|
18 |
|
19 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
20 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
|
21 |
|
22 | TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
23 | TIM_TimeBaseStructure.TIM_Period = 42000-1; // 1Hz
|
24 | TIM_TimeBaseStructure.TIM_Prescaler = 1000-1; // 42 kHz
|
25 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
26 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
27 | TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
|
28 |
|
29 | TIM_SetCompare4(TIM3,41999);
|
30 |
|
31 | TIM_DMAConfig(TIM3,TIM_DMABase_SR,TIM_DMABurstLength_1Transfer);
|
32 |
|
33 | TIM_DMACmd(TIM3,TIM_DMA_CC4,ENABLE);
|
34 |
|
35 | DMA_InitStructure.DMA_Channel = DMA_Channel_5;
|
36 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(GPIOE->ODR);
|
37 | DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&LED_PIN_SET;
|
38 | DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;
|
39 | DMA_InitStructure.DMA_BufferSize = 10;
|
40 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
|
41 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
42 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
43 |
|
44 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
45 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
46 | DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
|
47 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
48 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
|
49 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
50 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
51 |
|
52 | DMA_Init(DMA1_Stream2, &DMA_InitStructure);
|
53 | DMA_Cmd(DMA1_Stream2, ENABLE);
|
54 |
|
55 | //TIM_Cmd(TIM3, ENABLE);
|
56 |
|
57 | }
|
58 |
|
59 | void init_gpio( void ) {
|
60 |
|
61 | GPIO_InitTypeDef GPIO_InitStructure;
|
62 |
|
63 | RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE);
|
64 |
|
65 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
|
66 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
|
67 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
68 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
69 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
70 |
|
71 | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
72 |
|
73 | }
|
74 |
|
75 | int main( void ) {
|
76 |
|
77 | uint32_t i;
|
78 |
|
79 | i = 0;
|
80 |
|
81 | SystemInit();
|
82 |
|
83 | RCC_ClocksTypeDef rcctdef;
|
84 |
|
85 | RCC_GetClocksFreq(&rcctdef);
|
86 |
|
87 | init_gpio();
|
88 |
|
89 | TIM3_Config();
|
90 |
|
91 | TIM_Cmd(TIM3, ENABLE);
|
92 |
|
93 | while(1) {
|
94 |
|
95 | i++;
|
96 | }
|
97 |
|
98 | // sollte nicht erreicht werden
|
99 | return 1;
|
100 |
|
101 | }
|