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
 void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
71
 void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
72
 
72
 
73
   if (!timers_initialised[timer_num]) {
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
                        temp_prescaler = TEMP_TIMER_PRESCALE - 1;
75
                        temp_prescaler = TEMP_TIMER_PRESCALE - 1;
76
     switch (timer_num) {
76
     switch (timer_num) {
77
       case STEP_TIMER_NUM:
77
       case STEP_TIMER_NUM:

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

33
 
33
 
34
 #define FORCE_INLINE __attribute__((always_inline)) inline
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
 #define HAL_TIMER_TYPE_MAX 0xFFFF
37
 #define HAL_TIMER_TYPE_MAX 0xFFFF
38
 
38
 
39
 #ifdef STM32F0xx
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
   #define STEP_TIMER 16
43
   #define STEP_TIMER 16
46
   #define TEMP_TIMER 17
44
   #define TEMP_TIMER 17
47
 
45
 
48
 #elif defined STM32F1xx
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
   #define STEP_TIMER 4
50
   #define STEP_TIMER 4
55
   #define TEMP_TIMER 2
51
   #define TEMP_TIMER 2
56
 
52
 
57
 #elif defined STM32F4xx
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
   #define STEP_TIMER 4
57
   #define STEP_TIMER 4
64
   #define TEMP_TIMER 5
58
   #define TEMP_TIMER 5
65
 
59
 
66
 #elif defined STM32F7xx
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
   #define STEP_TIMER 5
64
   #define STEP_TIMER 5
73
   #define TEMP_TIMER 7
65
   #define TEMP_TIMER 7
82
 #define TEMP_TIMER_NUM 1  // index of timer to use for temperature
74
 #define TEMP_TIMER_NUM 1  // index of timer to use for temperature
83
 #define PULSE_TIMER_NUM STEP_TIMER_NUM
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
 #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
87
 #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
93
 
88
 
94
 #define __TIMER_DEV(X) TIM##X
89
 #define __TIMER_DEV(X) TIM##X

Loading…
Cancel
Save