瀏覽代碼

STM32F4xx modifications for HAL_STM32 (#12080)

Karl Andersson 6 年之前
父節點
當前提交
8b5e51c9aa

+ 1
- 1
Marlin/src/HAL/HAL_LPC1768/watchdog.cpp 查看文件

67
 
67
 
68
 void watchdog_reset() {
68
 void watchdog_reset() {
69
   WDT_Feed();
69
   WDT_Feed();
70
-  #if PIN_EXISTS(LED)
70
+  #if !defined(PINS_DEBUGGING) && PIN_EXISTS(LED)
71
     TOGGLE(LED_PIN);  // heart beat indicator
71
     TOGGLE(LED_PIN);  // heart beat indicator
72
   #endif
72
   #endif
73
 }
73
 }

+ 2
- 2
Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp 查看文件

79
         TimerHandle[timer_num].timer = STEP_TIMER_DEV;
79
         TimerHandle[timer_num].timer = STEP_TIMER_DEV;
80
         TimerHandle[timer_num].irqHandle = Step_Handler;
80
         TimerHandle[timer_num].irqHandle = Step_Handler;
81
         TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / step_prescaler) / frequency) - 1, step_prescaler);
81
         TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / step_prescaler) / frequency) - 1, step_prescaler);
82
-        HAL_NVIC_SetPriority(STEP_TIMER_IRQ_NAME, 6, 0);
82
+        HAL_NVIC_SetPriority(STEP_TIMER_IRQ_NAME, STEP_TIMER_IRQ_PRIO, 0);
83
         break;
83
         break;
84
 
84
 
85
       case TEMP_TIMER_NUM:
85
       case TEMP_TIMER_NUM:
87
         TimerHandle[timer_num].timer = TEMP_TIMER_DEV;
87
         TimerHandle[timer_num].timer = TEMP_TIMER_DEV;
88
         TimerHandle[timer_num].irqHandle = Temp_Handler;
88
         TimerHandle[timer_num].irqHandle = Temp_Handler;
89
         TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / temp_prescaler) / frequency) - 1, temp_prescaler);
89
         TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / temp_prescaler) / frequency) - 1, temp_prescaler);
90
-        HAL_NVIC_SetPriority(TEMP_TIMER_IRQ_NAME, 2, 0);
90
+        HAL_NVIC_SetPriority(TEMP_TIMER_IRQ_NAME, TEMP_TIMER_IRQ_PRIO, 0);
91
         break;
91
         break;
92
     }
92
     }
93
     timers_initialised[timer_num] = true;
93
     timers_initialised[timer_num] = true;

+ 39
- 24
Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.h 查看文件

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
36
 #define hal_timer_t uint32_t
37
-#define HAL_TIMER_TYPE_MAX 0xFFFF
37
+#define HAL_TIMER_TYPE_MAX 0xFFFFFFFF // Timers can be 16 or 32 bit
38
 
38
 
39
 #ifdef STM32F0xx
39
 #ifdef STM32F0xx
40
 
40
 
41
-  #define HAL_TIMER_RATE (HAL_RCC_GetSysClockFreq()) // frequency of timer peripherals
41
+  #define HAL_TIMER_RATE (F_CPU) // frequency of timer peripherals
42
 
42
 
43
-  #define STEP_TIMER 16
44
-  #define TEMP_TIMER 17
43
+  #ifndef STEP_TIMER
44
+    #define STEP_TIMER 16
45
+  #endif
46
+
47
+  #ifndef TEMP_TIMER
48
+    #define TEMP_TIMER 17
49
+  #endif
45
 
50
 
46
 #elif defined STM32F1xx
51
 #elif defined STM32F1xx
47
 
52
 
48
-  #define HAL_TIMER_RATE (HAL_RCC_GetPCLK2Freq()) // frequency of timer peripherals
53
+  #define HAL_TIMER_RATE (F_CPU) // frequency of timer peripherals
49
 
54
 
50
-  #define STEP_TIMER 4
51
-  #define TEMP_TIMER 2
55
+  #ifndef STEP_TIMER
56
+    #define STEP_TIMER 4
57
+  #endif
58
+
59
+  #ifndef TEMP_TIMER
60
+    #define TEMP_TIMER 2
61
+  #endif
52
 
62
 
53
 #elif defined STM32F4xx
63
 #elif defined STM32F4xx
54
 
64
 
55
-  #define HAL_TIMER_RATE (HAL_RCC_GetPCLK2Freq()) // frequency of timer peripherals
65
+  #define HAL_TIMER_RATE (F_CPU/2) // frequency of timer peripherals
66
+
67
+  #ifndef STEP_TIMER
68
+    #define STEP_TIMER 5
69
+  #endif
56
 
70
 
57
-  #define STEP_TIMER 4
58
-  #define TEMP_TIMER 5
71
+  #ifndef TEMP_TIMER
72
+    #define TEMP_TIMER 7
73
+  #endif
59
 
74
 
60
 #elif defined STM32F7xx
75
 #elif defined STM32F7xx
61
 
76
 
62
-  #define HAL_TIMER_RATE (HAL_RCC_GetSysClockFreq()/2) // frequency of timer peripherals
77
+  #define HAL_TIMER_RATE (F_CPU/2) // frequency of timer peripherals
63
 
78
 
64
-  #define STEP_TIMER 5
65
-  #define TEMP_TIMER 7
79
+  #ifndef STEP_TIMER
80
+    #define STEP_TIMER 5
81
+  #endif
66
 
82
 
67
-  #if MB(REMRAM_V1)
68
-  #define STEP_TIMER 2
83
+  #ifndef TEMP_TIMER
84
+    #define TEMP_TIMER 7
69
   #endif
85
   #endif
70
 
86
 
71
 #endif
87
 #endif
72
 
88
 
89
+#ifndef STEP_TIMER_IRQ_PRIO
90
+  #define STEP_TIMER_IRQ_PRIO 1
91
+#endif
92
+
93
+#ifndef TEMP_TIMER_IRQ_PRIO
94
+  #define TEMP_TIMER_IRQ_PRIO 2
95
+#endif
96
+
73
 #define STEP_TIMER_NUM 0  // index of timer to use for stepper
97
 #define STEP_TIMER_NUM 0  // index of timer to use for stepper
74
 #define TEMP_TIMER_NUM 1  // index of timer to use for temperature
98
 #define TEMP_TIMER_NUM 1  // index of timer to use for temperature
75
 #define PULSE_TIMER_NUM STEP_TIMER_NUM
99
 #define PULSE_TIMER_NUM STEP_TIMER_NUM
110
 #define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
134
 #define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
111
 #define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
135
 #define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
112
 
136
 
113
-#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM)
114
-#define TEMP_ISR_ENABLED() HAL_timer_interrupt_enabled(TEMP_TIMER_NUM)
115
-
116
 extern void Step_Handler(stimer_t *htim);
137
 extern void Step_Handler(stimer_t *htim);
117
 extern void Temp_Handler(stimer_t *htim);
138
 extern void Temp_Handler(stimer_t *htim);
118
 #define HAL_STEP_TIMER_ISR void Step_Handler(stimer_t *htim)
139
 #define HAL_STEP_TIMER_ISR void Step_Handler(stimer_t *htim)
153
   return __HAL_TIM_GET_AUTORELOAD(&TimerHandle[timer_num].handle);
174
   return __HAL_TIM_GET_AUTORELOAD(&TimerHandle[timer_num].handle);
154
 }
175
 }
155
 
176
 
156
-FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
157
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
158
-  if (HAL_timer_get_compare(timer_num) < mincmp)
159
-    HAL_timer_set_compare(timer_num, mincmp);
160
-}
161
-
162
 #define HAL_timer_isr_prologue(TIMER_NUM)
177
 #define HAL_timer_isr_prologue(TIMER_NUM)
163
 #define HAL_timer_isr_epilogue(TIMER_NUM)
178
 #define HAL_timer_isr_epilogue(TIMER_NUM)

+ 6
- 0
Marlin/src/HAL/HAL_STM32/endstop_interrupts.h 查看文件

52
   #if HAS_Z2_MIN
52
   #if HAS_Z2_MIN
53
     attachInterrupt(Z2_MIN_PIN, endstop_ISR, CHANGE);
53
     attachInterrupt(Z2_MIN_PIN, endstop_ISR, CHANGE);
54
   #endif
54
   #endif
55
+  #if HAS_Z3_MAX
56
+    attachInterrupt(Z3_MAX_PIN, endstop_ISR, CHANGE);
57
+  #endif
58
+  #if HAS_Z3_MIN
59
+    attachInterrupt(Z3_MIN_PIN, endstop_ISR, CHANGE);
60
+  #endif  
55
   #if HAS_Z_MIN_PROBE_PIN
61
   #if HAS_Z_MIN_PROBE_PIN
56
     attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
62
     attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
57
   #endif
63
   #endif

+ 25
- 9
Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp 查看文件

28
 
28
 
29
 #include "../shared/persistent_store_api.h"
29
 #include "../shared/persistent_store_api.h"
30
 
30
 
31
-#if DISABLED(EEPROM_EMULATED_WITH_SRAM)
31
+#if DISABLED(EEPROM_EMULATED_WITH_SRAM) && DISABLED(SPI_EEPROM) && DISABLED(I2C_EEPROM)
32
   #include <EEPROM.h>
32
   #include <EEPROM.h>
33
   static bool eeprom_data_written = false;
33
   static bool eeprom_data_written = false;
34
 #endif
34
 #endif
35
 
35
 
36
 bool PersistentStore::access_start() {
36
 bool PersistentStore::access_start() {
37
-  #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
37
+  #if DISABLED(EEPROM_EMULATED_WITH_SRAM) && DISABLED(SPI_EEPROM) && DISABLED(I2C_EEPROM)
38
     eeprom_buffer_fill();
38
     eeprom_buffer_fill();
39
   #endif
39
   #endif
40
   return true;
40
   return true;
41
 }
41
 }
42
 
42
 
43
 bool PersistentStore::access_finish() {
43
 bool PersistentStore::access_finish() {
44
-  #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
44
+  #if DISABLED(EEPROM_EMULATED_WITH_SRAM) && DISABLED(SPI_EEPROM) && DISABLED(I2C_EEPROM)
45
     if (eeprom_data_written) {
45
     if (eeprom_data_written) {
46
       eeprom_buffer_flush();
46
       eeprom_buffer_flush();
47
       eeprom_data_written = false;
47
       eeprom_data_written = false;
54
   while (size--) {
54
   while (size--) {
55
     uint8_t v = *value;
55
     uint8_t v = *value;
56
 
56
 
57
-    // Save to either program flash or Backup SRAM
58
-    #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
57
+    // Save to either external EEPROM, program flash or Backup SRAM
58
+    #if ENABLED(SPI_EEPROM) || ENABLED(I2C_EEPROM)
59
+      // EEPROM has only ~100,000 write cycles,
60
+      // so only write bytes that have changed!
61
+      uint8_t * const p = (uint8_t * const)pos;
62
+      if (v != eeprom_read_byte(p)) {
63
+        eeprom_write_byte(p, v);
64
+        if (eeprom_read_byte(p) != v) {
65
+          SERIAL_ECHO_START();
66
+          SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
67
+          return true;
68
+        }
69
+      }
70
+    #elif DISABLED(EEPROM_EMULATED_WITH_SRAM)
59
       eeprom_buffered_write_byte(pos, v);
71
       eeprom_buffered_write_byte(pos, v);
60
     #else
72
     #else
61
       *(__IO uint8_t *)(BKPSRAM_BASE + (uint8_t * const)pos) = v;
73
       *(__IO uint8_t *)(BKPSRAM_BASE + (uint8_t * const)pos) = v;
65
     pos++;
77
     pos++;
66
     value++;
78
     value++;
67
   };
79
   };
68
-  #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
80
+  #if DISABLED(EEPROM_EMULATED_WITH_SRAM) && DISABLED(SPI_EEPROM) && DISABLED(I2C_EEPROM)
69
     eeprom_data_written = true;
81
     eeprom_data_written = true;
70
   #endif
82
   #endif
71
 
83
 
74
 
86
 
75
 bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing) {
87
 bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing) {
76
   do {
88
   do {
77
-    // Read from either program flash or Backup SRAM
89
+    // Read from either external EEPROM, program flash or Backup SRAM
78
     const uint8_t c = (
90
     const uint8_t c = (
79
-      #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
91
+      #if ENABLED(SPI_EEPROM) || ENABLED(I2C_EEPROM)
92
+        eeprom_read_byte((uint8_t*)pos)
93
+      #elif DISABLED(EEPROM_EMULATED_WITH_SRAM)
80
         eeprom_buffered_read_byte(pos)
94
         eeprom_buffered_read_byte(pos)
81
       #else
95
       #else
82
         (*(__IO uint8_t *)(BKPSRAM_BASE + ((uint8_t*)pos)))
96
         (*(__IO uint8_t *)(BKPSRAM_BASE + ((uint8_t*)pos)))
92
 }
106
 }
93
 
107
 
94
 size_t PersistentStore::capacity() {
108
 size_t PersistentStore::capacity() {
95
-  #if DISABLED(EEPROM_EMULATED_WITH_SRAM)
109
+  #if ENABLED(SPI_EEPROM) || ENABLED(I2C_EEPROM)
110
+    return E2END + 1;
111
+  #elif DISABLED(EEPROM_EMULATED_WITH_SRAM)
96
     return E2END + 1;
112
     return E2END + 1;
97
   #else
113
   #else
98
     return 4096; // 4kB
114
     return 4096; // 4kB

+ 8
- 1
Marlin/src/HAL/HAL_STM32/watchdog_STM32.cpp 查看文件

31
 
31
 
32
   void watchdog_init() { IWatchdog.begin(4000000); } // 4 sec timeout
32
   void watchdog_init() { IWatchdog.begin(4000000); } // 4 sec timeout
33
 
33
 
34
-  void watchdog_reset() { IWatchdog.reload(); }
34
+  void watchdog_reset() 
35
+  {
36
+    IWatchdog.reload(); 
37
+
38
+    #if PIN_EXISTS(LED)
39
+      TOGGLE(LED_PIN);  // heart beat indicator
40
+    #endif
41
+  }
35
 
42
 
36
 #endif // USE_WATCHDOG
43
 #endif // USE_WATCHDOG
37
 #endif // ARDUINO_ARCH_STM32
44
 #endif // ARDUINO_ARCH_STM32

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.cpp 查看文件

47
 /** @addtogroup EEPROM_Emulation
47
 /** @addtogroup EEPROM_Emulation
48
   * @{
48
   * @{
49
   */
49
   */
50
-#if defined(STM32F4) || defined(STM32F4xx)
50
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
51
 
51
 
52
 /* Includes ------------------------------------------------------------------*/
52
 /* Includes ------------------------------------------------------------------*/
53
 #include "eeprom_emul.h"
53
 #include "eeprom_emul.h"

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/EmulatedEeprom.cpp 查看文件

17
  *
17
  *
18
  */
18
  */
19
 
19
 
20
-#if defined(STM32F4) || defined(STM32F4xx)
20
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
21
 
21
 
22
 /**
22
 /**
23
  * Description: functions for I2C connected external EEPROM.
23
  * Description: functions for I2C connected external EEPROM.

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/HAL.cpp 查看文件

21
  *
21
  *
22
  */
22
  */
23
 
23
 
24
-#if defined(STM32F4) || defined(STM32F4xx)
24
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
25
 
25
 
26
 // --------------------------------------------------------------------------
26
 // --------------------------------------------------------------------------
27
 // Includes
27
 // Includes

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/HAL_Servo_STM32F4.cpp 查看文件

21
  *
21
  *
22
  */
22
  */
23
 
23
 
24
-#if defined(STM32F4) || defined(STM32F4xx)
24
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
25
 
25
 
26
 #include "../../inc/MarlinConfig.h"
26
 #include "../../inc/MarlinConfig.h"
27
 
27
 

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp 查看文件

30
  * Adapted to the STM32F4 HAL
30
  * Adapted to the STM32F4 HAL
31
  */
31
  */
32
 
32
 
33
-#if defined(STM32F4) || defined(STM32F4xx)
33
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
34
 
34
 
35
 // --------------------------------------------------------------------------
35
 // --------------------------------------------------------------------------
36
 // Includes
36
 // Includes

+ 2
- 2
Marlin/src/HAL/HAL_STM32F4/HAL_timers_STM32F4.cpp 查看文件

20
  *
20
  *
21
  */
21
  */
22
 
22
 
23
-#if defined(STM32F4) || defined(STM32F4xx)
23
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
24
 
24
 
25
 // --------------------------------------------------------------------------
25
 // --------------------------------------------------------------------------
26
 // Includes
26
 // Includes
91
           TimerHandle[timer_num].irqHandle = TC5_Handler;
91
           TimerHandle[timer_num].irqHandle = TC5_Handler;
92
           TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / step_prescaler) / frequency) - 1, step_prescaler);
92
           TimerHandleInit(&TimerHandle[timer_num], (((HAL_TIMER_RATE) / step_prescaler) / frequency) - 1, step_prescaler);
93
         #endif
93
         #endif
94
-        HAL_NVIC_SetPriority(STEP_TIMER_IRQ_ID, 6, 0);
94
+        HAL_NVIC_SetPriority(STEP_TIMER_IRQ_ID, 1, 0);
95
         break;
95
         break;
96
 
96
 
97
       case TEMP_TIMER_NUM:
97
       case TEMP_TIMER_NUM:

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp 查看文件

21
  *
21
  *
22
  */
22
  */
23
 
23
 
24
-#if defined(STM32F4) || defined(STM32F4xx)
24
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
25
 
25
 
26
 #include "../shared/persistent_store_api.h"
26
 #include "../shared/persistent_store_api.h"
27
 
27
 

+ 1
- 1
Marlin/src/HAL/HAL_STM32F4/watchdog_STM32F4.cpp 查看文件

20
  *
20
  *
21
  */
21
  */
22
 
22
 
23
-#if defined(STM32F4) || defined(STM32F4xx)
23
+#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
24
 
24
 
25
 #include "../../inc/MarlinConfig.h"
25
 #include "../../inc/MarlinConfig.h"
26
 
26
 

+ 6
- 0
Marlin/src/pins/pins_REMRAM_V1.h 查看文件

124
 #define BTN_EN1            54   // BTN_EN1
124
 #define BTN_EN1            54   // BTN_EN1
125
 #define BTN_EN2            55   // BTN_EN2
125
 #define BTN_EN2            55   // BTN_EN2
126
 #define BTN_ENC            47   // BTN_ENC
126
 #define BTN_ENC            47   // BTN_ENC
127
+
128
+//
129
+// Timers
130
+//
131
+
132
+#define STEP_TIMER 2

Loading…
取消
儲存