Browse Source

STM32 timer simplification (#11995)

Prescalers aren't calculated for the given target frequency.
Stepper timer should run at 2 Mhz and temperature timer at 72 Khz.
Nils Hasenbanck 6 years ago
parent
commit
fcf6d127fd

+ 1
- 1
Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp View File

@@ -71,7 +71,7 @@ bool timers_initialised[NUM_HARDWARE_TIMERS] = {false};
71 71
 void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
72 72
 
73 73
   if (!timers_initialised[timer_num]) {
74
-    constexpr uint32_t step_prescaler = STEPPER_TIMER_PRESCALE - 1,
74
+    uint32_t step_prescaler = STEPPER_TIMER_PRESCALE - 1,
75 75
                        temp_prescaler = TEMP_TIMER_PRESCALE - 1;
76 76
     switch (timer_num) {
77 77
       case STEP_TIMER_NUM:

+ 13
- 18
Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.h View File

@@ -33,41 +33,33 @@
33 33
 
34 34
 #define FORCE_INLINE __attribute__((always_inline)) inline
35 35
 
36
-#define hal_timer_t uint32_t  // TODO: One is 16-bit, one 32-bit - does this need to be checked?
36
+#define hal_timer_t uint32_t
37 37
 #define HAL_TIMER_TYPE_MAX 0xFFFF
38 38
 
39 39
 #ifdef STM32F0xx
40 40
 
41
-  #define HAL_TIMER_RATE         (HAL_RCC_GetSysClockFreq())  // frequency of timer peripherals
42
-  #define TEMP_TIMER_PRESCALE    666  // prescaler for setting temperature timer, 72Khz
43
-  #define STEPPER_TIMER_PRESCALE 24   // prescaler for setting stepper timer, 2Mhz
41
+  #define HAL_TIMER_RATE (HAL_RCC_GetSysClockFreq()) // frequency of timer peripherals
44 42
 
45 43
   #define STEP_TIMER 16
46 44
   #define TEMP_TIMER 17
47 45
 
48 46
 #elif defined STM32F1xx
49 47
 
50
-  #define HAL_TIMER_RATE         (HAL_RCC_GetPCLK2Freq())  // frequency of timer peripherals
51
-  #define TEMP_TIMER_PRESCALE    1000 // prescaler for setting temperature timer, 72Khz
52
-  #define STEPPER_TIMER_PRESCALE 36   // prescaler for setting stepper timer, 2Mhz.
48
+  #define HAL_TIMER_RATE (HAL_RCC_GetPCLK2Freq()) // frequency of timer peripherals
53 49
 
54 50
   #define STEP_TIMER 4
55 51
   #define TEMP_TIMER 2
56 52
 
57 53
 #elif defined STM32F4xx
58 54
 
59
-  #define HAL_TIMER_RATE         (HAL_RCC_GetPCLK2Freq())  // frequency of timer peripherals
60
-  #define TEMP_TIMER_PRESCALE    2333 // prescaler for setting temperature timer, 72Khz
61
-  #define STEPPER_TIMER_PRESCALE 84   // prescaler for setting stepper timer, 2Mhz
55
+  #define HAL_TIMER_RATE (HAL_RCC_GetPCLK2Freq()) // frequency of timer peripherals
62 56
 
63 57
   #define STEP_TIMER 4
64 58
   #define TEMP_TIMER 5
65 59
 
66 60
 #elif defined STM32F7xx
67 61
 
68
-  #define HAL_TIMER_RATE         (HAL_RCC_GetSysClockFreq()/2)  // frequency of timer peripherals
69
-  #define TEMP_TIMER_PRESCALE    1500 // prescaler for setting temperature timer, 72Khz
70
-  #define STEPPER_TIMER_PRESCALE 54   // prescaler for setting stepper timer, 2Mhz.
62
+  #define HAL_TIMER_RATE (HAL_RCC_GetSysClockFreq()/2) // frequency of timer peripherals
71 63
 
72 64
   #define STEP_TIMER 5
73 65
   #define TEMP_TIMER 7
@@ -82,13 +74,16 @@
82 74
 #define TEMP_TIMER_NUM 1  // index of timer to use for temperature
83 75
 #define PULSE_TIMER_NUM STEP_TIMER_NUM
84 76
 
85
-#define STEPPER_TIMER_RATE     (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)   // frequency of stepper timer
86
-#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs
77
+#define TEMP_TIMER_RATE 72000 // 72 Khz
78
+#define TEMP_TIMER_PRESCALE ((HAL_TIMER_RATE)/(TEMP_TIMER_RATE))
79
+#define TEMP_TIMER_FREQUENCY 1000
87 80
 
88
-#define TEMP_TIMER_FREQUENCY  1000  // temperature interrupt frequency
81
+#define STEPPER_TIMER_RATE 2000000 // 2 Mhz
82
+#define STEPPER_TIMER_PRESCALE ((HAL_TIMER_RATE)/(STEPPER_TIMER_RATE))
83
+#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs
89 84
 
90
-#define PULSE_TIMER_RATE       STEPPER_TIMER_RATE   // frequency of pulse timer
91
-#define PULSE_TIMER_PRESCALE   STEPPER_TIMER_PRESCALE
85
+#define PULSE_TIMER_RATE STEPPER_TIMER_RATE
86
+#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
92 87
 #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
93 88
 
94 89
 #define __TIMER_DEV(X) TIM##X

Loading…
Cancel
Save