Compare commits

..

2 Commits

Author SHA1 Message Date
起床就犯困 06eb862d46 修改主频为170M,修改异常检测 2025-09-25 17:29:26 +08:00
起床就犯困 b474462ac6 采样电阻修改,汇源网关适配 2025-09-25 15:19:00 +08:00
10 changed files with 118 additions and 86 deletions

View File

@ -394,7 +394,7 @@ void mppt_readJust(void)
/* 延时一段时间才判断 */
static uint16_t flag = 0;
flag++;
if (flag < 200) {
if (flag < 250) {
// float pv1Volt = getSolarInCircuitVoltage();
// float error = pv1Volt - SolarInCircuitV;
// float stepPwm = kp * error + ki * pv1Volt;
@ -432,7 +432,7 @@ void mppt_readJust(void)
static uint8_t currMinFlag1 = 0;
// if (getChargCurrent() < 0.8f) {
if (totalChargeCurr < 100) {
if (totalChargeCurr < 200) {
// hysteresisValue1 = getChargCurrent() * 1.7f;
// hysteresisValue2 = getChargCurrent() * 12;
currMinFlag++;
@ -446,20 +446,20 @@ void mppt_readJust(void)
}
// else if (getChargCurrent() < 3 && currMinFlag1) {
else if (totalChargeCurr < 150 && currMinFlag1) {
else if (totalChargeCurr < 250 && currMinFlag1) {
// currMinFlag1 = 0;
currMinFlag = 0;
return;
}
// else if (getChargCurrent() < 5) {
else if (totalChargeCurr < 250) {
else if (totalChargeCurr < 300) {
currMinFlag1 = 0;
currMinFlag = 0;
// hysteresisValue1 = getChargCurrent() * 1.1f;
// hysteresisValue2 = getChargCurrent() * 10;
hysteresisValue1 = totalChargeCurr / 35.0f;
hysteresisValue2 = totalChargeCurr / 3.5f;
hysteresisValue1 = totalChargeCurr / 25.0f;
hysteresisValue2 = totalChargeCurr / 2.5f;
}
// else if (getChargCurrent() < 13) {
@ -468,8 +468,8 @@ void mppt_readJust(void)
currMinFlag = 0;
// hysteresisValue1 = getChargCurrent() * 1.1f;
// hysteresisValue2 = getChargCurrent() * 10;
hysteresisValue1 = totalChargeCurr / 45.0f;
hysteresisValue2 = totalChargeCurr / 4.5f;
hysteresisValue1 = totalChargeCurr / 35.0f;
hysteresisValue2 = totalChargeCurr / 3.5f;
}
// else if (getChargCurrent() < 20) {

View File

@ -21,7 +21,7 @@
#define HY_communicationIDStartAddr (HY_hardWordIDStartAddr + HY_hardWordIDSize)
#define HY_communicationIDSize 4
static uint8_t HY_hardWordID[HY_hardWordIDSize] = {0x48, 0x59, 0x30, 0x30, 0x30, 0x31};
static uint8_t HY_communicationID[HY_communicationIDSize] = {0x00, 0x00, 0x00, 0x01};
static uint8_t HY_communicationID[HY_communicationIDSize] = {0x00, 0x00, 0x00, 0x02};
static uint8_t HY_startFlag = 0x68;
static uint8_t HY_endFlag = 0x16;

View File

@ -34,7 +34,7 @@ static STR_TimeSliceOffset m_wdi;
static void Task_wdi(void);
/* 刷新寄存器中的数据 */
#define refreshJudgeData_reloadVal 1000 /* 任务执行间隔 */
#define refreshJudgeData_reloadVal 200 /* 任务执行间隔 */
#define refreshJudgeData_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_refreshJudgeData;
static void Task_refreshJudgeData(void);
@ -355,48 +355,75 @@ void Task_refreshJudgeData(void)
}
/* 反向充电电流检测 */
static uint8_t ExChargeCurrNum = 0;
if (getExChargeCurr() > g_cfgParameter.reverseChargProtectionCurr) {
setPowerOutput(FALSE);
insertEventsOrderRecord(InputProtection);
ExChargeCurrNum++;
if (ExChargeCurrNum > 5) {
setPowerOutput(FALSE);
insertEventsOrderRecord(InputProtection);
ExChargeCurrNum = 0;
}
}
else {
ExChargeCurrNum = 0;
}
/* 充电输入电压过高 */
static uint8_t solarInCircuitVoltageNum = 0;
if (getSolarInCircuitVoltage() >= g_cfgParameter.maxOpenSolarOutputCircuitV) {
// log_info("getSolarInCircuitVoltage : %f", getSolarInCircuitVoltage());
// log_info("g_cfgParameter.maxOpenSolarOutputCircuitV : %f", g_cfgParameter.maxOpenSolarOutputCircuitV);
TimeSliceOffset_Unregister(&m_startControl);
m_startControl.runFlag = 0;
stopChargWork();
insertEventsOrderRecord(overInputVolt);
solarInCircuitVoltageNum++;
if (solarInCircuitVoltageNum > 3) {
TimeSliceOffset_Unregister(&m_startControl);
m_startControl.runFlag = 0;
stopChargWork();
insertEventsOrderRecord(overInputVolt);
solarInCircuitVoltageNum = 0;
}
}
else {
solarInCircuitVoltageNum = 0;
}
static uint8_t num = 0;
if (20 == num++) {
num = 0;
static uint8_t socNum = 0;
if (50 == socNum++) {
socNum = 0;
setSOC();
}
/* 欠压保护 */
/* 连续两次电池电压过低,则关闭输出 */
static uint8_t numLow = 0;
static uint8_t numHigh = 0;
static uint8_t volageLowFlag = 0;
if (getBatteryState()
if (!volageLowFlag
&& getBatteryState()
&& (getBatteryVoltage() < g_cfgParameter.underVoltageProtection)
&& (getChargBatteryCurrent() < 0.5f)) {
numLow++;
if (numLow == 20) {
setPowerOutput(FALSE);
insertEventsOrderRecord(underVoltageProtection);
volageLowFlag = 1;
numLow = 0;
}
}
else {
numLow = 0;
}
if (numLow == 2) {
setPowerOutput(FALSE);
insertEventsOrderRecord(underVoltageProtection);
volageLowFlag = 1;
}
/* 电压过低后,再次恢复正常电压,则打开输出接口 */
if (volageLowFlag && getBatteryState() && getBatteryVoltage() > g_cfgParameter.underVoltageProtection + 0.5f) {
setPowerOutput(TRUE);
volageLowFlag = 0;
numHigh++;
if (numHigh == 20) {
setPowerOutput(TRUE);
volageLowFlag = 0;
numHigh = 0;
}
}
else {
numHigh = 0;
}
}

View File

@ -188,11 +188,14 @@ void proportionalInt(int mode)
if (mode) {
/* 光伏充电输出电流比例,放大倍数*电阻 */
// P_CHG_CURR = (1.0 / (50 * (1 / (1 / 0.01 + 1 / 0.002)))) * Proportion;
P_CHG_CURR = (1.0 / (50 * (1 / (1 / 0.001 + 1 / 0.002)))) * Proportion;
// P_CHG_CURR = (1.0 / (50 * (1 / (1 / 0.001 + 1 / 0.002)))) * Proportion;
P_CHG_CURR = (1.0 / (50 * (1 / (1 / 0.002 + 1 / 0.002)))) * Proportion;
/* 充电控制盒输出电压比例,分压系数 */
P_PV_VOLT_OUT = ((56.0 + 10.0) / 10.0) * Proportion;
// P_PV_VOLT_OUT = ((56.0 + 10.0) / 10.0) * Proportion;
P_PV_VOLT_OUT = ((47.0 + 4.7) / 4.7) * Proportion;
/* 放电电流采集电流倍数 */
P_DSG_CURR = (1.0 / (50 * (1 / (1 / 0.002 + 1 / 0.001)))) * Proportion;
// P_DSG_CURR = (1.0 / (50 * (1 / (1 / 0.002 + 1 / 0.001)))) * Proportion;
P_DSG_CURR = (1.0 / (50 * (1 / (1 / 0.002 + 1 / 0.002)))) * Proportion;
/* 光伏板输出电压比例 */
P_PV1_VOLT_IN = ((47.0 + 4.7) / 4.7) * Proportion;
/* 系统电源电压比例 */

View File

@ -46,7 +46,7 @@ void MX_ADC1_Init(void)
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.GainCompensation = 0;
@ -136,7 +136,7 @@ void MX_ADC2_Init(void)
/** Common config
*/
hadc2.Instance = ADC2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;

View File

@ -142,7 +142,7 @@ void SystemClock_Config(void)
/** Configure the main internal regulator output voltage
*/
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
/** Configure LSE Drive Capability
*/
@ -157,8 +157,8 @@ void SystemClock_Config(void)
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
RCC_OscInitStruct.PLL.PLLN = 18;
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
RCC_OscInitStruct.PLL.PLLN = 85;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
@ -176,7 +176,7 @@ void SystemClock_Config(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}

View File

@ -44,7 +44,7 @@ void MX_SPI1_Init(void)
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

View File

@ -47,7 +47,7 @@ void MX_TIM3_Init(void)
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 719;
htim3.Init.Period = 169;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
@ -88,7 +88,7 @@ void MX_TIM6_Init(void)
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 71;
htim6.Init.Prescaler = 169;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 9;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@ -121,7 +121,7 @@ void MX_TIM7_Init(void)
/* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7;
htim7.Init.Prescaler = 71;
htim7.Init.Prescaler = 169;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 99;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@ -155,9 +155,9 @@ void MX_TIM15_Init(void)
/* USER CODE END TIM15_Init 1 */
htim15.Instance = TIM15;
htim15.Init.Prescaler = 1;
htim15.Init.Prescaler = 3;
htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
htim15.Init.Period = 35999;
htim15.Init.Period = 42499;
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim15.Init.RepetitionCounter = 0;
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@ -193,7 +193,7 @@ void MX_TIM16_Init(void)
/* USER CODE END TIM16_Init 1 */
htim16.Instance = TIM16;
htim16.Init.Prescaler = 71;
htim16.Init.Prescaler = 169;
htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
htim16.Init.Period = 999;
htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

View File

@ -952,7 +952,7 @@
<option>
<name>CCJLinkResetList</name>
<version>6</version>
<state>5</state>
<state>7</state>
</option>
<option>
<name>CCJLinkInterfaceCmdLine</name>
@ -1017,7 +1017,7 @@
</option>
<option>
<name>CCCpuClockEdit</name>
<state />
<state>170.0</state>
</option>
<option>
<name>CCSwoClockAuto</name>
@ -1159,7 +1159,7 @@
</option>
<option>
<name>CCCpuClockEdit</name>
<state>72.0</state>
<state>170.0</state>
</option>
<option>
<name>CCSwoClockAuto</name>

View File

@ -339,51 +339,52 @@ ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
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_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_TIM3_Init-TIM3-false-HAL-true,7-MX_TIM6_Init-TIM6-false-HAL-true,8-MX_UART4_Init-UART4-false-HAL-true,9-MX_USART2_UART_Init-USART2-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true,11-MX_TIM7_Init-TIM7-false-HAL-true,12-MX_TIM16_Init-TIM16-false-HAL-true,13-MX_TIM15_Init-TIM15-false-HAL-true,14-MX_RTC_Init-RTC-false-HAL-true,15-MX_SPI1_Init-SPI1-false-HAL-true
RCC.ADC12Freq_Value=72000000
RCC.AHBFreq_Value=72000000
RCC.APB1Freq_Value=72000000
RCC.APB1TimFreq_Value=72000000
RCC.APB2Freq_Value=72000000
RCC.APB2TimFreq_Value=72000000
RCC.ADC12Freq_Value=170000000
RCC.AHBFreq_Value=170000000
RCC.APB1Freq_Value=170000000
RCC.APB1TimFreq_Value=170000000
RCC.APB2Freq_Value=170000000
RCC.APB2TimFreq_Value=170000000
RCC.CRSFreq_Value=48000000
RCC.CortexFreq_Value=72000000
RCC.CortexFreq_Value=170000000
RCC.EXTERNAL_CLOCK_VALUE=12288000
RCC.FCLKCortexFreq_Value=72000000
RCC.FDCANFreq_Value=72000000
RCC.FCLKCortexFreq_Value=170000000
RCC.FDCANFreq_Value=170000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=72000000
RCC.HCLKFreq_Value=170000000
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,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.I2C1Freq_Value=170000000
RCC.I2C2Freq_Value=170000000
RCC.I2C3Freq_Value=170000000
RCC.I2SFreq_Value=170000000
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,PLLM,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=170000000
RCC.LPUART1Freq_Value=170000000
RCC.LSCOPinFreq_Value=32000
RCC.LSI_VALUE=32000
RCC.MCO1PinFreq_Value=16000000
RCC.PLLN=18
RCC.PLLPoutputFreq_Value=72000000
RCC.PLLQoutputFreq_Value=72000000
RCC.PLLRCLKFreq_Value=72000000
RCC.PLLM=RCC_PLLM_DIV2
RCC.PLLN=85
RCC.PLLPoutputFreq_Value=170000000
RCC.PLLQoutputFreq_Value=170000000
RCC.PLLRCLKFreq_Value=170000000
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.PWRFreq_Value=72000000
RCC.RNGFreq_Value=72000000
RCC.PWRFreq_Value=170000000
RCC.RNGFreq_Value=170000000
RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE
RCC.RTCFreq_Value=32768
RCC.SAI1Freq_Value=72000000
RCC.SYSCLKFreq_VALUE=72000000
RCC.SAI1Freq_Value=170000000
RCC.SYSCLKFreq_VALUE=170000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.UART4Freq_Value=72000000
RCC.USART1Freq_Value=72000000
RCC.USART2Freq_Value=72000000
RCC.USART3Freq_Value=72000000
RCC.USBFreq_Value=72000000
RCC.VCOInputFreq_Value=8000000
RCC.VCOOutputFreq_Value=144000000
RCC.UART4Freq_Value=170000000
RCC.USART1Freq_Value=170000000
RCC.USART2Freq_Value=170000000
RCC.USART3Freq_Value=170000000
RCC.USBFreq_Value=170000000
RCC.VCOInputFreq_Value=4000000
RCC.VCOOutputFreq_Value=340000000
RTC.Format=RTC_FORMAT_BIN
RTC.IPParameters=Format,WeekDay
RTC.WeekDay=RTC_WEEKDAY_MONDAY
@ -395,10 +396,11 @@ SH.GPXTI5.0=GPIO_EXTI5
SH.GPXTI5.ConfNb=1
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
SH.S_TIM3_CH4.ConfNb=1
SPI1.CalculateBaudRate=36.0 MBits/s
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
SPI1.CalculateBaudRate=10.625 MBits/s
SPI1.DataSize=SPI_DATASIZE_8BIT
SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler
SPI1.Mode=SPI_MODE_MASTER
SPI1.VirtualType=VM_MASTER
STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0.DSPOoLibraryJjLibrary_Checked=true
@ -406,21 +408,21 @@ STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0.IPParameters=LibraryCcDSPOoLibraryJjDS
STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0.LibraryCcDSPOoLibraryJjDSPOoLibrary=true
STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0_SwParameter=LibraryCcDSPOoLibraryJjDSPOoLibrary\:true;
TIM15.IPParameters=PeriodNoDither,Prescaler
TIM15.PeriodNoDither=35999
TIM15.Prescaler=1
TIM15.PeriodNoDither=42499
TIM15.Prescaler=3
TIM16.IPParameters=Prescaler,PeriodNoDither
TIM16.PeriodNoDither=999
TIM16.Prescaler=71
TIM16.Prescaler=169
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
TIM3.IPParameters=PeriodNoDither,Channel-PWM Generation4 CH4
TIM3.PeriodNoDither=719
TIM3.PeriodNoDither=169
TIM6.IPParameters=Prescaler,PeriodNoDither,TIM_MasterOutputTrigger
TIM6.PeriodNoDither=9
TIM6.Prescaler=71
TIM6.Prescaler=169
TIM6.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
TIM7.IPParameters=Prescaler,PeriodNoDither,TIM_MasterOutputTrigger
TIM7.PeriodNoDither=99
TIM7.Prescaler=71
TIM7.Prescaler=169
TIM7.TIM_MasterOutputTrigger=TIM_TRGO_RESET
USART2.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485)
USART2.VirtualMode-Asynchronous=VM_ASYNC