12 changed files with 329 additions and 165 deletions
-
2.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
-
3.vscode/settings.json
-
183Core/Src/main.c
-
74Core/Src/stm32f1xx_hal_msp.c
-
17README.md
-
67light_src_ctrl_stm32_port.ioc
-
6usrc/light_intensity_ctrl.c
-
2usrc/light_intensity_ctrl.h
-
99usrc/pluse_generator.c
-
13usrc/pluse_generator.h
-
11usrc/project_configs.h
-
17usrc/umain.c
@ -0,0 +1,2 @@ |
|||
eclipse.preferences.version=1 |
|||
sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}} |
@ -0,0 +1,99 @@ |
|||
#include "pluse_generator.h" |
|||
|
|||
#include "config_service.h" |
|||
|
|||
extern TIM_HandleTypeDef PLUSE_CTRL_TIMER; |
|||
|
|||
static zgpio_t trigger_io; |
|||
static zgpio_t ch_io[4]; |
|||
static zgpio_t chx_io; |
|||
static uint32_t m_cnt; |
|||
|
|||
static uint32_t m_pluse_width_cnt; |
|||
static uint32_t m_pluse_interval_cnt; |
|||
|
|||
static uint32_t m_pluse_num; |
|||
static uint32_t m_pluse_state; // 0:低,1:高 |
|||
|
|||
static inline void set_io_state(int off, bool state); |
|||
|
|||
/******************************************************************************* |
|||
* 中断 * |
|||
*******************************************************************************/ |
|||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { |
|||
if (GPIO_Pin == trigger_io.pinoff) { |
|||
// 启动定时器,同时触发第一个波形 |
|||
|
|||
m_cnt = 0; |
|||
m_pluse_state = 0; |
|||
m_pluse_num = 0; |
|||
|
|||
HAL_TIM_Base_Start_IT(&PLUSE_CTRL_TIMER); |
|||
set_io_state(0, true); |
|||
} |
|||
} |
|||
|
|||
static inline void pluse_wave_schedule() { |
|||
if (m_pluse_state == 0) { |
|||
if (m_cnt >= m_pluse_interval_cnt) { |
|||
m_pluse_state = 1; |
|||
m_pluse_num++; |
|||
m_cnt = 0; |
|||
set_io_state(m_pluse_num, 1); |
|||
} |
|||
} |
|||
|
|||
else if (m_pluse_state == 1) { |
|||
if (m_cnt >= m_pluse_width_cnt) { |
|||
m_pluse_state = 0; |
|||
m_cnt = 0; |
|||
set_io_state(m_pluse_num, 0); |
|||
if (m_pluse_num == 3) { |
|||
HAL_TIM_Base_Stop(&PLUSE_CTRL_TIMER); |
|||
} |
|||
|
|||
if (m_pluse_interval_cnt == 0) { |
|||
m_pluse_state = 1; |
|||
m_pluse_num++; |
|||
m_cnt = 0; |
|||
set_io_state(m_pluse_num, 1); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
void tim7_irq_trigger() { |
|||
m_cnt++; |
|||
pluse_wave_schedule(); |
|||
} |
|||
|
|||
/******************************************************************************* |
|||
* FUNCTION * |
|||
*******************************************************************************/ |
|||
static inline void set_io_state(int off, bool state) { |
|||
zgpio_write(&ch_io[off], state); |
|||
zgpio_write(&chx_io, state); |
|||
} |
|||
|
|||
void PluseGenerator_init() { |
|||
// |
|||
|
|||
ZASSERT(&PLUSE_CTRL_TIMER == &htim7); |
|||
ZASSERT(PLUSE_CTRL_TIMER.Init.AutoReloadPreload = 100); |
|||
ZASSERT(PLUSE_CTRL_TIMER.Init.Prescaler = 71); |
|||
// PLUSE_CTRL_TIMER.Init. |
|||
|
|||
PluseGenerator_updatePraram(); |
|||
|
|||
zgpio_init_as_output(&ch_io[0], PLUSE_OUTPUT_CH0, kxs_gpio_nopull, false, false); |
|||
zgpio_init_as_output(&ch_io[1], PLUSE_OUTPUT_CH1, kxs_gpio_nopull, false, false); |
|||
zgpio_init_as_output(&ch_io[2], PLUSE_OUTPUT_CH2, kxs_gpio_nopull, false, false); |
|||
zgpio_init_as_output(&ch_io[3], PLUSE_OUTPUT_CH3, kxs_gpio_nopull, false, false); |
|||
zgpio_init_as_output(&chx_io, PLUSE_OUTPUT_CHX, kxs_gpio_nopull, false, false); |
|||
zgpio_init_as_input(&trigger_io, PLUSE_TRIGGER, kxs_gpio_nopull, kxs_gpio_rising_irq, false); |
|||
} |
|||
|
|||
void PluseGenerator_updatePraram() { |
|||
m_pluse_width_cnt = config_get()->pulse_width_ms * 10; |
|||
m_pluse_interval_cnt = config_get()->pulse_interval_ms * 10; |
|||
} |
@ -0,0 +1,13 @@ |
|||
#pragma once |
|||
#include <stdint.h> |
|||
|
|||
#include "zlib.h" |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
void PluseGenerator_init(); |
|||
void PluseGenerator_updatePraram(); |
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue