28
28
29
29
#define MAX_STM32_PWM_FREQ 1000
30
30
31
+ // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
31
32
#include " STM32_Slow_PWM.h"
32
33
33
34
#define boolean bool
@@ -112,12 +113,12 @@ typedef struct
112
113
irqCallback irqCallbackStopFunc;
113
114
114
115
#if USING_PWM_FREQUENCY
115
- uint32_t PWM_Freq;
116
+ double PWM_Freq;
116
117
#else
117
- uint32_t PWM_Period;
118
+ double PWM_Period;
118
119
#endif
119
120
120
- uint32_t PWM_DutyCycle;
121
+ double PWM_DutyCycle;
121
122
122
123
uint64_t deltaMicrosStart;
123
124
uint64_t previousMicrosStart;
@@ -137,38 +138,37 @@ void doingSomethingStop(int index);
137
138
138
139
#else // #if USE_COMPLEX_STRUCT
139
140
140
- volatile unsigned long deltaMicrosStart [NUMBER_ISR_PWMS ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
141
- volatile unsigned long previousMicrosStart [NUMBER_ISR_PWMS ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
141
+ volatile unsigned long deltaMicrosStart [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
142
+ volatile unsigned long previousMicrosStart [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
142
143
143
- volatile unsigned long deltaMicrosStop [NUMBER_ISR_PWMS ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
144
- volatile unsigned long previousMicrosStop [NUMBER_ISR_PWMS ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
144
+ volatile unsigned long deltaMicrosStop [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
145
+ volatile unsigned long previousMicrosStop [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
145
146
146
147
// You can assign pins here. Be carefull to select good pin to use or crash, e.g pin 6-11
147
- uint32_t PWM_Pin[NUMBER_ISR_PWMS ] =
148
+ uint32_t PWM_Pin[] =
148
149
{
149
- LED_BUILTIN, LED_BLUE, LED_RED, PIN_D0, PIN_D1, PIN_D2, PIN_D3, PIN_D4,
150
- PIN_D5, PIN_D6, PIN_D7, PIN_D8, PIN_D9, PIN_D10, PIN_D11, PIN_D12
150
+ LED_BUILTIN, LED_BLUE, LED_RED, PIN_D0, PIN_D1, PIN_D2, PIN_D3, PIN_D4,
151
+ PIN_D5, PIN_D6, PIN_D7, PIN_D8, PIN_D9, PIN_D10, PIN_D11, PIN_D12
151
152
};
152
153
153
154
// You can assign any interval for any timer here, in microseconds
154
- uint32_t PWM_Period[NUMBER_ISR_PWMS ] =
155
+ double PWM_Period[] =
155
156
{
156
- 1000000L , 500000L , 333333L , 250000L , 200000L , 166667L , 142857L , 125000L ,
157
- 111111L , 100000L , 66667L , 50000L , 40000L , 33333L , 25000L , 20000L
158
- };
157
+ 1000000.0 , 500000.0 , 333333.333 , 250000.0 , 200000.0 , 166666.667 , 142857.143 , 125000.0 ,
158
+ 111111.111 , 100000.0 , 66666.667 , 50000.0 , 40000.0 , 33333.333 , 25000.0 , 20000.0 };
159
159
160
160
// You can assign any interval for any timer here, in Hz
161
- double PWM_Freq[NUMBER_ISR_PWMS ] =
161
+ double PWM_Freq[] =
162
162
{
163
163
1 .0f , 2 .0f , 3 .0f , 4 .0f , 5 .0f , 6 .0f , 7 .0f , 8 .0f ,
164
164
9 .0f , 10 .0f , 15 .0f , 20 .0f , 25 .0f , 30 .0f , 40 .0f , 50 .0f
165
165
};
166
166
167
167
// You can assign any interval for any timer here, in milliseconds
168
- uint32_t PWM_DutyCycle[NUMBER_ISR_PWMS ] =
168
+ double PWM_DutyCycle[] =
169
169
{
170
- 5 , 10 , 20 , 30 , 40 , 45 , 50 , 55 ,
171
- 60 , 65 , 70 , 75 , 80 , 85 , 90 , 95
170
+ 5.0 , 10.0 , 20.0 , 30.0 , 40.0 , 45.0 , 50.0 , 55.0 ,
171
+ 60.0 , 65.0 , 70.0 , 75.0 , 80.0 , 85.0 , 90.0 , 95.0
172
172
};
173
173
174
174
void doingSomethingStart (int index)
@@ -362,48 +362,48 @@ void doingSomethingStop15()
362
362
363
363
#if USING_PWM_FREQUENCY
364
364
365
- ISR_PWM_Data curISR_PWM_Data[NUMBER_ISR_PWMS ] =
365
+ ISR_PWM_Data curISR_PWM_Data[] =
366
366
{
367
367
// pin, irqCallbackStartFunc, irqCallbackStopFunc, PWM_Freq, PWM_DutyCycle, deltaMicrosStart, previousMicrosStart, deltaMicrosStop, previousMicrosStop
368
- { LED_BUILTIN, doingSomethingStart0, doingSomethingStop0, 1 , 5 , 0 , 0 , 0 , 0 },
369
- { LED_BLUE, doingSomethingStart1, doingSomethingStop1, 2 , 10 , 0 , 0 , 0 , 0 },
370
- { LED_RED, doingSomethingStart2, doingSomethingStop2, 3 , 20 , 0 , 0 , 0 , 0 },
371
- { PIN_D0, doingSomethingStart3, doingSomethingStop3, 4 , 30 , 0 , 0 , 0 , 0 },
372
- { PIN_D1, doingSomethingStart4, doingSomethingStop4, 5 , 40 , 0 , 0 , 0 , 0 },
373
- { PIN_D2, doingSomethingStart5, doingSomethingStop5, 6 , 45 , 0 , 0 , 0 , 0 },
374
- { PIN_D3, doingSomethingStart6, doingSomethingStop6, 7 , 50 , 0 , 0 , 0 , 0 },
375
- { PIN_D4, doingSomethingStart7, doingSomethingStop7, 8 , 55 , 0 , 0 , 0 , 0 },
376
- { PIN_D5, doingSomethingStart8, doingSomethingStop8, 9 , 60 , 0 , 0 , 0 , 0 },
377
- { PIN_D6, doingSomethingStart9, doingSomethingStop9, 10 , 65 , 0 , 0 , 0 , 0 },
378
- { PIN_D7, doingSomethingStart10, doingSomethingStop10, 15 , 70 , 0 , 0 , 0 , 0 },
379
- { PIN_D8, doingSomethingStart11, doingSomethingStop11, 20 , 75 , 0 , 0 , 0 , 0 },
380
- { PIN_D9, doingSomethingStart12, doingSomethingStop12, 25 , 80 , 0 , 0 , 0 , 0 },
381
- { PIN_D10, doingSomethingStart13, doingSomethingStop13, 30 , 85 , 0 , 0 , 0 , 0 },
382
- { PIN_D11, doingSomethingStart14, doingSomethingStop14, 40 , 90 , 0 , 0 , 0 , 0 },
383
- { PIN_D12, doingSomethingStart15, doingSomethingStop15, 50 , 95 , 0 , 0 , 0 , 0 }
368
+ { LED_BUILTIN, doingSomethingStart0, doingSomethingStop0, 1.0 , 5.0 , 0 , 0 , 0 , 0 },
369
+ { LED_BLUE, doingSomethingStart1, doingSomethingStop1, 2.0 , 10.0 , 0 , 0 , 0 , 0 },
370
+ { LED_RED, doingSomethingStart2, doingSomethingStop2, 3.0 , 20.0 , 0 , 0 , 0 , 0 },
371
+ { PIN_D0, doingSomethingStart3, doingSomethingStop3, 4.0 , 30.0 , 0 , 0 , 0 , 0 },
372
+ { PIN_D1, doingSomethingStart4, doingSomethingStop4, 5.0 , 40.0 , 0 , 0 , 0 , 0 },
373
+ { PIN_D2, doingSomethingStart5, doingSomethingStop5, 6.0 , 45.0 , 0 , 0 , 0 , 0 },
374
+ { PIN_D3, doingSomethingStart6, doingSomethingStop6, 7.0 , 50.0 , 0 , 0 , 0 , 0 },
375
+ { PIN_D4, doingSomethingStart7, doingSomethingStop7, 8.0 , 55.0 , 0 , 0 , 0 , 0 },
376
+ { PIN_D5, doingSomethingStart8, doingSomethingStop8, 9.0 , 60.0 , 0 , 0 , 0 , 0 },
377
+ { PIN_D6, doingSomethingStart9, doingSomethingStop9, 10.0 , 65.0 , 0 , 0 , 0 , 0 },
378
+ { PIN_D7, doingSomethingStart10, doingSomethingStop10, 15.0 , 70.0 , 0 , 0 , 0 , 0 },
379
+ { PIN_D8, doingSomethingStart11, doingSomethingStop11, 20.0 , 75.0 , 0 , 0 , 0 , 0 },
380
+ { PIN_D9, doingSomethingStart12, doingSomethingStop12, 25.0 , 80.0 , 0 , 0 , 0 , 0 },
381
+ { PIN_D10, doingSomethingStart13, doingSomethingStop13, 30.0 , 85.0 , 0 , 0 , 0 , 0 },
382
+ { PIN_D11, doingSomethingStart14, doingSomethingStop14, 40.0 , 90.0 , 0 , 0 , 0 , 0 },
383
+ { PIN_D12, doingSomethingStart15, doingSomethingStop15, 50.0 , 95.0 , 0 , 0 , 0 , 0 }
384
384
};
385
385
386
386
#else // #if USING_PWM_FREQUENCY
387
387
388
- ISR_PWM_Data curISR_PWM_Data[NUMBER_ISR_PWMS ] =
388
+ ISR_PWM_Data curISR_PWM_Data[] =
389
389
{
390
390
// pin, irqCallbackStartFunc, irqCallbackStopFunc, PWM_Period, PWM_DutyCycle, deltaMicrosStart, previousMicrosStart, deltaMicrosStop, previousMicrosStop
391
- { LED_BUILTIN, doingSomethingStart0, doingSomethingStop0, 1000000L , 5 , 0 , 0 , 0 , 0 },
392
- { LED_BLUE, doingSomethingStart1, doingSomethingStop1, 500000L , 10 , 0 , 0 , 0 , 0 },
393
- { LED_RED, doingSomethingStart2, doingSomethingStop2, 333333L , 20 , 0 , 0 , 0 , 0 },
394
- { PIN_D0, doingSomethingStart3, doingSomethingStop3, 250000L , 30 , 0 , 0 , 0 , 0 },
395
- { PIN_D1, doingSomethingStart4, doingSomethingStop4, 200000L , 40 , 0 , 0 , 0 , 0 },
396
- { PIN_D2, doingSomethingStart5, doingSomethingStop5, 166667L , 45 , 0 , 0 , 0 , 0 },
397
- { PIN_D3, doingSomethingStart6, doingSomethingStop6, 142857L , 50 , 0 , 0 , 0 , 0 },
398
- { PIN_D4, doingSomethingStart7, doingSomethingStop7, 125000L , 55 , 0 , 0 , 0 , 0 },
399
- { PIN_D5, doingSomethingStart8, doingSomethingStop8, 111111L , 60 , 0 , 0 , 0 , 0 },
400
- { PIN_D6, doingSomethingStart9, doingSomethingStop9, 100000L , 65 , 0 , 0 , 0 , 0 },
401
- { PIN_D7, doingSomethingStart10, doingSomethingStop10, 66667L , 70 , 0 , 0 , 0 , 0 },
402
- { PIN_D8, doingSomethingStart11, doingSomethingStop11, 50000L , 75 , 0 , 0 , 0 , 0 },
403
- { PIN_D9, doingSomethingStart12, doingSomethingStop12, 40000L , 80 , 0 , 0 , 0 , 0 },
404
- { PIN_D10, doingSomethingStart13, doingSomethingStop13, 33333L , 85 , 0 , 0 , 0 , 0 },
405
- { PIN_D11, doingSomethingStart14, doingSomethingStop14, 25000L , 90 , 0 , 0 , 0 , 0 },
406
- { PIN_D12, doingSomethingStart15, doingSomethingStop15, 20000L , 95 , 0 , 0 , 0 , 0 }
391
+ { LED_BUILTIN, doingSomethingStart0, doingSomethingStop0, 1000000.0 , 5.0 , 0 , 0 , 0 , 0 },
392
+ { LED_BLUE, doingSomethingStart1, doingSomethingStop1, 500000.0 , 10.0 , 0 , 0 , 0 , 0 },
393
+ { LED_RED, doingSomethingStart2, doingSomethingStop2, 333333.0 , 20.0 , 0 , 0 , 0 , 0 },
394
+ { PIN_D0, doingSomethingStart3, doingSomethingStop3, 250000.0 , 30.0 , 0 , 0 , 0 , 0 },
395
+ { PIN_D1, doingSomethingStart4, doingSomethingStop4, 200000.0 , 40.0 , 0 , 0 , 0 , 0 },
396
+ { PIN_D2, doingSomethingStart5, doingSomethingStop5, 166667.0 , 45.0 , 0 , 0 , 0 , 0 },
397
+ { PIN_D3, doingSomethingStart6, doingSomethingStop6, 142857.0 , 50.0 , 0 , 0 , 0 , 0 },
398
+ { PIN_D4, doingSomethingStart7, doingSomethingStop7, 125000.0 , 55.0 , 0 , 0 , 0 , 0 },
399
+ { PIN_D5, doingSomethingStart8, doingSomethingStop8, 111111.0 , 60.0 , 0 , 0 , 0 , 0 },
400
+ { PIN_D6, doingSomethingStart9, doingSomethingStop9, 100000.0 , 65.0 , 0 , 0 , 0 , 0 },
401
+ { PIN_D7, doingSomethingStart10, doingSomethingStop10, 66667.0 , 70.0 , 0 , 0 , 0 , 0 },
402
+ { PIN_D8, doingSomethingStart11, doingSomethingStop11, 50000.0 , 75.0 , 0 , 0 , 0 , 0 },
403
+ { PIN_D9, doingSomethingStart12, doingSomethingStop12, 40000.0 , 80.0 , 0 , 0 , 0 , 0 },
404
+ { PIN_D10, doingSomethingStart13, doingSomethingStop13, 33333.0 , 85.0.0 , 0 , 0 , 0 , 0 },
405
+ { PIN_D11, doingSomethingStart14, doingSomethingStop14, 25000.0 , 90.0 , 0 , 0 , 0 , 0 },
406
+ { PIN_D12, doingSomethingStart15, doingSomethingStop15, 20000.0 , 95.0 , 0 , 0 , 0 , 0 }
407
407
};
408
408
409
409
#endif // #if USING_PWM_FREQUENCY
@@ -428,15 +428,15 @@ void doingSomethingStop(int index)
428
428
429
429
#else // #if USE_COMPLEX_STRUCT
430
430
431
- irqCallback irqCallbackStartFunc[NUMBER_ISR_PWMS ] =
431
+ irqCallback irqCallbackStartFunc[] =
432
432
{
433
433
doingSomethingStart0, doingSomethingStart1, doingSomethingStart2, doingSomethingStart3,
434
434
doingSomethingStart4, doingSomethingStart5, doingSomethingStart6, doingSomethingStart7,
435
435
doingSomethingStart8, doingSomethingStart9, doingSomethingStart10, doingSomethingStart11,
436
436
doingSomethingStart12, doingSomethingStart13, doingSomethingStart14, doingSomethingStart15
437
437
};
438
438
439
- irqCallback irqCallbackStopFunc[NUMBER_ISR_PWMS ] =
439
+ irqCallback irqCallbackStopFunc[] =
440
440
{
441
441
doingSomethingStop0, doingSomethingStop1, doingSomethingStop2, doingSomethingStop3,
442
442
doingSomethingStop4, doingSomethingStop5, doingSomethingStop6, doingSomethingStop7,
@@ -471,15 +471,15 @@ void simpleTimerDoingSomething2s()
471
471
{
472
472
#if USE_COMPLEX_STRUCT
473
473
Serial.print (F (" PWM Channel : " )); Serial.print (i);
474
- Serial.print (F (" , programmed Period (us ): " ));
474
+ Serial.print (F (" , programmed Period (uS ): " ));
475
475
476
476
#if USING_PWM_FREQUENCY
477
- Serial.print (1000000 / curISR_PWM_Data[i].PWM_Freq );
477
+ Serial.print (1000000.0 / curISR_PWM_Data[i].PWM_Freq );
478
478
#else
479
479
Serial.print (curISR_PWM_Data[i].PWM_Period );
480
480
#endif
481
481
482
- Serial.print (F (" , actual : " )); Serial.print (curISR_PWM_Data[i].deltaMicrosStart );
482
+ Serial.print (F (" , actual (uS) : " )); Serial.print (curISR_PWM_Data[i].deltaMicrosStart );
483
483
484
484
Serial.print (F (" , programmed DutyCycle : " ));
485
485
@@ -497,8 +497,8 @@ void simpleTimerDoingSomething2s()
497
497
Serial.print (PWM_Period[i]);
498
498
#endif
499
499
500
- Serial.print (F (" , programmed Period (us ): " )); Serial.print (PWM_Period[i]);
501
- Serial.print (F (" , actual : " )); Serial.print (deltaMicrosStart[i]);
500
+ Serial.print (F (" , programmed Period (uS ): " )); Serial.print (PWM_Period[i]);
501
+ Serial.print (F (" , actual (uS) : " )); Serial.print (deltaMicrosStart[i]);
502
502
503
503
Serial.print (F (" , programmed DutyCycle : " ));
504
504
0 commit comments