3 Commits

Author SHA1 Message Date
17693c613d 3 hours for auto switch mode... 2023-02-05 23:45:20 +03:00
e33492f758 Auto mode switch implemented 2023-02-05 04:11:21 +03:00
efc6bbac57 Migrated to CubeMX 6.7.0 2023-02-05 03:00:13 +03:00
9 changed files with 127 additions and 20 deletions

View File

@@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="850088046207466902" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1286525123081337909" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="850088046207466902" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1286525123081337909" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

View File

@@ -1,5 +1,5 @@
2F62501ED4689FB349E356AB974DBE57=21199337FF9A43F284E3F1D2D8FD54CB
2F62501ED4689FB349E356AB974DBE57=AFD13C4B06905FBE2819ADF440D25B54
66BE74F758C12D739921AEA421D593D3=1
8DF89ED150041C4CBC7CB9A9CAA90856=21199337FF9A43F284E3F1D2D8FD54CB
DC22A860405A8BF2F2C095E5B6529F12=E2C87B0188BCB640F2723FFDDA019FEC
8DF89ED150041C4CBC7CB9A9CAA90856=AFD13C4B06905FBE2819ADF440D25B54
DC22A860405A8BF2F2C095E5B6529F12=988A9CFA64D5B95AA1BEA90B0F7EEDFE
eclipse.preferences.version=1

View File

@@ -71,6 +71,7 @@ void Error_Handler(void);
#define Sens_SCL_GPIO_Port GPIOB
#define Sens_SDA_Pin GPIO_PIN_7
#define Sens_SDA_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */

View File

@@ -53,6 +53,7 @@ void PendSV_Handler(void);
void SysTick_Handler(void);
void EXTI0_1_IRQHandler(void);
void EXTI4_15_IRQHandler(void);
void TIM14_IRQHandler(void);
void TIM16_IRQHandler(void);
void TIM17_IRQHandler(void);
/* USER CODE BEGIN EFP */

View File

@@ -65,6 +65,8 @@ typedef enum DLMode_t_enum {
#define CONF_FLASH_ADDR ((uint32_t)0x0800F800) //FLASH address of the page to save configuration to
#define CONF_FLASH_PAGE 31 //FLASH page number (from 0 to PgCount-1)
#define AUTO_SWITCH_TIME 10800 //Time in seconds to auto switch to normal mode from manual_off mode 10800 = 3 hours
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@@ -78,6 +80,7 @@ CRC_HandleTypeDef hcrc;
I2C_HandleTypeDef hi2c1;
TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim14;
TIM_HandleTypeDef htim16;
TIM_HandleTypeDef htim17;
@@ -101,6 +104,7 @@ int8_t dLevel = 1; // Direction of fade: -1 for fade out; 1 for fade in
DLMode_t DLmode = DL_normal; // Global mode: DL_normal, DL_manual_on, DL_manual_off, DL_need_config, DL_config_waiting, DL_config_accepted, DL_error
DLMode_t prev_mode = DL_normal; // To hold the mode during temporary mode switches
uint8_t modeSwitch = 0; // Flag to switch the mode after the button tap
uint16_t autoSwitchTime = 0; // Time counter until mode auto switch
/* USER CODE END PV */
@@ -112,6 +116,7 @@ static void MX_TIM3_Init(void);
static void MX_TIM17_Init(void);
static void MX_CRC_Init(void);
static void MX_TIM16_Init(void);
static void MX_TIM14_Init(void);
/* USER CODE BEGIN PFP */
volatile void loadConfig(void); // Load configuration from the FLASH memory
@@ -281,9 +286,11 @@ int main(void)
MX_TIM17_Init();
MX_CRC_Init();
MX_TIM16_Init();
MX_TIM14_Init();
/* USER CODE BEGIN 2 */
// TIM3 - PWM timer
// TIM14 - to measure time for mode auto switch (1Hz)
// TIM16 - ticks timer (10Hz - 100ms)
// TIM17 - timer for light fading
@@ -331,13 +338,15 @@ int main(void)
DLmode = DL_manual_on;
fastBlink(1);
dLevel = 2;
HAL_TIM_Base_Start_IT(&htim17);
HAL_TIM_Base_Start_IT(&htim17); // Rise up the light
break;
case DL_manual_on:
DLmode = DL_manual_off;
fastBlink(1);
dLevel = -1;
HAL_TIM_Base_Start_IT(&htim17);
HAL_TIM_Base_Start_IT(&htim17); // Fade out the light
autoSwitchTime = AUTO_SWITCH_TIME;
HAL_TIM_Base_Start_IT(&htim14); // Start counting OFF time
break;
case DL_manual_off:
DLmode = DL_normal;
@@ -540,6 +549,37 @@ static void MX_TIM3_Init(void)
}
/**
* @brief TIM14 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM14_Init(void)
{
/* USER CODE BEGIN TIM14_Init 0 */
/* USER CODE END TIM14_Init 0 */
/* USER CODE BEGIN TIM14_Init 1 */
/* USER CODE END TIM14_Init 1 */
htim14.Instance = TIM14;
htim14.Init.Prescaler = 6400-1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 10000-1;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM14_Init 2 */
/* USER CODE END TIM14_Init 2 */
}
/**
* @brief TIM16 Initialization Function
* @param None
@@ -659,6 +699,7 @@ volatile void setLightLevel(uint8_t level) {
}
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) {
// Button has been pressed
// Start counting "ticks" when the sense-button is pressed
if (GPIO_Pin == Btn_INT_Pin) {
btn_ticks = 0;
@@ -724,6 +765,16 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
setLightLevel(curLightLevel);
}
}
// Mode auto-switch time counter
if (htim->Instance == TIM14) { //check if the interrupt comes from TIM14 // TIM14 - to measure time for mode auto switch (1Hz)
if (autoSwitchTime > 0) {
autoSwitchTime--;
} else {
modeSwitch = 1;
HAL_TIM_Base_Stop_IT(&htim14);
}
}
}
/* USER CODE END 4 */

View File

@@ -218,6 +218,20 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM3_MspInit 1 */
}
else if(htim_base->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspInit 0 */
/* USER CODE END TIM14_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM14_CLK_ENABLE();
/* TIM14 interrupt Init */
HAL_NVIC_SetPriority(TIM14_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM14_IRQn);
/* USER CODE BEGIN TIM14_MspInit 1 */
/* USER CODE END TIM14_MspInit 1 */
}
else if(htim_base->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspInit 0 */
@@ -294,6 +308,20 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM3_MspDeInit 1 */
}
else if(htim_base->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspDeInit 0 */
/* USER CODE END TIM14_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM14_CLK_DISABLE();
/* TIM14 interrupt DeInit */
HAL_NVIC_DisableIRQ(TIM14_IRQn);
/* USER CODE BEGIN TIM14_MspDeInit 1 */
/* USER CODE END TIM14_MspDeInit 1 */
}
else if(htim_base->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspDeInit 0 */

View File

@@ -55,6 +55,7 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim14;
extern TIM_HandleTypeDef htim16;
extern TIM_HandleTypeDef htim17;
/* USER CODE BEGIN EV */
@@ -169,6 +170,20 @@ void EXTI4_15_IRQHandler(void)
/* USER CODE END EXTI4_15_IRQn 1 */
}
/**
* @brief This function handles TIM14 global interrupt.
*/
void TIM14_IRQHandler(void)
{
/* USER CODE BEGIN TIM14_IRQn 0 */
/* USER CODE END TIM14_IRQn 0 */
HAL_TIM_IRQHandler(&htim14);
/* USER CODE BEGIN TIM14_IRQn 1 */
/* USER CODE END TIM14_IRQn 1 */
}
/**
* @brief This function handles TIM16 global interrupt.
*/

View File

@@ -1,4 +1,7 @@
#MicroXplorer Configuration settings - do not modify
CAD.formats=
CAD.pinconfig=
CAD.provider=
File.Version=6
GPIO.groupedBy=Group By Peripherals
I2C1.I2C_Speed_Mode=I2C_Standard
@@ -13,16 +16,18 @@ Mcu.IP2=NVIC
Mcu.IP3=RCC
Mcu.IP4=SYS
Mcu.IP5=TIM3
Mcu.IP6=TIM16
Mcu.IP7=TIM17
Mcu.IPNb=8
Mcu.IP6=TIM14
Mcu.IP7=TIM16
Mcu.IP8=TIM17
Mcu.IPNb=9
Mcu.Name=STM32G031G(4-6-8)Ux
Mcu.Package=UFQFPN28
Mcu.Pin0=PA0
Mcu.Pin1=PC6
Mcu.Pin10=VP_TIM3_VS_ClockSourceINT
Mcu.Pin11=VP_TIM16_VS_ClockSourceINT
Mcu.Pin12=VP_TIM17_VS_ClockSourceINT
Mcu.Pin11=VP_TIM14_VS_ClockSourceINT
Mcu.Pin12=VP_TIM16_VS_ClockSourceINT
Mcu.Pin13=VP_TIM17_VS_ClockSourceINT
Mcu.Pin2=PA13
Mcu.Pin3=PA14-BOOT0
Mcu.Pin4=PB4
@@ -31,12 +36,12 @@ Mcu.Pin6=PB6
Mcu.Pin7=PB7
Mcu.Pin8=VP_CRC_VS_CRC
Mcu.Pin9=VP_SYS_VS_Systick
Mcu.PinsNb=13
Mcu.PinsNb=14
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32G031G8Ux
MxCube.Version=6.6.1
MxDb.Version=DB.6.0.60
MxCube.Version=6.7.0
MxDb.Version=DB.6.0.70
NVIC.EXTI0_1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI4_15_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
@@ -45,6 +50,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.TIM14_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM16_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM17_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
PA0.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
@@ -106,7 +112,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_I2C1_Init-I2C1-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM17_Init-TIM17-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_TIM16_Init-TIM16-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_I2C1_Init-I2C1-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM17_Init-TIM17-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_TIM16_Init-TIM16-false-HAL-true
RCC.ADCFreq_Value=64000000
RCC.AHBFreq_Value=64000000
RCC.APBFreq_Value=64000000
@@ -144,6 +150,9 @@ SH.GPXTI5.0=GPIO_EXTI5
SH.GPXTI5.ConfNb=1
SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
SH.S_TIM3_CH1.ConfNb=1
TIM14.IPParameters=Prescaler,Period
TIM14.Period=10000-1
TIM14.Prescaler=6400-1
TIM16.IPParameters=Prescaler,Period
TIM16.Period=10000-1
TIM16.Prescaler=640-1
@@ -160,6 +169,8 @@ VP_CRC_VS_CRC.Mode=CRC_Activate
VP_CRC_VS_CRC.Signal=CRC_VS_CRC
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_TIM17_VS_ClockSourceINT.Mode=Enable_Timer