added some testing tools
This commit is contained in:
parent
cb4b5cb53e
commit
ad21577cbb
File diff suppressed because one or more lines are too long
|
@ -13,7 +13,7 @@ F_PWM = (F_CLK)/((ARR + 1) * (PSC + 1))
|
|||
F_CLK = 16 MHz
|
||||
|
||||
POWERGROUND ESC Signal: pulse every 20 ms, 1 ms = 0%, 2 ms = 100%
|
||||
FREQ = 50 Hz -> 16 MHz/50 Hz = 320000 = ((9999 + 1) * (31 + 1))
|
||||
FREQ = 50 Hz -> 16 MHz/50 Hz = 320000 = ((39999 + 1) * (7 + 1))
|
||||
DUTY CYCLE = 1/20 -> 0%, DUTY CYCLE = 2/20 -> 100%
|
||||
CCR * DUTY_CYCLE
|
||||
CCR: 1/20 -> 500, 2/20 -> 1000
|
||||
|
@ -24,7 +24,7 @@ CCR: 1/20 -> 500, 2/20 -> 1000
|
|||
|
||||
//#define BATTERY_COOLING_FREQ 20000
|
||||
|
||||
void PWM_control_init(TIM_HandleTypeDef powerground1, TIM_HandleTypeDef powerground2, TIM_HandleTypeDef battery_cooling);
|
||||
void PWM_control_init(TIM_HandleTypeDef* powerground1, TIM_HandleTypeDef* powerground2, TIM_HandleTypeDef* battery_cooling);
|
||||
|
||||
void PWM_powerground_control(uint8_t percent);
|
||||
void PWM_battery_cooling_control(uint8_t percent);
|
||||
|
|
|
@ -64,9 +64,9 @@ typedef struct {
|
|||
extern StateHandle state;
|
||||
static bool relay_closed = 0;
|
||||
static bool precharge_closed = 0;
|
||||
static int16_t RELAY_BAT_SIDE_VOLTAGE = 0;
|
||||
static int16_t RELAY_ESC_SIDE_VOLTAGE = 0;
|
||||
static int16_t CURRENT_MEASUREMENT = 0;
|
||||
static int16_t RELAY_BAT_SIDE_VOLTAGE;
|
||||
static int16_t RELAY_ESC_SIDE_VOLTAGE;
|
||||
static int16_t CURRENT_MEASUREMENT;
|
||||
|
||||
void sm_init();
|
||||
void sm_update();
|
||||
|
|
|
@ -1,23 +1,30 @@
|
|||
#include "PWM_control.h"
|
||||
#include "stm32f3xx_hal_tim.h"
|
||||
|
||||
uint8_t powerground_status;
|
||||
uint8_t battery_cooling_status;
|
||||
//uint32_t powerground1_CCR, powerground2_CCR, battery_cooling_CCR;
|
||||
|
||||
TIM_HandleTypeDef powerground1, powerground2, battery_cooling;
|
||||
TIM_HandleTypeDef* powerground, *battery_cooling;
|
||||
|
||||
/*
|
||||
Pulse width modulation mode allows for generating a signal with a frequency determined by
|
||||
the value of the TIMx_ARR register and a duty cycle determined by the value of the TIMx_CCRx register.
|
||||
*/
|
||||
|
||||
void PWM_control_init(TIM_HandleTypeDef powerground1, TIM_HandleTypeDef powerground2, TIM_HandleTypeDef battery_cooling){
|
||||
void PWM_control_init(TIM_HandleTypeDef* pg1, TIM_HandleTypeDef* pg2, TIM_HandleTypeDef* bat_cool){
|
||||
powerground_status = 0;
|
||||
battery_cooling_status = 0;
|
||||
|
||||
HAL_TIM_PWM_Start(&powerground1, 1); //TIM15CH1
|
||||
HAL_TIM_PWM_Start(&powerground2, 2); //TIM15CH2
|
||||
HAL_TIM_PWM_Start(&battery_cooling, 3); //TIM1CH3
|
||||
HAL_TIM_PWM_Start(pg1, TIM_CHANNEL_1); //TIM15CH1
|
||||
HAL_TIM_PWM_Start(pg2, TIM_CHANNEL_2); //TIM15CH2
|
||||
HAL_TIM_PWM_Start(bat_cool, TIM_CHANNEL_3); //TIM1CH3
|
||||
|
||||
powerground = pg1;
|
||||
battery_cooling = bat_cool;
|
||||
__HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 2000);
|
||||
__HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000);
|
||||
//__HAL_TIM_SET_COMPARE(battery_cooling, TIM_CHANNEL_3, 2000);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -26,11 +33,11 @@ void PWM_control_init(TIM_HandleTypeDef powerground1, TIM_HandleTypeDef powergro
|
|||
void PWM_powerground_control(uint8_t percent){
|
||||
if (percent > 100) //something went wrong
|
||||
return;
|
||||
|
||||
powerground_status = percent/100;
|
||||
TIM15->CCR1 = (TIM15->ARR*POWERGROUND_MAX_DUTY_CYCLE-TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE)
|
||||
* (percent/100) + TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE;
|
||||
TIM15->CCR2 = TIM15->CCR1; /* *1.01 or *0.99 if the speeds of the fans are different*/
|
||||
powerground_status = percent;
|
||||
int ccr = 2000 + ((2000) * (percent/100.0));
|
||||
__HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, ccr);
|
||||
__HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000 + ((2000) * (percent/100.0)));
|
||||
//TIM15->CCR1 = (TIM15->ARR*POWERGROUND_MAX_DUTY_CYCLE-TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE) * (percent/100.0) + TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE;
|
||||
}
|
||||
|
||||
void PWM_battery_cooling_control(uint8_t percent){}
|
|
@ -23,12 +23,15 @@
|
|||
/* USER CODE BEGIN Includes */
|
||||
#include "ADBMS_Abstraction.h"
|
||||
#include "ADBMS_CMD_MAKROS.h"
|
||||
#include "PWM_control.h"
|
||||
#include "can.h"
|
||||
#include "AMS_HighLevel.h"
|
||||
#include "state_machine.h"
|
||||
#include "TMP1075.h"
|
||||
#include "errors.h"
|
||||
#include "stm32f302xc.h"
|
||||
#include "stm32f3xx_hal.h"
|
||||
#include "stm32f3xx_hal_tim.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
@ -54,7 +57,6 @@ I2C_HandleTypeDef hi2c1;
|
|||
SPI_HandleTypeDef hspi1;
|
||||
|
||||
TIM_HandleTypeDef htim1;
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim15;
|
||||
|
||||
UART_HandleTypeDef huart1;
|
||||
|
@ -72,7 +74,6 @@ static void MX_SPI1_Init(void);
|
|||
static void MX_TIM15_Init(void);
|
||||
static void MX_USART1_UART_Init(void);
|
||||
static void MX_TIM1_Init(void);
|
||||
static void MX_TIM2_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
@ -117,13 +118,13 @@ int main(void)
|
|||
MX_TIM15_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_TIM1_Init();
|
||||
MX_TIM2_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
sm_init();
|
||||
tmp1075_init(&hi2c1);
|
||||
AMS_Init(&hspi1);
|
||||
can_init(&hcan);
|
||||
HAL_Delay(100);
|
||||
PWM_control_init(&htim15, &htim15, &htim1);
|
||||
HAL_Delay(10);
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
|
@ -133,8 +134,20 @@ int main(void)
|
|||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
int ttt = HAL_GetTick() + 45000;
|
||||
PWM_powerground_control(0);
|
||||
while (HAL_GetTick() < ttt){}
|
||||
|
||||
state.current_state = STATE_ACTIVE;
|
||||
sm_update();
|
||||
can_handle_send_status();
|
||||
PWM_powerground_control(15);
|
||||
ttt = HAL_GetTick() + 5000;
|
||||
while (HAL_GetTick() < ttt){}
|
||||
|
||||
//AMS_Loop();
|
||||
//sm_update();
|
||||
//sm_test_cycle_states();
|
||||
//can_handle_send_status();
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
@ -381,55 +394,6 @@ static void MX_TIM1_Init(void)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM2 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM2_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 0 */
|
||||
|
||||
/* USER CODE END TIM2_Init 0 */
|
||||
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 1 */
|
||||
|
||||
/* USER CODE END TIM2_Init 1 */
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler = 0;
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 4294967295;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM2_Init 2 */
|
||||
|
||||
/* USER CODE END TIM2_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim2);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM15 Initialization Function
|
||||
* @param None
|
||||
|
@ -450,9 +414,9 @@ static void MX_TIM15_Init(void)
|
|||
|
||||
/* USER CODE END TIM15_Init 1 */
|
||||
htim15.Instance = TIM15;
|
||||
htim15.Init.Prescaler = 0;
|
||||
htim15.Init.Prescaler = 7;
|
||||
htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim15.Init.Period = 65535;
|
||||
htim15.Init.Period = 39999;
|
||||
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim15.Init.RepetitionCounter = 0;
|
||||
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
|
@ -467,7 +431,7 @@ static void MX_TIM15_Init(void)
|
|||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.Pulse = 10000;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
|
@ -477,6 +441,11 @@ static void MX_TIM15_Init(void)
|
|||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.Pulse = 0;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
|
||||
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
|
||||
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
|
||||
|
|
|
@ -11,9 +11,9 @@ void sm_init(){
|
|||
}
|
||||
|
||||
void sm_update(){
|
||||
RELAY_BAT_SIDE_VOLTAGE = module.auxVoltages[0];
|
||||
RELAY_ESC_SIDE_VOLTAGE = module.auxVoltages[1];
|
||||
CURRENT_MEASUREMENT = module.auxVoltages[2];
|
||||
RELAY_BAT_SIDE_VOLTAGE = mV_from_ADBMS6830(module.auxVoltages[0]);
|
||||
RELAY_ESC_SIDE_VOLTAGE = mV_from_ADBMS6830(module.auxVoltages[1]);
|
||||
CURRENT_MEASUREMENT = mV_from_ADBMS6830(module.auxVoltages[2]);
|
||||
|
||||
switch (state.current_state) {
|
||||
case STATE_INACTIVE:
|
||||
|
@ -231,28 +231,37 @@ void sm_check_errors(){
|
|||
}
|
||||
|
||||
void sm_test_cycle_states(){
|
||||
RELAY_BAT_SIDE_VOLTAGE = module.auxVoltages[0];
|
||||
RELAY_ESC_SIDE_VOLTAGE = module.auxVoltages[1];
|
||||
CURRENT_MEASUREMENT = module.auxVoltages[2];
|
||||
sm_set_relay_positions(state.current_state);
|
||||
|
||||
if (timestamp > HAL_GetTick())
|
||||
return;
|
||||
switch (state.current_state) {
|
||||
case STATE_INACTIVE:
|
||||
state.current_state = STATE_PRECHARGE;
|
||||
timestamp = HAL_GetTick() + 10000;
|
||||
return;
|
||||
timestamp = HAL_GetTick() + 30000;
|
||||
PWM_powerground_control(0);
|
||||
break;
|
||||
case STATE_PRECHARGE:
|
||||
state.current_state = STATE_READY;
|
||||
timestamp = HAL_GetTick() + 10000;
|
||||
return;
|
||||
break;
|
||||
case STATE_READY:
|
||||
state.current_state = STATE_ACTIVE;
|
||||
timestamp = HAL_GetTick() + 10000;
|
||||
return;
|
||||
break;
|
||||
case STATE_ACTIVE:
|
||||
state.current_state = STATE_DISCHARGE;
|
||||
timestamp = HAL_GetTick() + 10000;
|
||||
return;
|
||||
PWM_powerground_control(1);
|
||||
break;
|
||||
case STATE_DISCHARGE:
|
||||
state.current_state = STATE_INACTIVE;
|
||||
timestamp = HAL_GetTick() + 10000;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
state.target_state = state.current_state;
|
||||
}
|
|
@ -59,7 +59,7 @@
|
|||
/* USER CODE END 0 */
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
/**
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
|
@ -305,17 +305,6 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
|
|||
|
||||
/* USER CODE END TIM1_MspInit 1 */
|
||||
}
|
||||
else if(htim_pwm->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
}
|
||||
else if(htim_pwm->Instance==TIM15)
|
||||
{
|
||||
/* USER CODE BEGIN TIM15_MspInit 0 */
|
||||
|
@ -353,27 +342,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
|||
|
||||
/* USER CODE END TIM1_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM2 GPIO Configuration
|
||||
PA3 ------> TIM2_CH4
|
||||
*/
|
||||
GPIO_InitStruct.Pin = PWM_PG_FAN2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
HAL_GPIO_Init(PWM_PG_FAN2_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM15)
|
||||
{
|
||||
/* USER CODE BEGIN TIM15_MspPostInit 0 */
|
||||
|
@ -383,13 +351,14 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
|||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM15 GPIO Configuration
|
||||
PA2 ------> TIM15_CH1
|
||||
PA3 ------> TIM15_CH2
|
||||
*/
|
||||
GPIO_InitStruct.Pin = PWM_PG_FAN1_Pin;
|
||||
GPIO_InitStruct.Pin = PWM_PG_FAN1_Pin|PWM_PG_FAN2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF9_TIM15;
|
||||
HAL_GPIO_Init(PWM_PG_FAN1_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM15_MspPostInit 1 */
|
||||
|
||||
|
@ -416,17 +385,6 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm)
|
|||
|
||||
/* USER CODE END TIM1_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_pwm->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_pwm->Instance==TIM15)
|
||||
{
|
||||
/* USER CODE BEGIN TIM15_MspDeInit 0 */
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,5 +1,5 @@
|
|||
##########################################################################################################################
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Fri May 24 17:29:49 GMT 2024]
|
||||
# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Thu May 30 20:42:23 EEST 2024]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
|
|
|
@ -205,7 +205,7 @@ ProjectManager.ToolChainLocation=
|
|||
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_CAN_Init-CAN-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_TIM15_Init-TIM15-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_CAN_Init-CAN-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_TIM15_Init-TIM15-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true
|
||||
RCC.ADC12outputFreq_Value=16000000
|
||||
RCC.AHBFreq_Value=16000000
|
||||
RCC.APB1Freq_Value=16000000
|
||||
|
@ -255,7 +255,10 @@ TIM1.Channel-PWM\ Generation3\ CH3N=TIM_CHANNEL_3
|
|||
TIM1.IPParameters=Channel-PWM Generation3 CH3N
|
||||
TIM15.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||
TIM15.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||
TIM15.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2
|
||||
TIM15.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Prescaler,Period,Pulse-PWM Generation1 CH1
|
||||
TIM15.Period=39999
|
||||
TIM15.Prescaler=7
|
||||
TIM15.Pulse-PWM\ Generation1\ CH1=0
|
||||
USART1.IPParameters=VirtualMode-Asynchronous
|
||||
USART1.VirtualMode-Asynchronous=VM_ASYNC
|
||||
VP_SYS_VS_Systick.Mode=SysTick
|
||||
|
|
Loading…
Reference in New Issue