Skip to content

ports/stm32: Add OpenMV PureThermal buzzer pin. #135

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions ports/stm32/boards/OPENMVPT/board_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,53 @@
#define OMV_BOOTLOADER_MAGIC_ADDR (0x2001FFFCU)
#define OMV_BOOTLOADER_MAGIC_VALUE (0xB00710ADU)

void board_early_init(void) {
// Bring FLIR Lepton out of reset.
mp_hal_pin_config(pyb_pin_LEPTON_RSTN, MP_HAL_PIN_MODE_OUTPUT, MP_HAL_PIN_PULL_NONE, 0);
mp_hal_pin_config_speed(pyb_pin_LEPTON_RSTN, MP_HAL_PIN_SPEED_LOW);
mp_hal_pin_write(pyb_pin_LEPTON_RSTN, 1);

// Release powerdown.
mp_hal_pin_config(pyb_pin_LEPTON_PWDN, MP_HAL_PIN_MODE_OUTPUT, MP_HAL_PIN_PULL_NONE, 0);
mp_hal_pin_config_speed(pyb_pin_LEPTON_PWDN, MP_HAL_PIN_SPEED_LOW);
mp_hal_pin_write(pyb_pin_LEPTON_PWDN, 1);

// Enable FLIR Lepton MCLK.
mp_hal_pin_config(pyb_pin_LEPTON_MCLK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, 4);
mp_hal_pin_config_speed(pyb_pin_LEPTON_MCLK, MP_HAL_PIN_SPEED_HIGH);

// Hardcode the clock frequency as SystemClock_Config() hasn't been called yet.
int tclk = 120000000 * 2; // HAL_RCC_GetPCLK2Freq() * 2
int period = (tclk / 24000000) - 1;

TIM_HandleTypeDef mclk_tim_handle;
mclk_tim_handle.Instance = TIM15;
mclk_tim_handle.Init.Prescaler = 0;
mclk_tim_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
mclk_tim_handle.Init.Period = period;
mclk_tim_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
mclk_tim_handle.Init.RepetitionCounter = 0;
mclk_tim_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

TIM_OC_InitTypeDef mclk_tim_oc_handle;
mclk_tim_oc_handle.Pulse = (period + 1) / 2;
mclk_tim_oc_handle.OCMode = TIM_OCMODE_PWM1;
mclk_tim_oc_handle.OCPolarity = TIM_OCPOLARITY_HIGH;
mclk_tim_oc_handle.OCNPolarity = TIM_OCNPOLARITY_HIGH;
mclk_tim_oc_handle.OCFastMode = TIM_OCFAST_DISABLE;
mclk_tim_oc_handle.OCIdleState = TIM_OCIDLESTATE_RESET;
mclk_tim_oc_handle.OCNIdleState = TIM_OCNIDLESTATE_RESET;

__HAL_RCC_TIM15_CLK_ENABLE();
__HAL_RCC_TIM15_CLK_SLEEP_ENABLE();
__HAL_RCC_TIM15_FORCE_RESET();
__HAL_RCC_TIM15_RELEASE_RESET();

HAL_TIM_PWM_Init(&mclk_tim_handle);
HAL_TIM_PWM_ConfigChannel(&mclk_tim_handle, &mclk_tim_oc_handle, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&mclk_tim_handle, TIM_CHANNEL_2);
}

void board_low_power(int mode) {
switch (mode) {
case 0: // Leave stop mode.
Expand Down
3 changes: 3 additions & 0 deletions ports/stm32/boards/OPENMVPT/mpconfigboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ typedef unsigned int mp_uint_t; // must be pointer size
#define MICROPY_HW_SPIFLASH_SOFT_RESET (1)
#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0)

#define MICROPY_BOARD_EARLY_INIT board_early_init
void board_early_init(void);

extern void board_enter_bootloader(void);
#define MICROPY_BOARD_ENTER_BOOTLOADER(nargs, args) board_enter_bootloader()

Expand Down
4 changes: 4 additions & 0 deletions ports/stm32/boards/OPENMVPT/pins.csv
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ LED_WHITE,PG3
LED_RED,-PC0
LED_GREEN,-PC2
LED_BLUE,-PC1
BUZZER,PA1
PA4,PA4
PA15,PA15
PB3,PB3
Expand Down Expand Up @@ -105,3 +106,6 @@ TOUCH_SCL,PJ13
TOUCH_SDA,PJ14
TOUCH_INT,PJ6
WINC_INT,-PH5
LEPTON_RSTN,PD5
LEPTON_PWDN,PD4
LEPTON_MCLK,PA3
Loading