Browse Source

v1.0

ctrl_sig_generator_by_stm32
zhaohe 1 year ago
parent
commit
ae8a49680f
  1. 2
      .settings/com.st.stm32cube.ide.mcu.sfrview.prefs
  2. 3
      .vscode/settings.json
  3. 183
      Core/Src/main.c
  4. 74
      Core/Src/stm32f1xx_hal_msp.c
  5. 17
      README.md
  6. 67
      light_src_ctrl_stm32_port.ioc
  7. 6
      usrc/light_intensity_ctrl.c
  8. 2
      usrc/light_intensity_ctrl.h
  9. 99
      usrc/pluse_generator.c
  10. 13
      usrc/pluse_generator.h
  11. 11
      usrc/project_configs.h
  12. 17
      usrc/umain.c

2
.settings/com.st.stm32cube.ide.mcu.sfrview.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}}

3
.vscode/settings.json

@ -113,7 +113,8 @@
"features.h": "c",
"stdlib.h": "c",
"stm32f1xx_hal_def.h": "c",
"light_intensity_ctrl.h": "c"
"light_intensity_ctrl.h": "c",
"pluse_generator.h": "c"
},
"files.autoGuessEncoding": false,
"files.encoding": "gbk"

183
Core/Src/main.c

@ -40,9 +40,9 @@
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim5;
TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7;
TIM_HandleTypeDef htim8;
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
@ -59,7 +59,7 @@ static void MX_DMA_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM6_Init(void);
static void MX_TIM7_Init(void);
static void MX_TIM5_Init(void);
static void MX_TIM8_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@ -101,7 +101,7 @@ int main(void)
MX_USART1_UART_Init();
MX_TIM6_Init();
MX_TIM7_Init();
MX_TIM5_Init();
MX_TIM8_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@ -159,77 +159,6 @@ 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 = 71;
htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
htim5.Init.Period = 1000;
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();
}
if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_4) != 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
@ -287,7 +216,7 @@ static void MX_TIM7_Init(void)
htim7.Instance = TIM7;
htim7.Init.Prescaler = 71;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 1000;
htim7.Init.Period = 100;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
{
@ -306,6 +235,98 @@ static void MX_TIM7_Init(void)
}
/**
* @brief TIM8 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM8_Init(void)
{
/* USER CODE BEGIN TIM8_Init 0 */
/* USER CODE END TIM8_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
/* USER CODE BEGIN TIM8_Init 1 */
/* USER CODE END TIM8_Init 1 */
htim8.Instance = TIM8;
htim8.Init.Prescaler = 71;
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
htim8.Init.Period = 65535;
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim8.Init.RepetitionCounter = 0;
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim8) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OC_Init(&htim8) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_TIMING;
if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM8_Init 2 */
/* USER CODE END TIM8_Init 2 */
HAL_TIM_MspPostInit(&htim8);
}
/**
* @brief USART1 Initialization Function
* @param None
* @retval None
@ -389,12 +410,10 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PC13 PC0 PC1 PC2
PC3 PC4 PC5 PC6
PC7 PC8 PC9 PC10
PC3 PC4 PC5 PC10
PC11 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_13|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_9|GPIO_PIN_10
|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10
|GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
@ -410,9 +429,11 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : PA4 PA5 PA6 PA7
/*Configure GPIO pins : PA0 PA1 PA2 PA3
PA4 PA5 PA6 PA7
PA8 PA11 PA12 PA15 */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
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;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

74
Core/Src/stm32f1xx_hal_msp.c

@ -94,18 +94,7 @@ void HAL_MspInit(void)
*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
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)
if(htim_base->Instance==TIM6)
{
/* USER CODE BEGIN TIM6_MspInit 0 */
@ -130,33 +119,44 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM7_MspInit 1 */
}
else if(htim_base->Instance==TIM8)
{
/* USER CODE BEGIN TIM8_MspInit 0 */
/* USER CODE END TIM8_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM8_CLK_ENABLE();
/* USER CODE BEGIN TIM8_MspInit 1 */
/* USER CODE END TIM8_MspInit 1 */
}
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM5)
if(htim->Instance==TIM8)
{
/* USER CODE BEGIN TIM5_MspPostInit 0 */
/* USER CODE BEGIN TIM8_MspPostInit 0 */
/* USER CODE END TIM5_MspPostInit 0 */
/* USER CODE END TIM8_MspPostInit 0 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM5 GPIO Configuration
PA0-WKUP ------> TIM5_CH1
PA1 ------> TIM5_CH2
PA2 ------> TIM5_CH3
PA3 ------> TIM5_CH4
__HAL_RCC_GPIOC_CLK_ENABLE();
/**TIM8 GPIO Configuration
PC6 ------> TIM8_CH1
PC7 ------> TIM8_CH2
PC8 ------> TIM8_CH3
PC9 ------> TIM8_CH4
*/
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* USER CODE BEGIN TIM5_MspPostInit 1 */
/* USER CODE BEGIN TIM8_MspPostInit 1 */
/* USER CODE END TIM5_MspPostInit 1 */
/* USER CODE END TIM8_MspPostInit 1 */
}
}
@ -168,18 +168,7 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
*/
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
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)
if(htim_base->Instance==TIM6)
{
/* USER CODE BEGIN TIM6_MspDeInit 0 */
@ -204,6 +193,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM7_MspDeInit 1 */
}
else if(htim_base->Instance==TIM8)
{
/* USER CODE BEGIN TIM8_MspDeInit 0 */
/* USER CODE END TIM8_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM8_CLK_DISABLE();
/* USER CODE BEGIN TIM8_MspDeInit 1 */
/* USER CODE END TIM8_MspDeInit 1 */
}
}

17
README.md

@ -9,10 +9,19 @@ STM32
引脚分配:
灯光强度PWM4路输出:
TIM5_CH1:PA0
TIM5_CH2:PA1
TIM5_CH3:PA2
TIM5_CH4:PA3
TIM8_CH1:PC6
TIM8_CH2:PC7
TIM8_CH3:PC8
TIM8_CH4:PA9
输入捕获引脚:
PA7
输出引脚:
CH1:PA1
CH2:PA2
CH3:PA3
CH4:PA4
CH1|CH2|CH3|CH4 :PA5
```

67
light_src_ctrl_stm32_port.ioc

@ -32,9 +32,9 @@ Mcu.IP0=DMA
Mcu.IP1=NVIC
Mcu.IP2=RCC
Mcu.IP3=SYS
Mcu.IP4=TIM5
Mcu.IP5=TIM6
Mcu.IP6=TIM7
Mcu.IP4=TIM6
Mcu.IP5=TIM7
Mcu.IP6=TIM8
Mcu.IP7=USART1
Mcu.IPNb=8
Mcu.Name=STM32F103Z(C-D-E)Tx
@ -44,15 +44,15 @@ Mcu.Pin1=PC15-OSC32_OUT
Mcu.Pin10=PA13
Mcu.Pin11=PA14
Mcu.Pin12=VP_SYS_VS_tim4
Mcu.Pin13=VP_TIM5_VS_ClockSourceINT
Mcu.Pin14=VP_TIM6_VS_ClockSourceINT
Mcu.Pin15=VP_TIM7_VS_ClockSourceINT
Mcu.Pin13=VP_TIM6_VS_ClockSourceINT
Mcu.Pin14=VP_TIM7_VS_ClockSourceINT
Mcu.Pin15=VP_TIM8_VS_ClockSourceINT
Mcu.Pin2=OSC_IN
Mcu.Pin3=OSC_OUT
Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PA1
Mcu.Pin6=PA2
Mcu.Pin7=PA3
Mcu.Pin4=PC6
Mcu.Pin5=PC7
Mcu.Pin6=PC8
Mcu.Pin7=PC9
Mcu.Pin8=PA9
Mcu.Pin9=PA10
Mcu.PinsNb=16
@ -83,22 +83,22 @@ 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
PA3.Signal=S_TIM5_CH4
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PC14-OSC32_IN.Mode=LSE-External-Oscillator
PC14-OSC32_IN.Signal=RCC_OSC32_IN
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
PC6.Signal=S_TIM8_CH1
PC7.Signal=S_TIM8_CH2
PC8.Signal=S_TIM8_CH3
PC9.Signal=S_TIM8_CH4
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
@ -130,7 +130,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
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_TIM5_Init-TIM5-false-HAL-true
RCC.ADCFreqValue=36000000
RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2
@ -157,35 +157,34 @@ 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_TIM5_CH4.0=TIM5_CH4,PWM Generation4 CH4
SH.S_TIM5_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.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
TIM5.IPParameters=Prescaler,Period,AutoReloadPreload,Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4
TIM5.Period=1000
TIM5.Prescaler=71
SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1
SH.S_TIM8_CH1.ConfNb=1
SH.S_TIM8_CH2.0=TIM8_CH2,Output Compare2 CH2
SH.S_TIM8_CH2.ConfNb=1
SH.S_TIM8_CH3.0=TIM8_CH3,Output Compare3 CH3
SH.S_TIM8_CH3.ConfNb=1
SH.S_TIM8_CH4.0=TIM8_CH4,Output Compare4 CH4
SH.S_TIM8_CH4.ConfNb=1
TIM7.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM7.IPParameters=AutoReloadPreload,Prescaler,Period
TIM7.Period=1000
TIM7.Period=100
TIM7.Prescaler=71
TIM8.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM8.Channel-Output\ Compare2\ CH2=TIM_CHANNEL_2
TIM8.Channel-Output\ Compare3\ CH3=TIM_CHANNEL_3
TIM8.Channel-Output\ Compare4\ CH4=TIM_CHANNEL_4
TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
TIM8.IPParameters=Channel-PWM Generation1 CH1,Channel-Output Compare2 CH2,Channel-Output Compare3 CH3,Channel-Output Compare4 CH4,AutoReloadPreload,Prescaler
TIM8.Prescaler=71
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
VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT
VP_TIM8_VS_ClockSourceINT.Mode=Internal
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
board=custom
isbadioc=false

6
usrc/light_intensity_ctrl.c

@ -1,5 +1,6 @@
#include "light_intensity_ctrl.h"
#include "config_service.h"
extern TIM_HandleTypeDef LIGHT_INTENSITY_TIM;
static uint32_t m_light_intensity = 50;
@ -52,4 +53,9 @@ void LightIntensityCtrl_start() {
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_2));
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_3));
ZSTM32_CHECK(HAL_TIM_PWM_Start(m_htim, TIM_CHANNEL_4));
}
void LightIntensityCtrl_updatePraram() {
LightIntensityCtrl_setIntensity(config_get()->light_intensity);
LightIntensityCtrl_start();
}

2
usrc/light_intensity_ctrl.h

@ -18,6 +18,8 @@ void LightIntensityCtrl_setIntensity(uint32_t intensity);
uint32_t LightIntensityCtrl_getIntensity();
void LightIntensityCtrl_start();
void LightIntensityCtrl_updatePraram();
#ifdef __cplusplus
}
#endif

99
usrc/pluse_generator.c

@ -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;
}

13
usrc/pluse_generator.h

@ -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

11
usrc/project_configs.h

@ -16,7 +16,16 @@
#define PC_NVS_ENABLE 1
#define LIGHT_INTENSITY_TIM htim5
#define LIGHT_INTENSITY_TIM htim8
#define PLUSE_CTRL_TIMER htim7
#define PLUSE_TRIGGER PA7
#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
// =====================================================================
// =====================================================================

17
usrc/umain.c

@ -5,6 +5,7 @@
#include "config_service.h"
#include "light_intensity_ctrl.h"
#include "main.h"
#include "pluse_generator.h"
#include "zlib.h"
#define TAG "MAIN"
@ -15,19 +16,16 @@
/*******************************************************************************
* DECLEAR *
*******************************************************************************/
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
extern TIM_HandleTypeDef htim6;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern UART_HandleTypeDef huart1;
static uint8_t g_uart_rx_buf[128];
static uint32_t g_uart_rx_buf_index = 0;
static uint32_t g_count = 0;
void tim7_irq_trigger() { g_count++; }
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { g_uart_rx_buf_index = Size; }
void start_generat_wave() { HAL_TIM_Base_Start_IT(&htim7); }
bool uart_is_rxing(UART_HandleTypeDef *huart) { //
uint32_t uartstate = HAL_UART_GetState(huart);
@ -82,8 +80,7 @@ void prv_process_uart_rx_data() {
return;
}
cfg->pulse_width_ms = val;
LightIntensityCtrl_setIntensity(val);
LightIntensityCtrl_start();
LightIntensityCtrl_updatePraram();
printf("OK\n");
} else if (strcmp(param, "pulse_interval_ms") == 0) {
if (val > 100) {
@ -91,6 +88,8 @@ void prv_process_uart_rx_data() {
return;
}
cfg->pulse_interval_ms = val;
LightIntensityCtrl_updatePraram();
printf("OK\n");
} else if (strcmp(param, "cmd_echo") == 0) {
if (val != 0 && val != 1) {
@ -110,8 +109,10 @@ void prv_process_uart_rx_data() {
printf("OK,%ld\n", cfg->light_intensity);
} else if (strcmp(param, "pulse_width_ms") == 0) {
printf("OK,%ld\n", cfg->pulse_width_ms);
PluseGenerator_updatePraram();
} else if (strcmp(param, "pulse_interval_ms") == 0) {
printf("OK,%ld\n", cfg->pulse_interval_ms);
PluseGenerator_updatePraram();
} else if (strcmp(param, "cmd_echo") == 0) {
printf("OK,%ld\n", cfg->cmd_echo);
}
@ -158,6 +159,8 @@ void umain() {
LightIntensityCtrl_setIntensity(config_get()->light_intensity);
LightIntensityCtrl_start();
PluseGenerator_init();
while (true) {
/**
* @brief ½ÓÊÕ´®¿ÚÏûÏ¢²¢´¦Àí

Loading…
Cancel
Save