/** ****************************************************************************** * @file main.c * @author CAVAILLES, Kevin and GALLOIS, Leonie and GÜLDENSTEIN, Jasper and FOUSSATS, Morgane * @brief Main program body through the LL API ****************************************************************************** */ #include "stm32f1xx_ll_rcc.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_bus.h" #include "stm32f1xx_ll_cortex.h" #include "RFInput.h" #include "IncrEncoder.h" #include "DcMotor.h" #include "Sail.h" #include "Alimentation.h" #include "Accelerometer.h" #include "RFOutput.h" #include #define CONTROL_LOOP_PERIOD 250 #define MSG_TRANSFER_PERIOD 3000 void SystemClock_Config(void); /* Private functions ---------------------------------------------------------*/ // global variables for monitoring in keil int counter = 0; int battery_level_good = 0; int angle_roulis_good = 0; int angle_sail = 0; int RF_Input_Duty = 0; int TX_Flag = 0, CONTROL_LOOP_Flag = 0; float angle_incr_encoder = 0; char wait_for_girouette[] = "En attente d'initialisation de la girouette\r\n"; int dir = 5; int counter2 = 0; /** * @brief Main program * @param None * @retval None */ int main(void) { /* Configure the system clock to 72 MHz */ SystemClock_Config(); LL_SYSTICK_EnableIT(); ALIMENTATION_Init(); ACCELEROMETER_Init(); RF_INPUT_Init(); DC_MOTOR_Init(); SAIL_Init(); RF_OUTPUT_Init(); INCR_ENCODER_Init(); while(!INCR_ENCODER_IsAbsolute()) { RF_OUTPUT_SendBytes(wait_for_girouette, sizeof(wait_for_girouette)); LL_mDelay(500); } while (1) { if(CONTROL_LOOP_Flag){ battery_level_good = ALIMENTATION_IsLevelEnough(); angle_roulis_good = ACCELEROMETER_AngleGood(); if(!angle_roulis_good){ SAIL_SetAngle(90); DC_MOTOR_SetSpeed(0); }else{ angle_incr_encoder = INCR_ENCODER_GetAngle(); angle_sail = SAIL_AngleFromGirouette(angle_incr_encoder); SAIL_SetAngle(angle_sail); RF_Input_Duty = RF_INPUT_GetDutyTimeRelative(); DC_MOTOR_SetSpeed(RF_Input_Duty); } CONTROL_LOOP_Flag = 0; } if(TX_Flag){ RF_OUTPUT_SendMessage(angle_roulis_good, battery_level_good, angle_sail); TX_Flag = 0; } } // fully closed 85 // fully open 25 /* while(1){ if(counter2 == 90){ dir = -5; } if(counter2 == 0){ dir = 5; } SAIL_SetAngle(counter2); counter2 += dir;*/ //LL_mDelay(100); /* } */ /* while(1) { RF_Input_Duty = RF_INPUT_GetDutyTimeRelative(); }*/ } void SysTick_Handler(void) { if(counter % CONTROL_LOOP_PERIOD == 0){ CONTROL_LOOP_Flag = 1; } if(counter % MSG_TRANSFER_PERIOD == 0){ TX_Flag = 1; } counter = (counter+1) % (CONTROL_LOOP_PERIOD*MSG_TRANSFER_PERIOD) ; } /** * @brief System Clock Configuration * The system Clock is configured as follow : * System Clock source = PLL (HSE) * SYSCLK(Hz) = 72000000 * HCLK(Hz) = 72000000 * AHB Prescaler = 1 * APB1 Prescaler = 2 * APB2 Prescaler = 1 * HSE Frequency(Hz) = 8000000 * PLLMUL = 9 * Flash Latency(WS) = 2 * @param None * @retval None */ void SystemClock_Config(void) { /* Set FLASH latency */ LL_FLASH_SetLatency(LL_FLASH_LATENCY_2); // ********* Commenter la ligne ci-dessous pour MCBSTM32 ***************** // ********* Conserver la ligne si Nucléo********************************* //LL_RCC_HSE_EnableBypass(); LL_RCC_HSE_Enable(); while(LL_RCC_HSE_IsReady() != 1) { }; /* Main PLL configuration and activation */ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE_DIV_1, LL_RCC_PLL_MUL_9); LL_RCC_PLL_Enable(); while(LL_RCC_PLL_IsReady() != 1) { }; /* Sysclk activation on the main PLL */ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL); while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) { }; /* Set APB1 & APB2 prescaler*/ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2); LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1); /* Set systick to 1ms in using frequency set to 72MHz */ LL_Init1msTick(72000000); // utile lorsqu'on utilise la fonction LL_mDelay /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */ LL_SetSystemCoreClock(72000000); } /* ============== BOARD SPECIFIC CONFIGURATION CODE END ============== */ #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/