diff --git a/APP/businessLogic/Inc/SOE.h b/APP/businessLogic/Inc/SOE.h index f494469..364c70d 100644 --- a/APP/businessLogic/Inc/SOE.h +++ b/APP/businessLogic/Inc/SOE.h @@ -12,6 +12,8 @@ void eventsOrderRecordStartInit(void); void setEventsOrderRecord(void); void readEventsOrderRecord(uint16_t offset, uint8_t *data); void insertEventsOrderRecord(eventsOrderRecordMode mode); +void cleanEventsOrderRecord(void); + uint16_t getSoeDataInfoSize(void); diff --git a/APP/businessLogic/Inc/bl_usart.h b/APP/businessLogic/Inc/bl_usart.h index 8f55528..c280148 100644 --- a/APP/businessLogic/Inc/bl_usart.h +++ b/APP/businessLogic/Inc/bl_usart.h @@ -10,7 +10,7 @@ /* SL协议读取寄存器最大地址 */ -#define maxReadRegAddrMacro 0x0120 +#define maxReadRegAddrMacro 0x0150 /* SL协议读取寄存器最小地址 */ #define minReadRegAddrMacro 0x0100 /* SL协议读取寄存器最大长度 */ @@ -18,7 +18,7 @@ /* SL协议写入寄存器最大地址 */ -#define maxWriteRegAddrMacro 0x0120 +#define maxWriteRegAddrMacro 0x0150 /* SL协议写入寄存器最小地址 */ #define minWriteRegAddrMacro 0x0100 /* SL协议写入寄存器最大长度 */ diff --git a/APP/businessLogic/Src/SOE.c b/APP/businessLogic/Src/SOE.c index 0ad82c6..461cd4d 100644 --- a/APP/businessLogic/Src/SOE.c +++ b/APP/businessLogic/Src/SOE.c @@ -171,14 +171,23 @@ void setEventsOrderRecord(void) return; } - write_Flash((uint8_t *)(&soeInfo.outData), soeParameters.pos, soeDataInfoSize); + write_Flash((uint8_t *)(soeInfo.outData), soeParameters.pos, soeDataInfoSize); + // read_Flash((uint8_t *)(soeInfo.outData), eventsOrderRecordStartAddr, sizeof(soeStorageParameters)); + + // debug_printf("mode = %d \n", soeInfo.outData->mode); + // debug_printf("year = %d \n", soeInfo.outData->time.year); + // debug_printf("month = %d \n", soeInfo.outData->time.month); + // debug_printf("day = %d \n", soeInfo.outData->time.day); + // debug_printf("hour = %d \n", soeInfo.outData->time.hour); + // debug_printf("minute = %d \n", soeInfo.outData->time.minute); + // debug_printf("second = %d \n", soeInfo.outData->time.second); soeParameters.len++; if (soeParameters.len >= 100) { soeParameters.len = 0; } soeParameters.pos += soeDataInfoSize; - write_Flash((uint8_t *)(&soeParameters), eventsOrderRecordStartAddr, sizeof(soeStorageParameters)); + write_Flash((uint8_t *)(&soeParameters), eventsOrderRecordStartAddr, sizeof(soeStorageParameters)); soeInfo.outPos++; if (soeInfo.outPos >= 5) { @@ -207,15 +216,26 @@ void readEventsOrderRecord(uint16_t offset, uint8_t *data) { uint16_t addr; - if (soeParameters.len + 1 - offset < 0) { + if (soeParameters.len - offset < 0) { addr = eventsOrderRecordStartAddr + sizeof(soeStorageParameters) - + (100 + soeParameters.len + 1 - offset) * soeDataInfoSize; + + (100 + soeParameters.len - offset) * soeDataInfoSize; } else { addr = eventsOrderRecordStartAddr + sizeof(soeStorageParameters) - + (soeParameters.len + 1 - offset) * soeDataInfoSize; + + (soeParameters.len - offset) * soeDataInfoSize; } read_Flash(data, addr, soeDataInfoSize); } +/** + * @brief 清除SOE所有事件 + * @param + */ +void cleanEventsOrderRecord(void) +{ + erase_Sector_Flash((eventsOrderRecordStartAddr / 4096)); + soeParameters.len = 0; + soeParameters.pos = eventsOrderRecordStartAddr + sizeof(soeParameters); + write_Flash((uint8_t *)(&soeParameters), eventsOrderRecordStartAddr, sizeof(soeParameters)); +} diff --git a/APP/businessLogic/Src/bl_usart.c b/APP/businessLogic/Src/bl_usart.c index 95a8f28..77dffe1 100644 --- a/APP/businessLogic/Src/bl_usart.c +++ b/APP/businessLogic/Src/bl_usart.c @@ -9,6 +9,8 @@ #include "interruptSend.h" #include "inFlash.h" #include "SOE.h" +#include "FM_RTC.h" +#include "SOE.h" /* 状态机 */ typedef enum { @@ -53,7 +55,7 @@ typedef enum SL_Register_Solar_Open_Circuit_Voltage = 0x0100, /* 太阳能开路电压 */ SL_Register_Solar_Input_Voltage = 0x0101, /* 太阳能输入电压 */ - SL_Register_Output_Voltage = 0x0102, /* 电池电压 */ + SL_Register_Output_Voltage = 0x0102, /* 输出电压 */ SL_Register_Battery_Voltage = 0x0103, /* 电池电压 */ SL_Register_Charg_Current = 0x0104, /* 充电电流(流向电池+负载) */ SL_Register_Discharg_Current = 0x0105, /* 放电电流(流向负载) */ @@ -63,8 +65,12 @@ typedef enum SL_Register_totalChargCapacity = 0x0109, /* 总充电量 */ SL_Register_totalElectricityConsumption = 0x010A, /* 总放电量 */ SL_Register_MPPT_Mode = 0x010B, /* 工作模式 */ - SL_Register_eliminateStatistical = 0x010C, /* 消除统计 */ - SL_Register_Charg_Control = 0x010D, /* 充电控制 */ + SL_Register_eliminateStatistical = 0x0120, /* 消除统计 */ + SL_Register_Charg_Control = 0x0121, /* 充电控制 */ + SL_Register_Clean_SOE = 0x0122, /* 清除SOE */ + SL_Register_YearMonth = 0x0130, /* rtc时钟校准-年月 */ + SL_Register_DayHour = 0x0131, /* rtc时钟校准-日时 */ + SL_Register_MinuteSecond = 0x0132, /* rtc时钟校准-分秒 */ }SL_Mppt_MsgRegister; /* 配置文件数据类型表 */ @@ -155,9 +161,16 @@ static uint16_t SL_ReadRegisterChargState(void *pMsg); static uint16_t SL_ReadRegisterTotalChargCapacity(void *pMsg); static uint16_t SL_ReadRegisterTotalElectricityConsumption(void *pMsg); static uint16_t SL_ReadRegisterMPPT_Mode(void *pMsg); +static uint16_t SL_ReadRegisterYearMonth(void *pMsg); +static uint16_t SL_ReadRegisterDayHour(void *pMsg); +static uint16_t SL_ReadRegisterMinuteSecond(void *pMsg); static uint16_t SL_WriteRegisterEliminateStatistical(void *pMsg); static uint16_t SL_WriteRegisterChargControl(void *pMsg); +static uint16_t SL_WriteRegisterCleanSOE(void *pMsg); +static uint16_t SL_WriteRegisterYearMonth(void *pMsg); +static uint16_t SL_WriteRegisterDayHour(void *pMsg); +static uint16_t SL_WriteRegisterMinuteSecond(void *pMsg); /* 寄存器处理表 */ typedef uint16_t (*RegProcFunc)(void*); @@ -185,6 +198,9 @@ SL_RegProcTable g_RegTblR[] = {SL_Register_totalChargCapacity, SL_ReadRegisterTotalChargCapacity}, {SL_Register_totalElectricityConsumption, SL_ReadRegisterTotalElectricityConsumption}, {SL_Register_MPPT_Mode, SL_ReadRegisterMPPT_Mode}, + {SL_Register_YearMonth, SL_ReadRegisterYearMonth}, + {SL_Register_DayHour, SL_ReadRegisterDayHour}, + {SL_Register_MinuteSecond, SL_ReadRegisterMinuteSecond}, }; /* 寄存器处理表 */ @@ -196,6 +212,10 @@ SL_RegProcTable g_RegTblW[] = // {SL_Register_Communication_Methods, SL_WriteRegisterCommunicationMethods}, {SL_Register_eliminateStatistical, SL_WriteRegisterEliminateStatistical}, {SL_Register_Charg_Control, SL_WriteRegisterChargControl}, + {SL_Register_Clean_SOE, SL_WriteRegisterCleanSOE}, + {SL_Register_YearMonth, SL_WriteRegisterYearMonth}, + {SL_Register_DayHour, SL_WriteRegisterDayHour}, + {SL_Register_MinuteSecond, SL_WriteRegisterMinuteSecond}, }; /* 配置文件解析函数 */ @@ -1118,6 +1138,42 @@ uint16_t SL_ReadRegisterMPPT_Mode(void *pMsg) return getMPPT_Mode(); } +/** + * @brief 读取年月 + * @param + * @retval 年月 + */ +uint16_t SL_ReadRegisterYearMonth(void *pMsg) +{ + timeInfo time; + getRTC_Time(&time); + return (time.year << 8) | time.month; +} + +/** + * @brief 读取日时 + * @param + * @retval 日时 + */ +uint16_t SL_ReadRegisterDayHour(void *pMsg) +{ + timeInfo time; + getRTC_Time(&time); + return (time.day << 8) | time.hour; +} + +/** + * @brief 读取分秒 + * @param + * @retval 分秒 + */ +uint16_t SL_ReadRegisterMinuteSecond(void *pMsg) +{ + timeInfo time; + getRTC_Time(&time); + return (time.minute << 8) | time.second; +} + /* 写入寄存器 */ /** * @brief 清除统计电量 @@ -1151,6 +1207,96 @@ uint16_t SL_WriteRegisterChargControl(void *pMsg) return 0; } +/** + * @brief 清除SOE + * @param + * @retval + */ +uint16_t SL_WriteRegisterCleanSOE(void *pMsg) +{ + debug_printf("SL_WriteRegisterCleanSOE\n"); + cleanEventsOrderRecord(); + + return 0; +} + +/** + * @brief 写入年月 + * @param + * @retval + */ +static timeInfo writeTime; +uint16_t SL_WriteRegisterYearMonth(void *pMsg) +{ + // timeInfo time; + // getRTC_Time(&time); + + // uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + // time.year = tempU8; + // tempU8 = (uint8_t)(*(uint16_t*)pMsg); + // time.month = tempU8; + uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + writeTime.year = tempU8; + tempU8 = (uint8_t)(*(uint16_t*)pMsg); + writeTime.month = tempU8; + + // setRTC_Time(&time); + + return 0; +} + +/** + * @brief 写入日时 + * @param + * @retval + */ +uint16_t SL_WriteRegisterDayHour(void *pMsg) +{ + // timeInfo time; + // getRTC_Time(&time); + + // uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + // time.day = tempU8; + // tempU8 = (uint8_t)(*(uint16_t*)pMsg); + // time.hour = tempU8; + + // setRTC_Time(&time); + + uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + writeTime.day = tempU8; + tempU8 = (uint8_t)(*(uint16_t*)pMsg); + writeTime.hour = tempU8; + + return 0; +} + +/** + * @brief 写入分秒 + * @param + * @retval + */ +uint16_t SL_WriteRegisterMinuteSecond(void *pMsg) +{ + // timeInfo time; + // getRTC_Time(&time); + + // uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + // time.minute = tempU8; + // tempU8 = (uint8_t)(*(uint16_t*)pMsg); + // time.second = tempU8; + + // setRTC_Time(&time); + + uint8_t tempU8 = (uint8_t)((*(uint16_t*)pMsg) >> 8); + writeTime.minute = tempU8; + tempU8 = (uint8_t)(*(uint16_t*)pMsg); + writeTime.second = tempU8; + + setRTC_Time(&writeTime); + + return 0; +} + /** * @brief 解析下发的配置文件 * @param pMsg 需要解析的内容 @@ -1925,6 +2071,7 @@ uint8_t *analysisReadProfile(uint8_t *pMsg, uint8_t **outData, uint16_t *dataLen return (pMsg + 2); } + debug_printf("dataType error : %d\n", dataType); return NULL; } @@ -2292,15 +2439,31 @@ void SL_MsgProcFunc_Read_Profile(device_handle device, void *pMsg, uint32_t MsgL analysisData += 12; /* 解析一包的时间小于100ms */ - uint16_t tickstart1 = HAL_GetTick(); + uint32_t tickstart1; + tickstart1 = HAL_GetTick(); while ((analysisData != (((uint8_t *)pMsg + MsgLen) - 3)) && (analysisData != NULL) && ((HAL_GetTick() - tickstart1) < 100)) { + // while ((analysisData != (((uint8_t *)pMsg + MsgLen) - 3)) && (analysisData != NULL)) { analysisData = analysisReadProfile(analysisData, &replay_pack, &replayPackDatalen); } - if (((HAL_GetTick() - tickstart1) >= 100) || (analysisData == NULL)) { + if (analysisData != (((uint8_t *)pMsg + MsgLen) - 3) || (analysisData == NULL) || ((HAL_GetTick() - tickstart1) > 100)) { + // debug_printf("analysisData error \n"); return; } +// if (analysisData == NULL) { +// debug_printf("analysisData == NULL \n"); +// return; +// } + +// if (analysisData != (((uint8_t *)pMsg + MsgLen) - 3)) { +// debug_printf("HAL_GetTick() - tickstart1 : %d \n", (HAL_GetTick() - tickstart1)); +// debug_printf("analysisData != (((uint8_t *)pMsg + MsgLen) - 3) \n"); +// return; +// } + + + uint8_t *replay_pack1 = getInsertData(); *(replay_pack1 + 10) = (uint8_t)(replayPackDatalen >> 8); *(replay_pack1 + 11) = (uint8_t)(replayPackDatalen); @@ -2318,6 +2481,9 @@ void SL_MsgProcFunc_Read_Profile(device_handle device, void *pMsg, uint32_t MsgL *replay_pack = g_cfgParameter.endFlagSL; uart_insertDataSend(device, 15 + replayPackDatalen); + + + debug_printf("SL_MsgProcFunc_Read_Profile end\n"); } /** diff --git a/APP/functionalModule/Inc/flash.h b/APP/functionalModule/Inc/flash.h index 73d13b0..08f869d 100644 --- a/APP/functionalModule/Inc/flash.h +++ b/APP/functionalModule/Inc/flash.h @@ -9,6 +9,8 @@ void Flash_Init(void); void read_Flash(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead); void write_Flash(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); +void erase_Sector_Flash(uint32_t secpos); + #endif \ No newline at end of file diff --git a/APP/functionalModule/Src/FM_GPIO.c b/APP/functionalModule/Src/FM_GPIO.c index 87ac01d..62a9f31 100644 --- a/APP/functionalModule/Src/FM_GPIO.c +++ b/APP/functionalModule/Src/FM_GPIO.c @@ -179,15 +179,17 @@ BOOL readOverCurrState(void) BOOL readOnlyPowerOutputState(void) { // static volatile GPIO_PinState gpioTemp1, gpioTemp2, gpioTemp3; - GPIO_PinState gpioTemp1, gpioTemp2, gpioTemp3; - + // GPIO_PinState gpioTemp1, gpioTemp2, gpioTemp3; + GPIO_PinState gpioTemp1, gpioTemp2; + gpioTemp1 = HAL_GPIO_ReadPin(POW_FF_CON_GPIO_Port, POW_FF_CON_Pin); gpioTemp2 = HAL_GPIO_ReadPin(POW_OUT_CON_GPIO_Port, POW_OUT_CON_Pin); - gpioTemp3 = HAL_GPIO_ReadPin(DSG_PROT_GPIO_Port, DSG_PROT_Pin); + // gpioTemp3 = HAL_GPIO_ReadPin(DSG_PROT_GPIO_Port, DSG_PROT_Pin); if (gpioTemp1 == GPIO_PIN_SET && gpioTemp2 == GPIO_PIN_SET - && gpioTemp3 == GPIO_PIN_SET) { + // && gpioTemp3 == GPIO_PIN_SET) { + ) { return TRUE; } diff --git a/APP/functionalModule/Src/FM_RTC.c b/APP/functionalModule/Src/FM_RTC.c index 796d67b..e486188 100644 --- a/APP/functionalModule/Src/FM_RTC.c +++ b/APP/functionalModule/Src/FM_RTC.c @@ -22,9 +22,9 @@ void FM_RTC_Init(void) void setRTC_Time(timeInfo *time) { /* 日期结构体 */ - static RTC_DateTypeDef setData; + RTC_DateTypeDef setData; /* 时间结构体 */ - static RTC_TimeTypeDef setTime; + RTC_TimeTypeDef setTime; setData.Year = time->year; setData.Month = time->month; @@ -46,9 +46,9 @@ void setRTC_Time(timeInfo *time) void getRTC_Time(timeInfo *time) { /* 日期结构体 */ - static RTC_DateTypeDef getData; + RTC_DateTypeDef getData; /* 时间结构体 */ - static RTC_TimeTypeDef getTime; + RTC_TimeTypeDef getTime; HAL_RTC_GetDate(&hrtc, &getData, RTC_FORMAT_BIN); HAL_RTC_GetTime(&hrtc, &getTime, RTC_FORMAT_BIN); diff --git a/APP/functionalModule/Src/flash.c b/APP/functionalModule/Src/flash.c index 9c1814f..c343ebf 100644 --- a/APP/functionalModule/Src/flash.c +++ b/APP/functionalModule/Src/flash.c @@ -94,4 +94,14 @@ void write_Flash(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite) W25QXX_Write(pBuffer, WriteAddr, NumByteToWrite); // Flash_Write_MorePage(pBuffer, WriteAddr, NumByteToWrite); // W25Q128_Write(pBuffer, WriteAddr, NumByteToWrite); -} \ No newline at end of file +} + + +/** + * @brief 清除flash中secpos扇区的数据 + * + */ +void erase_Sector_Flash(uint32_t secpos) +{ + W25QXX_Erase_Sector(secpos); +} diff --git a/APP/hardwareDriver/Src/HD_RTC.c b/APP/hardwareDriver/Src/HD_RTC.c index d174c73..5798482 100644 --- a/APP/hardwareDriver/Src/HD_RTC.c +++ b/APP/hardwareDriver/Src/HD_RTC.c @@ -18,6 +18,29 @@ void HD_RTC_Init(void) { Error_Handler(); } + + // RTC_TimeTypeDef sTime = {0}; + // RTC_DateTypeDef sDate = {0}; + + // sTime.Hours = 0; + // sTime.Minutes = 0; + // sTime.Seconds = 0; + // sTime.SubSeconds = 0; + // sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; + // sTime.StoreOperation = RTC_STOREOPERATION_RESET; + // if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) + // { + // Error_Handler(); + // } + // sDate.WeekDay = RTC_WEEKDAY_MONDAY; + // sDate.Month = RTC_MONTH_JANUARY; + // sDate.Date = 1; + // sDate.Year = 0; + + // if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) + // { + // Error_Handler(); + // } } diff --git a/Core/Src/main.c b/Core/Src/main.c index 9745e9d..1166c51 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -73,6 +73,7 @@ void SystemClock_Config(void); */ int main(void) { + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ @@ -94,20 +95,20 @@ int main(void) /* USER CODE END SysInit */ /* Initialize all configured peripherals */ -// MX_GPIO_Init(); -// MX_DMA_Init(); -// MX_ADC1_Init(); -// MX_ADC2_Init(); -// MX_TIM3_Init(); -// MX_TIM6_Init(); -// MX_UART4_Init(); -// MX_USART2_UART_Init(); -// MX_USART3_UART_Init(); -// MX_TIM7_Init(); -// MX_TIM16_Init(); -// MX_TIM15_Init(); -// MX_RTC_Init(); -// MX_SPI1_Init(); +// MX_GPIO_Init(); +// MX_DMA_Init(); +// MX_ADC1_Init(); +// MX_ADC2_Init(); +// MX_TIM3_Init(); +// MX_TIM6_Init(); +// MX_UART4_Init(); +// MX_USART2_UART_Init(); +// MX_USART3_UART_Init(); +// MX_TIM7_Init(); +// MX_TIM16_Init(); +// MX_TIM15_Init(); +// MX_RTC_Init(); +// MX_SPI1_Init(); /* USER CODE BEGIN 2 */ // while (1) { @@ -151,14 +152,13 @@ void SystemClock_Config(void) /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1; - RCC_OscInitStruct.PLL.PLLN = 9; + RCC_OscInitStruct.PLL.PLLN = 18; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; diff --git a/chargeController.ioc b/chargeController.ioc index bb203d8..c3208df 100644 --- a/chargeController.ioc +++ b/chargeController.ioc @@ -351,23 +351,23 @@ RCC.FCLKCortexFreq_Value=72000000 RCC.FDCANFreq_Value=72000000 RCC.FamilyName=M RCC.HCLKFreq_Value=72000000 -RCC.HSE_VALUE=8000000 RCC.HSI48_VALUE=48000000 RCC.HSI_VALUE=16000000 RCC.I2C1Freq_Value=72000000 RCC.I2C2Freq_Value=72000000 RCC.I2C3Freq_Value=72000000 RCC.I2SFreq_Value=72000000 -RCC.IPParameters=ADC12Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.IPParameters=ADC12Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value RCC.LPTIM1Freq_Value=72000000 RCC.LPUART1Freq_Value=72000000 RCC.LSCOPinFreq_Value=32000 RCC.LSI_VALUE=32000 RCC.MCO1PinFreq_Value=16000000 -RCC.PLLN=9 +RCC.PLLN=18 RCC.PLLPoutputFreq_Value=72000000 RCC.PLLQoutputFreq_Value=72000000 RCC.PLLRCLKFreq_Value=72000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE RCC.PWRFreq_Value=72000000 RCC.RNGFreq_Value=72000000 RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE @@ -380,7 +380,7 @@ RCC.USART1Freq_Value=72000000 RCC.USART2Freq_Value=72000000 RCC.USART3Freq_Value=72000000 RCC.USBFreq_Value=72000000 -RCC.VCOInputFreq_Value=16000000 +RCC.VCOInputFreq_Value=8000000 RCC.VCOOutputFreq_Value=144000000 RTC.Format=RTC_FORMAT_BIN RTC.IPParameters=Format,WeekDay