Skip to content

Commit 04cf85c

Browse files
committed
1 parent cf142bc commit 04cf85c

File tree

10 files changed

+1146
-1007
lines changed

10 files changed

+1146
-1007
lines changed

src/eez/main.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ int main(int argc, char **argv) {
157157
MX_SPI5_Init();
158158
// MX_TIM3_Init();
159159
MX_TIM6_Init();
160-
//MX_TIM8_Init();
160+
MX_TIM8_Init();
161161

162162
MX_TIM7_Init();
163163
HAL_TIM_Base_Start_IT(&htim7);

src/eez/modules/mcu/encoder.cpp

+30-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <eez/modules/mcu/encoder.h>
2929

3030
#if defined(EEZ_PLATFORM_STM32)
31+
#include <tim.h>
3132
#include <eez/modules/mcu/button.h>
3233
#endif
3334

@@ -84,7 +85,30 @@ void write(int counter, bool clicked) {
8485
#endif
8586

8687
#if defined(EEZ_PLATFORM_STM32)
88+
bool g_debounceTimerStarted = false;
89+
volatile uint8_t g_pinState;
90+
91+
#define READ_ENC_PIN_STATE (HAL_GPIO_ReadPin(ENC_B_GPIO_Port, ENC_B_Pin) << 1) | HAL_GPIO_ReadPin(ENC_A_GPIO_Port, ENC_A_Pin)
92+
8793
void onPinInterrupt() {
94+
if (!g_debounceTimerStarted) {
95+
g_pinState = READ_ENC_PIN_STATE;
96+
TIM8->ARR = 500;
97+
HAL_TIM_Base_Start_IT(&htim8);
98+
g_debounceTimerStarted = true;
99+
}
100+
}
101+
102+
void onDebounceTimer() {
103+
HAL_TIM_Base_Stop_IT(&htim8);
104+
g_debounceTimerStarted = false;
105+
106+
uint8_t pinState = READ_ENC_PIN_STATE;
107+
if (pinState != g_pinState) {
108+
// debounce
109+
return;
110+
}
111+
88112
// https://github.com/buxtronix/arduino/blob/master/libraries/Rotary/Rotary.cpp
89113
// static const uint8_t DIR_NONE = 0x0; // No complete step yet.
90114
static const uint8_t DIR_CW = 0x10; // Clockwise step.
@@ -145,7 +169,6 @@ void onPinInterrupt() {
145169

146170
static volatile uint8_t g_rotationState = R_START;
147171

148-
uint8_t pinState = (HAL_GPIO_ReadPin(ENC_B_GPIO_Port, ENC_B_Pin) << 1) | HAL_GPIO_ReadPin(ENC_A_GPIO_Port, ENC_A_Pin);
149172
g_rotationState = g_ttable[g_rotationState & 0xf][pinState];
150173

151174
uint8_t dir = g_rotationState & 0x30;
@@ -243,3 +266,9 @@ static int getAcceleratedCounter(int increment) {
243266
} // namespace eez
244267

245268
#endif
269+
270+
#if defined(EEZ_PLATFORM_STM32)
271+
extern "C" void Encoder_OnDebounceTimer() {
272+
eez::mcu::encoder::onDebounceTimer();
273+
}
274+
#endif

src/third_party/stm32_cubeide/.cproject

+12-4
Large diffs are not rendered by default.

src/third_party/stm32_cubeide/.mxproject

+1-1
Large diffs are not rendered by default.

src/third_party/stm32_cubeide/Core/Inc/stm32f7xx_it.h

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ void ADC_IRQHandler(void);
6060
void EXTI9_5_IRQHandler(void);
6161
void TIM1_UP_TIM10_IRQHandler(void);
6262
void EXTI15_10_IRQHandler(void);
63+
void TIM8_UP_TIM13_IRQHandler(void);
6364
void SDMMC1_IRQHandler(void);
6465
void UART4_IRQHandler(void);
6566
void TIM7_IRQHandler(void);

src/third_party/stm32_cubeide/Core/Inc/tim.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ extern TIM_HandleTypeDef htim3;
3535
extern TIM_HandleTypeDef htim4;
3636
extern TIM_HandleTypeDef htim6;
3737
extern TIM_HandleTypeDef htim7;
38+
extern TIM_HandleTypeDef htim8;
3839

3940
/* USER CODE BEGIN Private defines */
4041
extern TIM_HandleTypeDef htim12;
@@ -44,6 +45,7 @@ void MX_TIM3_Init(void);
4445
void MX_TIM4_Init(void);
4546
void MX_TIM6_Init(void);
4647
void MX_TIM7_Init(void);
48+
void MX_TIM8_Init(void);
4749

4850
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
4951

src/third_party/stm32_cubeide/Core/Src/main.c

+4
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ void SystemClock_Config_R2B4(void)
249249
}
250250

251251
void PSU_IncTick();
252+
void Encoder_OnDebounceTimer();
252253
/* USER CODE END 4 */
253254

254255
/**
@@ -271,6 +272,9 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
271272
else if (htim->Instance == TIM7) {
272273
PSU_IncTick();
273274
}
275+
else if (htim->Instance == TIM8) {
276+
Encoder_OnDebounceTimer();
277+
}
274278
/* USER CODE END Callback 1 */
275279
}
276280

src/third_party/stm32_cubeide/Core/Src/stm32f7xx_it.c

+15
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ extern DMA_HandleTypeDef hdma_spi4_tx;
7676
extern DMA_HandleTypeDef hdma_spi5_rx;
7777
extern DMA_HandleTypeDef hdma_spi5_tx;
7878
extern TIM_HandleTypeDef htim7;
79+
extern TIM_HandleTypeDef htim8;
7980
extern DMA_HandleTypeDef hdma_uart4_rx;
8081
extern UART_HandleTypeDef huart4;
8182
extern TIM_HandleTypeDef htim10;
@@ -305,6 +306,20 @@ void EXTI15_10_IRQHandler(void)
305306
/* USER CODE END EXTI15_10_IRQn 1 */
306307
}
307308

309+
/**
310+
* @brief This function handles TIM8 update interrupt and TIM13 global interrupt.
311+
*/
312+
void TIM8_UP_TIM13_IRQHandler(void)
313+
{
314+
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */
315+
316+
/* USER CODE END TIM8_UP_TIM13_IRQn 0 */
317+
HAL_TIM_IRQHandler(&htim8);
318+
/* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */
319+
320+
/* USER CODE END TIM8_UP_TIM13_IRQn 1 */
321+
}
322+
308323
/**
309324
* @brief This function handles SDMMC1 global interrupt.
310325
*/

src/third_party/stm32_cubeide/Core/Src/tim.c

+72
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ TIM_HandleTypeDef htim3;
3636
TIM_HandleTypeDef htim4;
3737
TIM_HandleTypeDef htim6;
3838
TIM_HandleTypeDef htim7;
39+
TIM_HandleTypeDef htim8;
3940

4041
/* TIM3 init function */
4142
void MX_TIM3_Init(void)
@@ -191,6 +192,48 @@ void MX_TIM7_Init(void)
191192
/* USER CODE END TIM7_Init 2 */
192193

193194
}
195+
/* TIM8 init function */
196+
void MX_TIM8_Init(void)
197+
{
198+
199+
/* USER CODE BEGIN TIM8_Init 0 */
200+
201+
/* USER CODE END TIM8_Init 0 */
202+
203+
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
204+
TIM_MasterConfigTypeDef sMasterConfig = {0};
205+
206+
/* USER CODE BEGIN TIM8_Init 1 */
207+
208+
/* USER CODE END TIM8_Init 1 */
209+
htim8.Instance = TIM8;
210+
htim8.Init.Prescaler = 108;
211+
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
212+
htim8.Init.Period = 1000;
213+
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
214+
htim8.Init.RepetitionCounter = 0;
215+
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
216+
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
217+
{
218+
Error_Handler();
219+
}
220+
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
221+
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
222+
{
223+
Error_Handler();
224+
}
225+
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
226+
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
227+
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
228+
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
229+
{
230+
Error_Handler();
231+
}
232+
/* USER CODE BEGIN TIM8_Init 2 */
233+
234+
/* USER CODE END TIM8_Init 2 */
235+
236+
}
194237

195238
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
196239
{
@@ -250,6 +293,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
250293

251294
/* USER CODE END TIM7_MspInit 1 */
252295
}
296+
else if(tim_baseHandle->Instance==TIM8)
297+
{
298+
/* USER CODE BEGIN TIM8_MspInit 0 */
299+
300+
/* USER CODE END TIM8_MspInit 0 */
301+
/* TIM8 clock enable */
302+
__HAL_RCC_TIM8_CLK_ENABLE();
303+
304+
/* TIM8 interrupt Init */
305+
HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 5, 0);
306+
HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
307+
/* USER CODE BEGIN TIM8_MspInit 1 */
308+
309+
/* USER CODE END TIM8_MspInit 1 */
310+
}
253311
}
254312
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
255313
{
@@ -366,6 +424,20 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
366424

367425
/* USER CODE END TIM7_MspDeInit 1 */
368426
}
427+
else if(tim_baseHandle->Instance==TIM8)
428+
{
429+
/* USER CODE BEGIN TIM8_MspDeInit 0 */
430+
431+
/* USER CODE END TIM8_MspDeInit 0 */
432+
/* Peripheral clock disable */
433+
__HAL_RCC_TIM8_CLK_DISABLE();
434+
435+
/* TIM8 interrupt Deinit */
436+
HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn);
437+
/* USER CODE BEGIN TIM8_MspDeInit 1 */
438+
439+
/* USER CODE END TIM8_MspDeInit 1 */
440+
}
369441
}
370442

371443
/* USER CODE BEGIN 1 */

0 commit comments

Comments
 (0)