SimpleFOClibrary 2.4.0
Loading...
Searching...
No Matches
drivers/hardware_specific/stm32/stm32_mcu.h
Go to the documentation of this file.
1#pragma once
2
3#include "../../hardware_api.h"
4
5#if defined(_STM32_DEF_) || defined(TARGET_STM32H7)
6// TARGET_M4 / TARGET_M7
7
8#ifndef SIMPLEFOC_STM32_MAX_TIMERSUSED
9#define SIMPLEFOC_STM32_MAX_TIMERSUSED 6
10#endif
11#ifndef SIMPLEFOC_STM32_MAX_TIMERSRESERVED
12#define SIMPLEFOC_STM32_MAX_TIMERSRESERVED 4
13#endif
14#ifndef SIMPLEFOC_STM32_MAX_MOTORSUSED
15#define SIMPLEFOC_STM32_MAX_MOTORSUSED 4
16#endif
17
18
19#ifndef SIMPLEFOC_STM32_DEBUG
20// comment me out to disable debug output
21#define SIMPLEFOC_STM32_DEBUG
22#endif
23
24#if defined(__MBED__)
25#define PinMap_TIM PinMap_PWM
26#define ALTX_MASK 0
27#endif
28
29
30/**
31 * No limits are placed on PWM frequency, so very fast or very slow frequencies can be set.
32 * A warning is displayed to debug if you get less than 8bit resolution for the PWM duty cycle.
33 * If no pwm_frequency is set, the default value is 25kHz.
34 */
35#define SIMPLEFOC_STM32_PWM_FREQUENCY 25000 // 25khz
36#define SIMPLEFOC_STM32_MIN_RESOLUTION 255
37
38// 6pwm parameters
39#define _HARDWARE_6PWM 1
40#define _SOFTWARE_6PWM 0
41#define _ERROR_6PWM -1
42
43
44typedef struct STM32DriverParams {
45 TIM_HandleTypeDef* timers_handle[6] = {NULL};
46 uint32_t channels[6];
47 uint32_t llchannels[6];
48 long pwm_frequency;
49 uint8_t num_timers;
50 TIM_HandleTypeDef* master_timer = NULL;
51 float dead_zone;
52 uint8_t interface_type;
53} STM32DriverParams;
54
55
56// timer allocation functions
57int stm32_getNumTimersUsed();
58int stm32_getNumMotorsUsed();
59int stm32_getNumTimersReserved();
60STM32DriverParams* stm32_getMotorUsed(int index);
61bool stm32_isTimerUsed(TIM_HandleTypeDef* timer);
62bool stm32_isChannelUsed(PinMap* pin);
63bool stm32_isTimerReserved(TIM_TypeDef* timer);
64TIM_HandleTypeDef* stm32_getTimer(PinMap* timer);
65TIM_HandleTypeDef* stm32_useTimer(PinMap* timer);
66bool stm32_reserveTimer(TIM_TypeDef* timer);
67
68void stm32_pause(STM32DriverParams* params);
69void stm32_resume(STM32DriverParams* params);
70
71// // timer synchornisation functions
72// void _stopTimers(TIM_HandleTypeDef **timers_to_stop, int timer_num=6);
73// void _startTimers(TIM_HandleTypeDef **timers_to_start, int timer_num=6);
74
75// // timer query functions
76// bool _getPwmState(void* params);
77
78#endif
GenericCurrentSenseParams * params