Put the modbus and rs485 codes together. Briefly tested.

This commit is contained in:
Duke NUCem 2021-09-05 14:43:32 +02:00
parent b5b031e593
commit fcb6ce88a6
5 changed files with 323 additions and 272 deletions

View File

@ -99,11 +99,13 @@ void Error_Handler(void);
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
#define MEASUREMENT_PERIOD_MS 600000 #define MEASUREMENT_PERIOD_MS 600000
extern uint8_t lpuart1_rx_message_index; extern uint16_t lpuart1_rx_message_index;
extern uint8_t lpuart1_rx_message_len; extern uint16_t lpuart1_rx_message_len;
extern uint8_t lpuart1_rx_done; extern uint8_t lpuart1_rx_done;
extern uint8_t lpuart1_rx_message_too_long;
extern uint8_t tim21_elapsed_period; extern uint8_t tim21_elapsed_period;
/* USER CODE END Private defines */ /* USER CODE END Private defines */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -111,7 +111,7 @@ static void MX_I2C1_Init(void);
static void MX_LPUART1_UART_Init(void); static void MX_LPUART1_UART_Init(void);
static void MX_TIM21_Init(void); static void MX_TIM21_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
void LPUART1_TX_Buffer(uint8_t* buffer_tx, uint8_t buffer_tx_len);
/* USER CODE END PFP */ /* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
@ -131,7 +131,9 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction)
int8_t modbus_transmit_function(uint8_t *buffer, int data_len) int8_t modbus_transmit_function(uint8_t *buffer, int data_len)
{ {
return MODBUS_OK; /* TODO */ /* TODO */
LPUART1_TX_Buffer(buffer, data_len);
return MODBUS_OK;
} }
@ -189,23 +191,28 @@ int main(void)
i2c_context.i2c = I2C1; i2c_context.i2c = I2C1;
i2c_init(&i2c_context); i2c_init(&i2c_context);
modbus_slave_set_address(0x11);
scd4x_start_periodic_measurement();
uint8_t scd4x_is_connected = 1;
uint8_t sps30_is_connected = 0;
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
uint8_t scd4x_is_connected = 0; /*uint8_t scd4x_is_connected = 0;
if (scd4x_start_periodic_measurement() == SCD4X_OK) if (scd4x_start_periodic_measurement() == SCD4X_OK)
{ {
scd4x_is_connected = 1; scd4x_is_connected = 1;
} }*/
/* Attempt to start SPS30 measurement and check if it's connected */ /* Attempt to start SPS30 measurement and check if it's connected */
sps30_reset(); /*sps30_reset();
uint8_t sps30_is_connected = 0; uint8_t sps30_is_connected = 0;
if (sps30_start_measurement() == SPS30_OK) if (sps30_start_measurement() == SPS30_OK)
{ {
sps30_is_connected = 1; sps30_is_connected = 1;
} }*/
/* Wait 1000ms for sensors initialization */ /* Wait 1000ms for sensors initialization */
/* SHT4x Init Time: max 1 ms (datasheet pg. 8) */ /* SHT4x Init Time: max 1 ms (datasheet pg. 8) */
@ -222,15 +229,28 @@ int main(void)
/* UART RX is done */ /* UART RX is done */
if (lpuart1_rx_done == 1) if (lpuart1_rx_done == 1)
{ {
/* Process the message: /* Process the message */
* message is stored in modbus_buffer[], no copying necessary; if (lpuart1_rx_message_too_long)
* but we need to make sure that modbus_buffer[] will not be used while {
* processing the message: this can be done by disabling RX interrupt */ /* Do nothing, just delete the buffer and set the flag back to zero*/
LL_LPUART_DisableIT_RXNE(LPUART1); lpuart1_rx_message_too_long = 0;
modbus_slave_process_msg(modbus_buffer, lpuart1_rx_message_len); } else
{
/* Process the message:
* message is stored in modbus_buffer[], no copying necessary;
* but we need to make sure that modbus_buffer[] will not be used while
* processing the message: this can be done by disabling RX interrupt */
LL_LPUART_DisableIT_RXNE(LPUART1);
modbus_slave_process_msg(modbus_buffer, lpuart1_rx_message_len);
/* Reset the RX DONE flag */
lpuart1_rx_done = 0;
LL_LPUART_EnableIT_RXNE(LPUART1);
}
/* Reset the RX DONE flag */ /* Reset the RX DONE flag */
lpuart1_rx_done = 0; lpuart1_rx_done = 0;
LL_LPUART_EnableIT_RXNE(LPUART1);
} }
/* It is time for measurement */ /* It is time for measurement */
@ -410,65 +430,78 @@ static void MX_I2C1_Init(void)
static void MX_LPUART1_UART_Init(void) static void MX_LPUART1_UART_Init(void)
{ {
/* USER CODE BEGIN LPUART1_Init 0 */ /* USER CODE BEGIN LPUART1_Init 0 */
/* USER CODE END LPUART1_Init 0 */ /* USER CODE END LPUART1_Init 0 */
LL_LPUART_InitTypeDef LPUART_InitStruct = {0}; LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
/* Peripheral clock enable */ /* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPUART1); LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPUART1);
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
/**LPUART1 GPIO Configuration LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
PA0-CK_IN ------> LPUART1_RX /**LPUART1 GPIO Configuration
PA1 ------> LPUART1_TX PA0-CK_IN ------> LPUART1_RX
*/ PA1 ------> LPUART1_TX
GPIO_InitStruct.Pin = LL_GPIO_PIN_0; PB1 ------> LPUART1_DE
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; */
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pin = LL_GPIO_PIN_0;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_1; GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
GPIO_InitStruct.Alternate = LL_GPIO_AF_6; GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct); LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* LPUART1 interrupt Init */ GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
NVIC_SetPriority(LPUART1_IRQn, 0); GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
NVIC_EnableIRQ(LPUART1_IRQn); GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN LPUART1_Init 1 */ /* LPUART1 interrupt Init */
NVIC_SetPriority(LPUART1_IRQn, 0);
NVIC_EnableIRQ(LPUART1_IRQn);
/* USER CODE END LPUART1_Init 1 */ /* USER CODE BEGIN LPUART1_Init 1 */
LPUART_InitStruct.BaudRate = 115200;
LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_9B;
LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
LPUART_InitStruct.Parity = LL_LPUART_PARITY_EVEN;
LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
/* USER CODE BEGIN LPUART1_Init 2 */
/* Enable IDLE Interrupt */ /* USER CODE END LPUART1_Init 1 */
LL_LPUART_EnableIT_IDLE(LPUART1); LPUART_InitStruct.BaudRate = 115200;
LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_9B;
LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
LPUART_InitStruct.Parity = LL_LPUART_PARITY_EVEN;
LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
LL_LPUART_EnableDEMode(LPUART1);
LL_LPUART_SetDESignalPolarity(LPUART1, LL_LPUART_DE_POLARITY_HIGH);
LL_LPUART_SetDEAssertionTime(LPUART1, 0);
LL_LPUART_SetDEDeassertionTime(LPUART1, 0);
/* USER CODE BEGIN LPUART1_Init 2 */
/* Enable RX Not Empty Interrupt */ /* Enable IDLE Interrupt */
LL_LPUART_EnableIT_RXNE(LPUART1); LL_LPUART_EnableIT_IDLE(LPUART1);
LL_LPUART_EnableDirectionRx(LPUART1); /* Enable RX Not Empty Interrupt */
LL_LPUART_EnableDirectionTx(LPUART1); LL_LPUART_EnableIT_RXNE(LPUART1);
LL_LPUART_Enable(LPUART1);
/* USER CODE END LPUART1_Init 2 */ LL_LPUART_EnableDirectionRx(LPUART1);
LL_LPUART_EnableDirectionTx(LPUART1);
LL_LPUART_Enable(LPUART1);
/* USER CODE END LPUART1_Init 2 */
} }
@ -559,6 +592,16 @@ static void MX_GPIO_Init(void)
} }
/* USER CODE BEGIN 4 */ /* USER CODE BEGIN 4 */
void LPUART1_TX_Buffer(uint8_t* buffer_tx, uint8_t buffer_tx_len)
{
__disable_irq();
for (uint8_t i = 0; i < buffer_tx_len; i++)
{
LL_LPUART_TransmitData9(LPUART1, buffer_tx[i]);
while (!LL_LPUART_IsActiveFlag_TXE(LPUART1));
}
__enable_irq();
}
/* USER CODE END 4 */ /* USER CODE END 4 */

View File

@ -23,6 +23,7 @@
#include "stm32l0xx_it.h" #include "stm32l0xx_it.h"
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "modbus.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -42,9 +43,10 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
uint8_t lpuart1_rx_message_index = 0; uint16_t lpuart1_rx_message_index = 0;
uint8_t lpuart1_rx_message_len = 0; uint16_t lpuart1_rx_message_len = 0;
uint8_t lpuart1_rx_done = 0; uint8_t lpuart1_rx_done = 0;
uint8_t lpuart1_rx_message_too_long = 0;
uint8_t tim21_elapsed_period = 0; uint8_t tim21_elapsed_period = 0;
/* USER CODE END PV */ /* USER CODE END PV */
@ -187,6 +189,10 @@ void LPUART1_IRQHandler(void)
lpuart1_rx_message_len = lpuart1_rx_message_index; lpuart1_rx_message_len = lpuart1_rx_message_index;
lpuart1_rx_message_index = 0; lpuart1_rx_message_index = 0;
lpuart1_rx_done = 1; lpuart1_rx_done = 1;
if (lpuart1_rx_message_len > MODBUS_MAX_RTU_FRAME_SIZE)
{
lpuart1_rx_message_too_long = 1;
}
} }
/* USER CODE END LPUART1_IRQn 1 */ /* USER CODE END LPUART1_IRQn 1 */
} }
@ -195,10 +201,11 @@ void LPUART1_IRQHandler(void)
void LPUART1_CharReception_Callback( void ) void LPUART1_CharReception_Callback( void )
{ {
uint16_t lpuart1_rx_bit = LL_LPUART_ReceiveData9(LPUART1); uint16_t lpuart1_rx_bit = LL_LPUART_ReceiveData9(LPUART1);
if (lpuart1_rx_message_index < (MODBUS_BUFFER_SIZE - 1)) { if (lpuart1_rx_message_index < MODBUS_MAX_RTU_FRAME_SIZE)
/* buffer (defined in modbus.c) is shared for TX and RX */ {
modbus_buffer[lpuart1_rx_message_index++] = (uint8_t)lpuart1_rx_bit; modbus_buffer[lpuart1_rx_message_index] = (uint8_t)lpuart1_rx_bit;
} }
lpuart1_rx_message_index++;
} }
/* USER CODE END 1 */ /* USER CODE END 1 */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -1,73 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.st.stm32cube.ide.mcu.debug.launch.launchConfigurationType"> <launchConfiguration type="com.st.stm32cube.ide.mcu.debug.launch.launchConfigurationType">
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.access_port_id" value="0"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.access_port_id" value="0"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_live_expr" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_live_expr" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_swv" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_swv" value="false"/>
<intAttribute key="com.st.stm32cube.ide.mcu.debug.launch.formatVersion" value="2"/> <intAttribute key="com.st.stm32cube.ide.mcu.debug.launch.formatVersion" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.ip_address_local" value="localhost"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.ip_address_local" value="localhost"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.loadList" value="{&quot;fItems&quot;:[{&quot;fIsFromMainTab&quot;:true,&quot;fPath&quot;:&quot;Debug/iaq_wired_sensor.elf&quot;,&quot;fProjectName&quot;:&quot;iaq_wired_sensor&quot;,&quot;fPerformBuild&quot;:true,&quot;fDownload&quot;:true,&quot;fLoadSymbols&quot;:true}]}"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.loadList" value="{&quot;fItems&quot;:[{&quot;fIsFromMainTab&quot;:true,&quot;fPath&quot;:&quot;Debug/iaq_wired_sensor.elf&quot;,&quot;fProjectName&quot;:&quot;iaq_wired_sensor&quot;,&quot;fPerformBuild&quot;:true,&quot;fDownload&quot;:true,&quot;fLoadSymbols&quot;:true}]}"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.override_start_address_mode" value="default"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.override_start_address_mode" value="default"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.remoteCommand" value="target remote"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.remoteCommand" value="target remote"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startServer" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startServer" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.divby0" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.divby0" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.unaligned" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.unaligned" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.haltonexception" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.haltonexception" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swd_mode" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swd_mode" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_port" value="61235"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_port" value="61235"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_div" value="8"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_div" value="8"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_hclk" value="16000000"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_hclk" value="16000000"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.useRemoteTarget" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.useRemoteTarget" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.vector_table" value=""/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.vector_table" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.verify_flash_download" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.verify_flash_download" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_allow_halt" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_allow_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_signal_halt" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_signal_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_external_loader" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_external_loader" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader" value=""/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader_init" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.external_loader_init" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="/home/user/STM32CubeIDE/workspace_1.5.0/iaq_wired_sensor/Debug/st-link_gdbserver_log.txt"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="/home/user/STM32CubeIDE/workspace_1.5.0/iaq_wired_sensor/Debug/st-link_gdbserver_log.txt"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="false"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value=""/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fLaunchAttribute&quot;:&quot;monitor reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset&quot;],&quot;fCmdOptions&quot;:[]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]}}]}"/> <stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]}}]}"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.swv.swv_wait_for_sync" value="true"/> <booleanAttribute key="com.st.stm32cube.ide.mcu.debug.swv.swv_wait_for_sync" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/> <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/> <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="ST-LINK (ST-LINK GDB server)"/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="ST-LINK (ST-LINK GDB server)"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61234"/> <intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61234"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/> <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/> <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/> <booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/> <stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="arm-none-eabi-gdb"/> <stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="arm-none-eabi-gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="true"/> <booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="true"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/> <booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/> <intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/> <stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/> <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/> <booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/> <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/iaq_wired_sensor.elf"/> <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/iaq_wired_sensor.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="iaq_wired_sensor"/> <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="iaq_wired_sensor"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="true"/> <booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1512690796"/> <stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1512690796"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/iaq_wired_sensor"/> <listEntry value="/iaq_wired_sensor"/>
</listAttribute> </listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/> <listEntry value="4"/>
</listAttribute> </listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#10;"/> <stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/> <stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
</launchConfiguration> </launchConfiguration>

View File

@ -1,151 +1,150 @@
#MicroXplorer Configuration settings - do not modify #MicroXplorer Configuration settings - do not modify
Mcu.Family=STM32L0 File.Version=6
PA6.GPIOParameters=PinState,GPIO_Label GPIO.groupedBy=Group By Peripherals
RCC.MSI_VALUE=2097000
ProjectManager.MainLocation=Core/Src
PA0-CK_IN.GPIOParameters=GPIO_PuPd
ProjectManager.ProjectFileName=iaq_wired_sensor.ioc
ProjectManager.KeepUserCode=true
PA10.Mode=I2C
Mcu.UserName=STM32L011F4Ux
Mcu.PinsNb=11
ProjectManager.NoMain=false
TIM21.IPParameters=Prescaler,Period,AutoReloadPreload,ClockDivision
PA0-CK_IN.Mode=Asynchronous
RCC.LPUARTFreq_Value=12000000
RCC.PLLCLKFreq_Value=12000000
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-LL-true,2-SystemClock_Config-RCC-false-LL-false,3-MX_I2C1_Init-I2C1-false-LL-true,4-MX_LPUART1_UART_Init-LPUART1-false-LL-true,5-MX_TIM21_Init-TIM21-false-LL-true
RCC.RTCFreq_Value=37000
TIM21.ClockDivision=TIM_CLOCKDIVISION_DIV1
LPUART1.WordLength=UART_WORDLENGTH_9B
ProjectManager.DefaultFWLocation=true
PA6.PinState=GPIO_PIN_SET
PA6.GPIO_Label=LED_G
RCC.USART2Freq_Value=12000000
NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false
ProjectManager.DeletePrevious=true
RCC.TimerFreq_Value=12000000
PA5.PinState=GPIO_PIN_SET
LPUART1.IPParameters=BaudRate,SwapParam,OneBitSampling,WordLength,Parity
PinOutPanel.RotationAngle=0
RCC.FamilyName=M
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
ProjectManager.StackSize=0x400
RCC.WatchDogFreq_Value=37000
PA13.Signal=SYS_SWDIO
Mcu.IP4=SYS
RCC.FCLKCortexFreq_Value=12000000
RCC.HSI16_VALUE=16000000
Mcu.IP5=TIM21
I2C1.IPParameters=Timing I2C1.IPParameters=Timing
I2C1.Timing=0x40000A0B
KeepUserPlacement=false
LPUART1.BaudRate=115200
LPUART1.IPParameters=BaudRate,SwapParam,OneBitSampling,WordLength,Parity
LPUART1.OneBitSampling=UART_ONE_BIT_SAMPLE_ENABLE
LPUART1.Parity=UART_PARITY_EVEN
LPUART1.SwapParam=UART_ADVFEATURE_SWAP_ENABLE
LPUART1.WordLength=UART_WORDLENGTH_9B
Mcu.Family=STM32L0
Mcu.IP0=I2C1
Mcu.IP1=LPUART1
Mcu.IP2=NVIC Mcu.IP2=NVIC
Mcu.IP3=RCC Mcu.IP3=RCC
LPUART1.OneBitSampling=UART_ONE_BIT_SAMPLE_ENABLE Mcu.IP4=SYS
Mcu.IP0=I2C1 Mcu.IP5=TIM21
PA9.Mode=I2C
Mcu.IP1=LPUART1
TIM21.Period=tim21_period
RCC.PLLDIV=RCC_PLLDIV_4
Mcu.UserConstants=
PA7.PinState=GPIO_PIN_SET
ProjectManager.TargetToolchain=STM32CubeIDE
Mcu.ThirdPartyNb=0
NVIC.LPUART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true
RCC.HCLKFreq_Value=12000000
Mcu.IPNb=6 Mcu.IPNb=6
ProjectManager.PreviousToolchain= Mcu.Name=STM32L011F(3-4)Ux
RCC.APB2TimFreq_Value=12000000 Mcu.Package=UFQFPN20
PA9.Signal=I2C1_SCL
I2C1.Timing=0x40000A0B
LPUART1.Parity=UART_PARITY_EVEN
Mcu.Pin6=PA10
Mcu.Pin7=PA13
ProjectManager.RegisterCallBack=
Mcu.Pin8=PA14
Mcu.Pin9=VP_SYS_VS_Systick
PA0-CK_IN.GPIO_PuPd=GPIO_PULLUP
RCC.LSE_VALUE=32768
PA1.GPIO_PuPd=GPIO_PULLUP
PA1.Signal=LPUART1_TX
RCC.AHBFreq_Value=12000000
Mcu.Pin0=PA0-CK_IN Mcu.Pin0=PA0-CK_IN
Mcu.Pin1=PA1 Mcu.Pin1=PA1
GPIO.groupedBy=Group By Peripherals Mcu.Pin10=VP_TIM21_VS_ClockSourceINT
Mcu.Pin2=PA5 Mcu.Pin2=PA5
Mcu.Pin3=PA6 Mcu.Pin3=PA6
Mcu.Pin4=PA7 Mcu.Pin4=PA7
Mcu.Pin5=PA9 Mcu.Pin5=PA9
PA5.Signal=GPIO_Output Mcu.Pin6=PA10
ProjectManager.ProjectBuild=false Mcu.Pin7=PA13
RCC.HSE_VALUE=8000000 Mcu.Pin8=PA14
RCC.MCOPinFreq_Value=12000000 Mcu.Pin9=VP_SYS_VS_Systick
board=custom Mcu.PinsNb=11
RCC.VCOOutputFreq_Value=48000000 Mcu.ThirdPartyNb=0
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true Mcu.UserConstants=
ProjectManager.LastFirmware=true Mcu.UserName=STM32L011F4Ux
ProjectManager.FirmwarePackage=STM32Cube FW_L0 V1.12.0
PA0-CK_IN.Signal=LPUART1_RX
MxDb.Version=DB.6.0.21
RCC.APB2Freq_Value=12000000
PA1.Mode=Asynchronous
PA1.GPIOParameters=GPIO_PuPd
ProjectManager.BackupPrevious=false
MxCube.Version=6.2.1 MxCube.Version=6.2.1
VP_TIM21_VS_ClockSourceINT.Mode=Internal MxDb.Version=DB.6.0.21
RCC.I2C1Freq_Value=12000000
PA14.Mode=Serial_Wire
TIM21.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM21.Prescaler=tim21_prescaler
File.Version=6
VP_SYS_VS_Systick.Mode=SysTick
TIM21.IPParametersWithoutCheck=Prescaler,Period
PA9.Locked=true
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.TIM21_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false
PA13.Mode=Serial_Wire
ProjectManager.FreePins=false
RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI16_VALUE,HSI_VALUE,I2C1Freq_Value,LPTIMFreq_Value,LPUARTFreq_Value,LSE_VALUE,LSI_VALUE,MCOPinFreq_Value,MSI_VALUE,PLLCLKFreq_Value,PLLDIV,PWRFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,TIMFreq_Value,TimerFreq_Value,USART2Freq_Value,VCOOutputFreq_Value,WatchDogFreq_Value
ProjectManager.AskForMigrate=true
Mcu.Name=STM32L011F(3-4)Ux
ProjectManager.HalAssertFull=false
LPUART1.BaudRate=115200
RCC.RTCHSEDivFreq_Value=4000000
ProjectManager.ProjectName=iaq_wired_sensor
ProjectManager.UnderRoot=true
ProjectManager.CoupleFile=false
RCC.SYSCLKFreq_VALUE=12000000
Mcu.Package=UFQFPN20
PA6.Signal=GPIO_Output
PA7.GPIO_Label=LED_R
PA5.Locked=true
PA7.Locked=true
LPUART1.SwapParam=UART_ADVFEATURE_SWAP_ENABLE
PA5.GPIO_Label=LED_B
NVIC.ForceEnableDMAVector=true NVIC.ForceEnableDMAVector=true
KeepUserPlacement=false
ProjectManager.CompilerOptimize=6
ProjectManager.ToolChainLocation=
RCC.LSI_VALUE=37000
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
PA10.Signal=I2C1_SDA
PA14.Signal=SYS_SWCLK
ProjectManager.HeapSize=0x200
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.LPUART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.TIM21_IRQn=true\:0\:0\:false\:false\:true\:true\:true
PA0-CK_IN.GPIOParameters=GPIO_PuPd
PA0-CK_IN.GPIO_PuPd=GPIO_PULLUP
PA0-CK_IN.Mode=Asynchronous
PA0-CK_IN.Signal=LPUART1_RX
PA1.GPIOParameters=GPIO_PuPd
PA1.GPIO_PuPd=GPIO_PULLUP
PA1.Mode=Asynchronous
PA1.Signal=LPUART1_TX
PA10.Mode=I2C
PA10.Signal=I2C1_SDA
PA13.Mode=Serial_Wire
PA13.Signal=SYS_SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_SWCLK
PA5.GPIOParameters=PinState,GPIO_Label PA5.GPIOParameters=PinState,GPIO_Label
ProjectManager.ComputerToolchain=false PA5.GPIO_Label=LED_B
RCC.HSI_VALUE=16000000 PA5.Locked=true
Mcu.Pin10=VP_TIM21_VS_ClockSourceINT PA5.PinState=GPIO_PIN_SET
RCC.APB1TimFreq_Value=12000000 PA5.Signal=GPIO_Output
RCC.PWRFreq_Value=12000000 PA6.GPIOParameters=PinState,GPIO_Label
RCC.APB1Freq_Value=12000000 PA6.GPIO_Label=LED_G
PA7.GPIOParameters=PinState,GPIO_Label
ProjectManager.CustomerFirmwarePackage=
ProjectManager.DeviceId=STM32L011F4Ux
ProjectManager.LibraryCopy=1
RCC.LPTIMFreq_Value=12000000
PA7.Signal=GPIO_Output
VP_TIM21_VS_ClockSourceINT.Signal=TIM21_VS_ClockSourceINT
RCC.TIMFreq_Value=12000000
PA6.Locked=true PA6.Locked=true
isbadioc=false PA6.PinState=GPIO_PIN_SET
PA6.Signal=GPIO_Output
PA7.GPIOParameters=PinState,GPIO_Label
PA7.GPIO_Label=LED_R
PA7.Locked=true
PA7.PinState=GPIO_PIN_SET
PA7.Signal=GPIO_Output
PA9.Locked=true
PA9.Mode=I2C
PA9.Signal=I2C1_SCL
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
ProjectManager.CompilerOptimize=6
ProjectManager.ComputerToolchain=false
ProjectManager.CoupleFile=false
ProjectManager.CustomerFirmwarePackage=
ProjectManager.DefaultFWLocation=true
ProjectManager.DeletePrevious=true
ProjectManager.DeviceId=STM32L011F4Ux
ProjectManager.FirmwarePackage=STM32Cube FW_L0 V1.12.0
ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LibraryCopy=1
ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=iaq_wired_sensor.ioc
ProjectManager.ProjectName=iaq_wired_sensor
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-LL-true,2-SystemClock_Config-RCC-false-LL-false,3-MX_I2C1_Init-I2C1-false-LL-true,4-MX_LPUART1_UART_Init-LPUART1-false-LL-true,5-MX_TIM21_Init-TIM21-false-LL-true
RCC.AHBFreq_Value=12000000
RCC.APB1Freq_Value=12000000
RCC.APB1TimFreq_Value=12000000
RCC.APB2Freq_Value=12000000
RCC.APB2TimFreq_Value=12000000
RCC.FCLKCortexFreq_Value=12000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=12000000
RCC.HSE_VALUE=8000000
RCC.HSI16_VALUE=16000000
RCC.HSI_VALUE=16000000
RCC.I2C1Freq_Value=12000000
RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI16_VALUE,HSI_VALUE,I2C1Freq_Value,LPTIMFreq_Value,LPUARTFreq_Value,LSE_VALUE,LSI_VALUE,MCOPinFreq_Value,MSI_VALUE,PLLCLKFreq_Value,PLLDIV,PWRFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,TIMFreq_Value,TimerFreq_Value,USART2Freq_Value,VCOOutputFreq_Value,WatchDogFreq_Value
RCC.LPTIMFreq_Value=12000000
RCC.LPUARTFreq_Value=12000000
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=37000
RCC.MCOPinFreq_Value=12000000
RCC.MSI_VALUE=2097000
RCC.PLLCLKFreq_Value=12000000
RCC.PLLDIV=RCC_PLLDIV_4
RCC.PWRFreq_Value=12000000
RCC.RTCFreq_Value=37000
RCC.RTCHSEDivFreq_Value=4000000
RCC.SYSCLKFreq_VALUE=12000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.TIMFreq_Value=12000000
RCC.TimerFreq_Value=12000000
RCC.USART2Freq_Value=12000000
RCC.VCOOutputFreq_Value=48000000
RCC.WatchDogFreq_Value=37000
TIM21.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM21.ClockDivision=TIM_CLOCKDIVISION_DIV1
TIM21.IPParameters=Prescaler,Period,AutoReloadPreload,ClockDivision
TIM21.IPParametersWithoutCheck=Prescaler,Period
TIM21.Period=tim21_period
TIM21.Prescaler=tim21_prescaler
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM21_VS_ClockSourceINT.Mode=Internal
VP_TIM21_VS_ClockSourceINT.Signal=TIM21_VS_ClockSourceINT
board=custom