From 0934ae33ffd3d26653dcab06045e10f36e78d890 Mon Sep 17 00:00:00 2001 From: Mysteo91 Date: Mon, 31 Jul 2023 17:06:17 +0300 Subject: [PATCH] ---vl6180dr --- App/app.cpp | 16 +-- main_prog/Core/Inc/main.h | 2 - main_prog/Core/Inc/stm32g0xx_it.h | 1 + main_prog/Core/Inc/tim.h | 8 +- main_prog/Core/Src/gpio.c | 8 +- main_prog/Core/Src/main.cpp | 2 + main_prog/Core/Src/stm32g0xx_it.c | 16 ++- main_prog/Core/Src/tim.c | 169 +++++++++++++++++++++++++++--- main_prog/gm60.ioc | 31 ++++-- 9 files changed, 217 insertions(+), 36 deletions(-) diff --git a/App/app.cpp b/App/app.cpp index cba2f0f..fe2360a 100644 --- a/App/app.cpp +++ b/App/app.cpp @@ -80,21 +80,23 @@ uint8_t updateMode = 0; void zummerOff (void) { - HAL_TIM_Base_Stop(&htim3); - HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2); + HAL_TIM_Base_Stop(&htimZummer); + HAL_TIM_PWM_Stop(&htimZummer, TIM_CHANNEL_2); } void zummerOn (void) { - HAL_TIM_Base_Start(&htim3); - HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); + HAL_TIM_Base_Start(&htimZummer); + HAL_TIM_PWM_Start(&htimZummer, TIM_CHANNEL_2); } void lightingOn (void) { - HAL_GPIO_WritePin(LIGHTING_EN_GPIO_Port, LIGHTING_EN_Pin, GPIO_PIN_SET); + HAL_TIM_Base_Start(&htimLighitng); + HAL_TIM_PWM_Start(&htimLighitng, TIM_CHANNEL_1); } void lightingOff (void) { - HAL_GPIO_WritePin(LIGHTING_EN_GPIO_Port, LIGHTING_EN_Pin, GPIO_PIN_RESET); + HAL_TIM_Base_Stop(&htimLighitng); + HAL_TIM_PWM_Stop(&htimLighitng, TIM_CHANNEL_1); } uint8_t proximityCompleteMessure = 0; @@ -146,7 +148,7 @@ void AppTask(void) { } - if (HAL_GetTick() - lightStartMs >= 10000) + if (HAL_GetTick() - lightStartMs >= 10000 && lightStartMs > 0) { lightStartMs = 0; lightingOff(); diff --git a/main_prog/Core/Inc/main.h b/main_prog/Core/Inc/main.h index adb10fc..8f518f7 100644 --- a/main_prog/Core/Inc/main.h +++ b/main_prog/Core/Inc/main.h @@ -61,8 +61,6 @@ void Error_Handler(void); #define GPIO_RESET_Pin GPIO_PIN_1 #define GPIO_RESET_GPIO_Port GPIOA #define GPIO_RESET_EXTI_IRQn EXTI0_1_IRQn -#define LIGHTING_EN_Pin GPIO_PIN_4 -#define LIGHTING_EN_GPIO_Port GPIOA #define READER_EN_Pin GPIO_PIN_5 #define READER_EN_GPIO_Port GPIOA #define CS_PROXIMITY_Pin GPIO_PIN_8 diff --git a/main_prog/Core/Inc/stm32g0xx_it.h b/main_prog/Core/Inc/stm32g0xx_it.h index aba87cd..91a1832 100644 --- a/main_prog/Core/Inc/stm32g0xx_it.h +++ b/main_prog/Core/Inc/stm32g0xx_it.h @@ -53,6 +53,7 @@ void SVC_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void EXTI0_1_IRQHandler(void); +void TIM16_IRQHandler(void); void USART1_IRQHandler(void); void USART2_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/main_prog/Core/Inc/tim.h b/main_prog/Core/Inc/tim.h index 14d2464..de8dfcc 100644 --- a/main_prog/Core/Inc/tim.h +++ b/main_prog/Core/Inc/tim.h @@ -32,13 +32,19 @@ extern "C" { /* USER CODE END Includes */ -extern TIM_HandleTypeDef htim3; +extern TIM_HandleTypeDef htimZummer; + +extern TIM_HandleTypeDef htimLighitng; + +extern TIM_HandleTypeDef htimSecTimer; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_TIM3_Init(void); +void MX_TIM14_Init(void); +void MX_TIM16_Init(void); void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); diff --git a/main_prog/Core/Src/gpio.c b/main_prog/Core/Src/gpio.c index 1dad105..a4c73d9 100644 --- a/main_prog/Core/Src/gpio.c +++ b/main_prog/Core/Src/gpio.c @@ -50,7 +50,7 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, LIGHTING_EN_Pin|READER_EN_Pin|CS_PROXIMITY_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOA, READER_EN_Pin|CS_PROXIMITY_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : PA0 */ GPIO_InitStruct.Pin = GPIO_PIN_0; @@ -64,8 +64,8 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIO_RESET_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PAPin PAPin PAPin */ - GPIO_InitStruct.Pin = LIGHTING_EN_Pin|READER_EN_Pin|CS_PROXIMITY_Pin; + /*Configure GPIO pins : PAPin PAPin */ + GPIO_InitStruct.Pin = READER_EN_Pin|CS_PROXIMITY_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; @@ -74,7 +74,7 @@ void MX_GPIO_Init(void) /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = CONTROL_PIN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(CONTROL_PIN_GPIO_Port, &GPIO_InitStruct); /* EXTI interrupt init*/ diff --git a/main_prog/Core/Src/main.cpp b/main_prog/Core/Src/main.cpp index e347418..9fcc554 100644 --- a/main_prog/Core/Src/main.cpp +++ b/main_prog/Core/Src/main.cpp @@ -110,6 +110,8 @@ int main(void) { MX_GPIO_Init(); MX_I2C2_Init(); MX_TIM3_Init(); + MX_TIM14_Init(); + MX_TIM16_Init(); /* USER CODE BEGIN 2 */ /* Initialize the user program application. */ AppInit(); diff --git a/main_prog/Core/Src/stm32g0xx_it.c b/main_prog/Core/Src/stm32g0xx_it.c index 2d6aad6..238f057 100644 --- a/main_prog/Core/Src/stm32g0xx_it.c +++ b/main_prog/Core/Src/stm32g0xx_it.c @@ -56,6 +56,7 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ +extern TIM_HandleTypeDef htimSecTimer; /* USER CODE BEGIN EV */ @@ -154,10 +155,23 @@ void EXTI0_1_IRQHandler(void) /* USER CODE END EXTI0_1_IRQn 1 */ } +/** + * @brief This function handles TIM16 global interrupt. + */ +void TIM16_IRQHandler(void) +{ + /* USER CODE BEGIN TIM16_IRQn 0 */ + + /* USER CODE END TIM16_IRQn 0 */ + HAL_TIM_IRQHandler(&htimSecTimer); + /* USER CODE BEGIN TIM16_IRQn 1 */ + + /* USER CODE END TIM16_IRQn 1 */ +} + /** * @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25. */ - /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/main_prog/Core/Src/tim.c b/main_prog/Core/Src/tim.c index 6f9def6..b83ccbc 100644 --- a/main_prog/Core/Src/tim.c +++ b/main_prog/Core/Src/tim.c @@ -24,7 +24,9 @@ /* USER CODE END 0 */ -TIM_HandleTypeDef htim3; +TIM_HandleTypeDef htimZummer; +TIM_HandleTypeDef htimLighitng; +TIM_HandleTypeDef htimSecTimer; /* TIM3 init function */ void MX_TIM3_Init(void) @@ -41,28 +43,28 @@ void MX_TIM3_Init(void) /* USER CODE BEGIN TIM3_Init 1 */ /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 0; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 21332; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) + htimZummer.Instance = TIM3; + htimZummer.Init.Prescaler = 0; + htimZummer.Init.CounterMode = TIM_COUNTERMODE_UP; + htimZummer.Init.Period = 21332; + htimZummer.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htimZummer.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htimZummer) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) + if (HAL_TIM_ConfigClockSource(&htimZummer, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) + if (HAL_TIM_PWM_Init(&htimZummer) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + if (HAL_TIMEx_MasterConfigSynchronization(&htimZummer, &sMasterConfig) != HAL_OK) { Error_Handler(); } @@ -70,14 +72,82 @@ void MX_TIM3_Init(void) sConfigOC.Pulse = 10616; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + if (HAL_TIM_PWM_ConfigChannel(&htimZummer, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM3_Init 2 */ /* USER CODE END TIM3_Init 2 */ - HAL_TIM_MspPostInit(&htim3); + HAL_TIM_MspPostInit(&htimZummer); + +} +/* TIM14 init function */ +void MX_TIM14_Init(void) +{ + + /* USER CODE BEGIN TIM14_Init 0 */ + + /* USER CODE END TIM14_Init 0 */ + + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM14_Init 1 */ + + /* USER CODE END TIM14_Init 1 */ + htimLighitng.Instance = TIM14; + htimLighitng.Init.Prescaler = 1; + htimLighitng.Init.CounterMode = TIM_COUNTERMODE_UP; + htimLighitng.Init.Period = 63999; + htimLighitng.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htimLighitng.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htimLighitng) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htimLighitng) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 32000; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htimLighitng, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM14_Init 2 */ + + /* USER CODE END TIM14_Init 2 */ + HAL_TIM_MspPostInit(&htimLighitng); + +} +/* TIM16 init function */ +void MX_TIM16_Init(void) +{ + + /* USER CODE BEGIN TIM16_Init 0 */ + + /* USER CODE END TIM16_Init 0 */ + + /* USER CODE BEGIN TIM16_Init 1 */ + + /* USER CODE END TIM16_Init 1 */ + htimSecTimer.Instance = TIM16; + htimSecTimer.Init.Prescaler = 999; + htimSecTimer.Init.CounterMode = TIM_COUNTERMODE_UP; + htimSecTimer.Init.Period = 63999; + htimSecTimer.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htimSecTimer.Init.RepetitionCounter = 0; + htimSecTimer.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htimSecTimer) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM16_Init 2 */ + + /* USER CODE END TIM16_Init 2 */ } @@ -95,6 +165,32 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspInit 1 */ } + else if(tim_baseHandle->Instance==TIM14) + { + /* USER CODE BEGIN TIM14_MspInit 0 */ + + /* USER CODE END TIM14_MspInit 0 */ + /* TIM14 clock enable */ + __HAL_RCC_TIM14_CLK_ENABLE(); + /* USER CODE BEGIN TIM14_MspInit 1 */ + + /* USER CODE END TIM14_MspInit 1 */ + } + else if(tim_baseHandle->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspInit 0 */ + + /* USER CODE END TIM16_MspInit 0 */ + /* TIM16 clock enable */ + __HAL_RCC_TIM16_CLK_ENABLE(); + + /* TIM16 interrupt Init */ + HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM16_IRQn); + /* USER CODE BEGIN TIM16_MspInit 1 */ + + /* USER CODE END TIM16_MspInit 1 */ + } } void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) { @@ -105,7 +201,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) /* USER CODE BEGIN TIM3_MspPostInit 0 */ /* USER CODE END TIM3_MspPostInit 0 */ - __HAL_RCC_GPIOB_CLK_ENABLE(); /**TIM3 GPIO Configuration PB5 ------> TIM3_CH2 @@ -121,6 +216,27 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) /* USER CODE END TIM3_MspPostInit 1 */ } + else if(timHandle->Instance==TIM14) + { + /* USER CODE BEGIN TIM14_MspPostInit 0 */ + + /* USER CODE END TIM14_MspPostInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM14 GPIO Configuration + PA4 ------> TIM14_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_TIM14; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM14_MspPostInit 1 */ + + /* USER CODE END TIM14_MspPostInit 1 */ + } } @@ -138,6 +254,31 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) /* USER CODE END TIM3_MspDeInit 1 */ } + else if(tim_baseHandle->Instance==TIM14) + { + /* USER CODE BEGIN TIM14_MspDeInit 0 */ + + /* USER CODE END TIM14_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM14_CLK_DISABLE(); + /* USER CODE BEGIN TIM14_MspDeInit 1 */ + + /* USER CODE END TIM14_MspDeInit 1 */ + } + else if(tim_baseHandle->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspDeInit 0 */ + + /* USER CODE END TIM16_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM16_CLK_DISABLE(); + + /* TIM16 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM16_IRQn); + /* USER CODE BEGIN TIM16_MspDeInit 1 */ + + /* USER CODE END TIM16_MspDeInit 1 */ + } } /* USER CODE BEGIN 1 */ diff --git a/main_prog/gm60.ioc b/main_prog/gm60.ioc index 041a78b..b04e7ff 100644 --- a/main_prog/gm60.ioc +++ b/main_prog/gm60.ioc @@ -14,9 +14,11 @@ Mcu.IP1=NVIC Mcu.IP2=RCC Mcu.IP3=SYS Mcu.IP4=TIM3 -Mcu.IP5=USART1 -Mcu.IP6=USART2 -Mcu.IPNb=7 +Mcu.IP5=TIM14 +Mcu.IP6=TIM16 +Mcu.IP7=USART1 +Mcu.IP8=USART2 +Mcu.IPNb=9 Mcu.Name=STM32G070CBTx Mcu.Package=LQFP48 Mcu.Pin0=PF0-OSC_IN (PF0) @@ -32,6 +34,8 @@ Mcu.Pin17=VP_SYS_VS_Systick Mcu.Pin18=VP_SYS_VS_DBSignals Mcu.Pin19=VP_TIM3_VS_ClockSourceINT Mcu.Pin2=PA0 +Mcu.Pin20=VP_TIM14_VS_ClockSourceINT +Mcu.Pin21=VP_TIM16_VS_ClockSourceINT Mcu.Pin3=PA1 Mcu.Pin4=PA2 Mcu.Pin5=PA3 @@ -39,7 +43,7 @@ Mcu.Pin6=PA4 Mcu.Pin7=PA5 Mcu.Pin8=PA8 Mcu.Pin9=PA11 [PA9] -Mcu.PinsNb=20 +Mcu.PinsNb=22 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32G070CBTx @@ -52,6 +56,7 @@ NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false +NVIC.TIM16_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true PA0.Locked=true @@ -76,10 +81,8 @@ PA2.Mode=Asynchronous PA2.Signal=USART2_TX PA3.Mode=Asynchronous PA3.Signal=USART2_RX -PA4.GPIOParameters=GPIO_Label -PA4.GPIO_Label=LIGHTING_EN PA4.Locked=true -PA4.Signal=GPIO_Output +PA4.Signal=S_TIM14_CH1 PA5.GPIOParameters=GPIO_Label PA5.GPIO_Label=READER_EN PA5.Locked=true @@ -167,8 +170,18 @@ SH.GPXTI0.0=GPIO_EXTI0 SH.GPXTI0.ConfNb=1 SH.GPXTI1.0=GPIO_EXTI1 SH.GPXTI1.ConfNb=1 +SH.S_TIM14_CH1.0=TIM14_CH1,PWM Generation1 CH1 +SH.S_TIM14_CH1.ConfNb=1 SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2 SH.S_TIM3_CH2.ConfNb=1 +TIM14.Channel=TIM_CHANNEL_1 +TIM14.IPParameters=Channel,Period,Pulse,Prescaler +TIM14.Period=63999 +TIM14.Prescaler=1 +TIM14.Pulse=32000 +TIM16.IPParameters=Prescaler,Period +TIM16.Period=63999 +TIM16.Prescaler=999 TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM3.IPParameters=Channel-PWM Generation2 CH2,Period,Pulse-PWM Generation2 CH2 TIM3.Period=21332 @@ -184,6 +197,10 @@ VP_SYS_VS_DBSignals.Mode=DisableDeadBatterySignals VP_SYS_VS_DBSignals.Signal=SYS_VS_DBSignals VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT +VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT VP_TIM3_VS_ClockSourceINT.Mode=Internal VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT board=custom