Browse Source

update

master
zhaohe 1 year ago
parent
commit
330b0ca151
  1. 82
      Core/Src/main.c
  2. 50
      Core/Src/stm32f1xx_hal_msp.c
  3. 12
      Core/Src/stm32f1xx_it.c
  4. 101
      bak/pluse_generator.c
  5. 13
      bak/pluse_generator.h
  6. 60
      light_src_ctrl_stm32_port.ioc
  7. 11
      usrc/config_service.c
  8. 12
      usrc/config_service.h
  9. 182
      usrc/pluse_generator.c
  10. 2
      usrc/pluse_generator.h
  11. 22
      usrc/project_configs.h
  12. 62
      usrc/umain.c

82
Core/Src/main.c

@ -40,6 +40,7 @@
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim5;
TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7;
TIM_HandleTypeDef htim8;
@ -60,6 +61,7 @@ static void MX_USART1_UART_Init(void);
static void MX_TIM6_Init(void);
static void MX_TIM7_Init(void);
static void MX_TIM8_Init(void);
static void MX_TIM5_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@ -102,6 +104,7 @@ int main(void)
MX_TIM6_Init();
MX_TIM7_Init();
MX_TIM8_Init();
MX_TIM5_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@ -159,6 +162,73 @@ void SystemClock_Config(void)
}
/**
* @brief TIM5 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM5_Init(void)
{
/* USER CODE BEGIN TIM5_Init 0 */
/* USER CODE END TIM5_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM5_Init 1 */
/* USER CODE END TIM5_Init 1 */
htim5.Instance = TIM5;
htim5.Init.Prescaler = 3;
htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
htim5.Init.Period = 65535;
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM5_Init 2 */
/* USER CODE END TIM5_Init 2 */
HAL_TIM_MspPostInit(&htim5);
}
/**
* @brief TIM6 Initialization Function
* @param None
* @retval None
@ -424,12 +494,12 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : PA0 PA1 PA2 PA3
PA4 PA5 PA6 PA7
PA8 PA11 PA12 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
/*Configure GPIO pins : PA3 PA4 PA5 PA6
PA7 PA8 PA11 PA12
PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12
|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

50
Core/Src/stm32f1xx_hal_msp.c

@ -63,7 +63,7 @@ extern DMA_HandleTypeDef hdma_usart1_tx;
/* USER CODE END 0 */
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/**
/**
* Initializes the Global MSP.
*/
void HAL_MspInit(void)
@ -94,7 +94,18 @@ void HAL_MspInit(void)
*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM6)
if(htim_base->Instance==TIM5)
{
/* USER CODE BEGIN TIM5_MspInit 0 */
/* USER CODE END TIM5_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM5_CLK_ENABLE();
/* USER CODE BEGIN TIM5_MspInit 1 */
/* USER CODE END TIM5_MspInit 1 */
}
else if(htim_base->Instance==TIM6)
{
/* USER CODE BEGIN TIM6_MspInit 0 */
@ -136,7 +147,27 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM8)
if(htim->Instance==TIM5)
{
/* USER CODE BEGIN TIM5_MspPostInit 0 */
/* USER CODE END TIM5_MspPostInit 0 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM5 GPIO Configuration
PA0-WKUP ------> TIM5_CH1
PA1 ------> TIM5_CH2
PA2 ------> TIM5_CH3
*/
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN TIM5_MspPostInit 1 */
/* USER CODE END TIM5_MspPostInit 1 */
}
else if(htim->Instance==TIM8)
{
/* USER CODE BEGIN TIM8_MspPostInit 0 */
@ -168,7 +199,18 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
*/
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM6)
if(htim_base->Instance==TIM5)
{
/* USER CODE BEGIN TIM5_MspDeInit 0 */
/* USER CODE END TIM5_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM5_CLK_DISABLE();
/* USER CODE BEGIN TIM5_MspDeInit 1 */
/* USER CODE END TIM5_MspDeInit 1 */
}
else if(htim_base->Instance==TIM6)
{
/* USER CODE BEGIN TIM6_MspDeInit 0 */

12
Core/Src/stm32f1xx_it.c

@ -265,13 +265,13 @@ void TIM7_IRQHandler(void)
{
/* USER CODE BEGIN TIM7_IRQn 0 */
extern void tim7_irq_trigger();
// extern void tim7_irq_trigger();
if (__HAL_TIM_GET_FLAG(&htim7, TIM_FLAG_UPDATE) != RESET) {
if (__HAL_TIM_GET_IT_SOURCE(&htim7, TIM_IT_UPDATE) != RESET) {
tim7_irq_trigger();
}
}
// if (__HAL_TIM_GET_FLAG(&htim7, TIM_FLAG_UPDATE) != RESET) {
// if (__HAL_TIM_GET_IT_SOURCE(&htim7, TIM_IT_UPDATE) != RESET) {
// tim7_irq_trigger();
// }
// }
/* USER CODE END TIM7_IRQn 0 */
HAL_TIM_IRQHandler(&htim7);
/* USER CODE BEGIN TIM7_IRQn 1 */

101
bak/pluse_generator.c

@ -1,101 +0,0 @@
#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 int32_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) {
//
// -1
m_cnt = -1;
m_pluse_state = 1;
m_pluse_num = 0;
__HAL_TIM_SET_COUNTER(&PLUSE_CTRL_TIMER, 1);
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_pulldown, kxs_gpio_rising_irq, false);
}
void PluseGenerator_updatePraram() {
m_pluse_width_cnt = config_get()->pulse_width_us * 10;
m_pluse_interval_cnt = config_get()->pulse_interval_us * 10;
}

13
bak/pluse_generator.h

@ -1,13 +0,0 @@
#pragma once
#include <stdint.h>
#include "zlib.h"
#ifdef __cplusplus
extern "C" {
#endif
void PluseGenerator_init();
void PluseGenerator_updatePraram();
#ifdef __cplusplus
}
#endif

60
light_src_ctrl_stm32_port.ioc

@ -32,30 +32,35 @@ Mcu.IP0=DMA
Mcu.IP1=NVIC
Mcu.IP2=RCC
Mcu.IP3=SYS
Mcu.IP4=TIM6
Mcu.IP5=TIM7
Mcu.IP6=TIM8
Mcu.IP7=USART1
Mcu.IPNb=8
Mcu.IP4=TIM5
Mcu.IP5=TIM6
Mcu.IP6=TIM7
Mcu.IP7=TIM8
Mcu.IP8=USART1
Mcu.IPNb=9
Mcu.Name=STM32F103Z(C-D-E)Tx
Mcu.Package=LQFP144
Mcu.Pin0=PC14-OSC32_IN
Mcu.Pin1=PC15-OSC32_OUT
Mcu.Pin10=PA13
Mcu.Pin11=PA14
Mcu.Pin12=VP_SYS_VS_tim4
Mcu.Pin13=VP_TIM6_VS_ClockSourceINT
Mcu.Pin14=VP_TIM7_VS_ClockSourceINT
Mcu.Pin15=VP_TIM8_VS_ClockSourceINT
Mcu.Pin10=PC9
Mcu.Pin11=PA9
Mcu.Pin12=PA10
Mcu.Pin13=PA13
Mcu.Pin14=PA14
Mcu.Pin15=VP_SYS_VS_tim4
Mcu.Pin16=VP_TIM5_VS_ClockSourceINT
Mcu.Pin17=VP_TIM6_VS_ClockSourceINT
Mcu.Pin18=VP_TIM7_VS_ClockSourceINT
Mcu.Pin19=VP_TIM8_VS_ClockSourceINT
Mcu.Pin2=OSC_IN
Mcu.Pin3=OSC_OUT
Mcu.Pin4=PC6
Mcu.Pin5=PC7
Mcu.Pin6=PC8
Mcu.Pin7=PC9
Mcu.Pin8=PA9
Mcu.Pin9=PA10
Mcu.PinsNb=16
Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PA1
Mcu.Pin6=PA2
Mcu.Pin7=PC6
Mcu.Pin8=PC7
Mcu.Pin9=PC8
Mcu.PinsNb=20
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F103ZETx
@ -83,12 +88,15 @@ OSC_IN.Mode=HSE-External-Oscillator
OSC_IN.Signal=RCC_OSC_IN
OSC_OUT.Mode=HSE-External-Oscillator
OSC_OUT.Signal=RCC_OSC_OUT
PA0-WKUP.Signal=S_TIM5_CH1
PA1.Signal=S_TIM5_CH2
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA2.Signal=S_TIM5_CH3
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PC14-OSC32_IN.Mode=LSE-External-Oscillator
@ -130,7 +138,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_TIM8_Init-TIM8-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_TIM8_Init-TIM8-false-HAL-true,8-MX_TIM5_Init-TIM5-false-HAL-true
RCC.ADCFreqValue=36000000
RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2
@ -157,6 +165,12 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TimSysFreq_Value=72000000
RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=8000000
SH.S_TIM5_CH1.0=TIM5_CH1,PWM Generation1 CH1
SH.S_TIM5_CH1.ConfNb=1
SH.S_TIM5_CH2.0=TIM5_CH2,PWM Generation2 CH2
SH.S_TIM5_CH2.ConfNb=1
SH.S_TIM5_CH3.0=TIM5_CH3,PWM Generation3 CH3
SH.S_TIM5_CH3.ConfNb=1
SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1
SH.S_TIM8_CH1.ConfNb=1
SH.S_TIM8_CH2.0=TIM8_CH2,PWM Generation2 CH2
@ -165,6 +179,12 @@ SH.S_TIM8_CH3.0=TIM8_CH3,PWM Generation3 CH3
SH.S_TIM8_CH3.ConfNb=1
SH.S_TIM8_CH4.0=TIM8_CH4,PWM Generation4 CH4
SH.S_TIM8_CH4.ConfNb=1
TIM5.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM5.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
TIM5.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
TIM5.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
TIM5.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Prescaler,AutoReloadPreload
TIM5.Prescaler=3
TIM7.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM7.IPParameters=AutoReloadPreload,Prescaler,Period
TIM7.Period=65534
@ -180,6 +200,8 @@ USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
VP_SYS_VS_tim4.Mode=TIM4
VP_SYS_VS_tim4.Signal=SYS_VS_tim4
VP_TIM5_VS_ClockSourceINT.Mode=Internal
VP_TIM5_VS_ClockSourceINT.Signal=TIM5_VS_ClockSourceINT
VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT
VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer

11
usrc/config_service.c

@ -6,10 +6,13 @@ static config_t _default_val_config;
#define TAG "config"
static void create_default_config(config_t *default_cfg) { //
default_cfg->light_intensity = 50;
default_cfg->pulse_width_us = 25;
default_cfg->pulse_interval_us = 2;
default_cfg->cmd_echo = 1;
default_cfg->light_intensity = 50;
default_cfg->pulse_width_x25ns = 30 * 4;
default_cfg->pulse_interval_x25ns = 1 * 4;
default_cfg->shutter_delay_x25ns = 1 * 4;
default_cfg->shutter_delay_x25ns = 1 * 4;
default_cfg->trigger_mirror = 1;
default_cfg->cmd_echo = 1;
}
void config_init(void) {

12
usrc/config_service.h

@ -8,11 +8,13 @@ extern "C" {
typedef struct {
uint32_t config_mark;
uint32_t light_intensity; // 0->100
uint32_t pulse_width_us; //
uint32_t pulse_interval_us; //
uint32_t cmd_echo; //
uint32_t checksum; //
uint32_t light_intensity; // 0->100
uint32_t pulse_width_x25ns; //
uint32_t pulse_interval_x25ns; //
uint32_t shutter_delay_x25ns; //
uint32_t trigger_mirror; //
uint32_t cmd_echo; //
uint32_t checksum; //
} config_t;
void config_init(void);

182
usrc/pluse_generator.c

@ -2,144 +2,62 @@
#include "config_service.h"
extern TIM_HandleTypeDef PLUSE_CTRL_TIMER;
#define ZARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
static zgpio_t trigger_io;
static zgpio_t ch_io[4];
static zgpio_t chx_io;
static inline void set_io_state(int off, bool state);
void tim7_irq_trigger() {}
typedef enum {
kaction_set_io0_high = 0,
kaction_set_io0_low,
kaction_set_io1_high,
kaction_set_io1_low,
kaction_set_io2_high,
kaction_set_io2_low,
kaction_set_io3_high,
kaction_set_io3_low,
} step_action_t;
typedef struct {
step_action_t action;
int32_t tp;
} step_t;
step_t m_steps[] = { //
{kaction_set_io0_high, 0}, //
{kaction_set_io0_low, 0}, //
{kaction_set_io1_high, 0}, //
{kaction_set_io1_low, 0}, //
{kaction_set_io2_high, 0}, //
{kaction_set_io2_low, 0}, //
{kaction_set_io3_high, 0}, //
{kaction_set_io3_low, 0}};
/*******************************************************************************
* *
*******************************************************************************/
void prv_delay_us(uint32_t us) {
for (uint32_t j = 0; j < us; j++) {
for (uint32_t i = 0; i < 350; i++) {
__NOP();
}
}
}
static inline void set_io_state(int off, bool state) {
HAL_GPIO_WritePin(ch_io[off].gpio, ch_io[off].pinoff, state);
HAL_GPIO_WritePin(chx_io.gpio, chx_io.pinoff, state);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin != trigger_io.pinoff) {
return;
}
//
// -1
__HAL_TIM_SET_COUNTER(&PLUSE_CTRL_TIMER, 0);
HAL_TIM_Base_Start(&PLUSE_CTRL_TIMER);
// set_io_state(0, true);
uint32_t counter = 0;
for (uint32_t i = 0; i < ZARRAY_SIZE(m_steps); i++) {
while ((int32_t)counter < m_steps[i].tp) {
counter = __HAL_TIM_GET_COUNTER(&PLUSE_CTRL_TIMER);
}
switch (m_steps[i].action) {
case kaction_set_io0_high:
set_io_state(0, true);
break;
case kaction_set_io0_low:
set_io_state(0, false);
break;
case kaction_set_io1_high:
set_io_state(1, true);
break;
case kaction_set_io1_low:
set_io_state(1, false);
break;
case kaction_set_io2_high:
set_io_state(2, true);
break;
case kaction_set_io2_low:
set_io_state(2, false);
break;
case kaction_set_io3_high:
set_io_state(3, true);
break;
case kaction_set_io3_low:
set_io_state(3, false);
break;
default:
break;
}
}
HAL_TIM_Base_Stop(&PLUSE_CTRL_TIMER);
}
extern TIM_HandleTypeDef PLUSE_CTRL_TIMER;
static TIM_HandleTypeDef* m_htim = &PLUSE_CTRL_TIMER;
/*******************************************************************************
* FUNCTION *
*******************************************************************************/
static zgpio_t trigger_mirror_ctrl_io;
void PluseGenerator_init() {
//
ZASSERT(&PLUSE_CTRL_TIMER == &htim7);
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_pulldown, kxs_gpio_rising_irq, false);
// zgpio_init_as_output(&chx_io, PLUSE_OUTPUT_CHX, kxs_gpio_nopull, false, false);
zgpio_init_as_output(&trigger_mirror_ctrl_io, TRIGGER_MIRROR_CTRL_PIN, kxs_gpio_pullup, false, false);
PluseGenerator_cfg_update();
}
void PluseGenerator_updatePraram() {
config_t* cfg = config_get();
m_steps[kaction_set_io0_high].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 0;
m_steps[kaction_set_io0_low].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 0 + (cfg->pulse_width_us * 1);
m_steps[kaction_set_io1_high].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 1;
m_steps[kaction_set_io1_low].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 1 + (cfg->pulse_width_us * 1);
m_steps[kaction_set_io2_high].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 2;
m_steps[kaction_set_io2_low].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 2 + (cfg->pulse_width_us * 1);
m_steps[kaction_set_io3_high].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 3;
m_steps[kaction_set_io3_low].tp = 1 + ((cfg->pulse_width_us + cfg->pulse_interval_us) * 1) * 3 + (cfg->pulse_width_us * 1);
for (uint32_t i = 0; i < ZARRAY_SIZE(m_steps); i++) {
// printf("m_steps[%d].tp = %d\n", i, m_steps[i].tp);
}
void PluseGenerator_cfg_update() {
uint32_t prescaler = 0;
uint32_t autoreload = 0;
config_t* cfg = NULL;
uint32_t timClkFreq;
ZASSERT(&PLUSE_CTRL_TIMER == &htim5);
cfg = config_get();
// timClkFreq = chip_get_timer_clock_sorce_freq(&PLUSE_CTRL_TIMER);
// ZASSERT(timClkFreq = 36000000);
prescaler = 17; // 4M 0.25us
autoreload = 4 * 1000; // 1ms
// m_htim->
HAL_TIM_PWM_Stop(m_htim, TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(m_htim, TIM_CHANNEL_2);
HAL_TIM_PWM_Stop(m_htim, TIM_CHANNEL_3);
__HAL_TIM_SET_AUTORELOAD(m_htim, autoreload);
__HAL_TIM_SET_PRESCALER(m_htim, prescaler);
//
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 1;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
sConfigOC.Pulse = cfg->pulse_width_x25ns;
ZSTM32_CHECK(HAL_TIM_PWM_ConfigChannel(m_htim, &sConfigOC, TIM_CHANNEL_1));
sConfigOC.Pulse = cfg->pulse_interval_x25ns;
ZSTM32_CHECK(HAL_TIM_PWM_ConfigChannel(m_htim, &sConfigOC, TIM_CHANNEL_2));
sConfigOC.Pulse = cfg->shutter_delay_x25ns;
ZSTM32_CHECK(HAL_TIM_PWM_ConfigChannel(m_htim, &sConfigOC, TIM_CHANNEL_3));
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_1));
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_2));
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_3));
// TRIGGER_MIRROR_CTRL_PIN
zgpio_write(&trigger_mirror_ctrl_io, cfg->trigger_mirror);
}

2
usrc/pluse_generator.h

@ -7,7 +7,7 @@ extern "C" {
#endif
void PluseGenerator_init();
void PluseGenerator_updatePraram();
void PluseGenerator_cfg_update();
#ifdef __cplusplus
}
#endif

22
usrc/project_configs.h

@ -1,35 +1,25 @@
#pragma once
#define PC_VERSION 1
#define PC_MANUFACTURER0 ('i' | 'f' << 8 | 'l' << 16 | 'y' << 24)
#define PC_MANUFACTURER1 ('t' | 'o' << 8 | 'p' << 16 | '\0' << 24)
#define PC_VERSION 1
#define PC_MANUFACTURER0 ('i' | 'f' << 8 | 'l' << 16 | 'y' << 24)
#define PC_MANUFACTURER1 ('t' | 'o' << 8 | 'p' << 16 | '\0' << 24)
#define PC_DEBUG_UART huart1
#define PC_DEBUG_UART_DMA_HANDLER hdma_usart1_rx
#define PC_DEBUG_UART_RX_BUF_SIZE 1024
#define PC_DEBUG_LIGHT_GPIO PB0
#define PC_SYS_DELAY_US_TIMER htim6 //
#define PC_SYS_DELAY_US_TIMER htim6 //
#define PC_IRQ_PREEMPTPRIORITY_DEFAULT 5
#define PC_NVS_ENABLE 1
#define LIGHT_INTENSITY_TIM htim8
#define PLUSE_CTRL_TIMER htim7
#define PLUSE_TRIGGER PA0
#define PLUSE_OUTPUT_CH0 PA1
#define PLUSE_OUTPUT_CH1 PA2
#define PLUSE_OUTPUT_CH2 PA3
#define PLUSE_OUTPUT_CH3 PA4
#define PLUSE_OUTPUT_CHX PA5
#define PLUSE_CTRL_TIMER htim5
#define TRIGGER_MIRROR_CTRL_PIN PA4
// =====================================================================
// =====================================================================
// =====================================================================
#define FACTORY_RESET_KEY PB1
#define POWER_LED_PIN PB2

62
usrc/umain.c

@ -75,23 +75,43 @@ void prv_process_uart_rx_data() {
cfg->light_intensity = val;
LightIntensityCtrl_updatePraram();
printf("OK\n");
} else if (strcmp(param, "pulse_width_us") == 0) {
if (val <= 0 || val > 100) {
printf("FAIL,pulse_width_us should be in range 1-100\n");
} else if (strcmp(param, "pulse_width_x25ns") == 0) {
if (val <= 0 || val > 100 * 8) {
printf("FAIL,pulse_width_x25ns should be in range 1-800\n");
return;
}
cfg->pulse_width_us = val;
PluseGenerator_updatePraram();
cfg->pulse_width_x25ns = val;
PluseGenerator_cfg_update();
printf("OK\n");
} else if (strcmp(param, "pulse_interval_us") == 0) {
if (val > 100) {
printf("FAIL,pulse_interval_us should be in range 0-100\n");
} else if (strcmp(param, "pulse_interval_x25ns") == 0) {
if (val <= 0 || val > 100 * 8) {
printf("FAIL,pulse_interval_x25ns should be in range 1-800\n");
return;
}
cfg->pulse_interval_us = val;
PluseGenerator_updatePraram();
cfg->pulse_interval_x25ns = val;
PluseGenerator_cfg_update();
printf("OK\n");
} else if (strcmp(param, "cmd_echo") == 0) {
} else if (strcmp(param, "shutter_delay_x25ns") == 0) {
if (val <= 0 || val > 100 * 8) {
printf("FAIL,shutter_delay_x25ns should be in range 1-800\n");
return;
}
cfg->shutter_delay_x25ns = val;
PluseGenerator_cfg_update();
printf("OK\n");
}
else if (strcmp(param, "trigger_mirror") == 0) {
if (val != 0 && val != 1) {
printf("FAIL,trigger_mirror should be 0 or 1\n");
return;
}
cfg->trigger_mirror = val;
PluseGenerator_cfg_update();
printf("OK\n");
}
else if (strcmp(param, "cmd_echo") == 0) {
if (val != 0 && val != 1) {
printf("FAIL,cmd_echo should be 0 or 1\n");
return;
@ -107,12 +127,14 @@ void prv_process_uart_rx_data() {
const char *param = argc[1];
if (strcmp(param, "light_intensity") == 0) {
printf("OK,%ld\n", cfg->light_intensity);
} else if (strcmp(param, "pulse_width_us") == 0) {
printf("OK,%ld\n", cfg->pulse_width_us);
PluseGenerator_updatePraram();
} else if (strcmp(param, "pulse_interval_us") == 0) {
printf("OK,%ld\n", cfg->pulse_interval_us);
PluseGenerator_updatePraram();
} else if (strcmp(param, "pulse_width_x25ns") == 0) {
printf("OK,%ld\n", cfg->pulse_width_x25ns);
} else if (strcmp(param, "pulse_interval_x25ns") == 0) {
printf("OK,%ld\n", cfg->pulse_interval_x25ns);
} else if (strcmp(param, "shutter_delay_x25ns") == 0) {
printf("OK,%ld\n", cfg->shutter_delay_x25ns);
} else if (strcmp(param, "trigger_mirror") == 0) {
printf("OK,%ld\n", cfg->trigger_mirror);
} else if (strcmp(param, "cmd_echo") == 0) {
printf("OK,%ld\n", cfg->cmd_echo);
}
@ -136,8 +158,10 @@ void prv_process_uart_rx_data() {
config_t *cfg = config_get();
printf("------ param list ------\n");
printf(" light_intensity : %ld\n", cfg->light_intensity);
printf(" pulse_width_us : %ld\n", cfg->pulse_width_us);
printf(" pulse_interval_us : %ld\n", cfg->pulse_interval_us);
printf(" pulse_width_x25ns : %ld\n", cfg->pulse_width_x25ns);
printf(" pulse_interval_x25ns : %ld\n", cfg->pulse_interval_x25ns);
printf(" shutter_delay_x25ns : %ld\n", cfg->shutter_delay_x25ns);
printf(" trigger_mirror : %ld\n", cfg->trigger_mirror);
printf(" cmd_echo : %ld\n", cfg->cmd_echo);
}

Loading…
Cancel
Save