From fcb6ce88a66ec73a7cd974b4aab592910af8e18e Mon Sep 17 00:00:00 2001 From: Duke NUCem Date: Sun, 5 Sep 2021 14:43:32 +0200 Subject: [PATCH] Put the modbus and rs485 codes together. Briefly tested. --- fw/Core/Inc/main.h | 6 +- fw/Core/Src/main.c | 163 ++++++++++++------- fw/Core/Src/stm32l0xx_it.c | 17 +- fw/iaq_wired_sensor Debug.launch | 140 ++++++++-------- fw/iaq_wired_sensor.ioc | 269 +++++++++++++++---------------- 5 files changed, 323 insertions(+), 272 deletions(-) diff --git a/fw/Core/Inc/main.h b/fw/Core/Inc/main.h index 7e5429f..522d5ac 100644 --- a/fw/Core/Inc/main.h +++ b/fw/Core/Inc/main.h @@ -99,11 +99,13 @@ void Error_Handler(void); /* USER CODE BEGIN Private defines */ #define MEASUREMENT_PERIOD_MS 600000 -extern uint8_t lpuart1_rx_message_index; -extern uint8_t lpuart1_rx_message_len; +extern uint16_t lpuart1_rx_message_index; +extern uint16_t lpuart1_rx_message_len; extern uint8_t lpuart1_rx_done; +extern uint8_t lpuart1_rx_message_too_long; extern uint8_t tim21_elapsed_period; + /* USER CODE END Private defines */ #ifdef __cplusplus diff --git a/fw/Core/Src/main.c b/fw/Core/Src/main.c index 8aeaecc..5cd0751 100644 --- a/fw/Core/Src/main.c +++ b/fw/Core/Src/main.c @@ -111,7 +111,7 @@ static void MX_I2C1_Init(void); static void MX_LPUART1_UART_Init(void); static void MX_TIM21_Init(void); /* USER CODE BEGIN PFP */ - +void LPUART1_TX_Buffer(uint8_t* buffer_tx, uint8_t buffer_tx_len); /* USER CODE END PFP */ /* 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) { - 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_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 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ - uint8_t scd4x_is_connected = 0; + /*uint8_t scd4x_is_connected = 0; if (scd4x_start_periodic_measurement() == SCD4X_OK) { scd4x_is_connected = 1; - } + }*/ /* Attempt to start SPS30 measurement and check if it's connected */ - sps30_reset(); + /*sps30_reset(); uint8_t sps30_is_connected = 0; if (sps30_start_measurement() == SPS30_OK) { sps30_is_connected = 1; - } + }*/ /* Wait 1000ms for sensors initialization */ /* SHT4x Init Time: max 1 ms (datasheet pg. 8) */ @@ -222,15 +229,28 @@ int main(void) /* UART RX is done */ if (lpuart1_rx_done == 1) { - /* 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); + /* Process the message */ + if (lpuart1_rx_message_too_long) + { + /* Do nothing, just delete the buffer and set the flag back to zero*/ + lpuart1_rx_message_too_long = 0; + } 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 */ lpuart1_rx_done = 0; - LL_LPUART_EnableIT_RXNE(LPUART1); + + + } /* It is time for measurement */ @@ -410,65 +430,78 @@ static void MX_I2C1_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 */ - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPUART1); + /* Peripheral clock enable */ + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPUART1); - LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); - /**LPUART1 GPIO Configuration - PA0-CK_IN ------> LPUART1_RX - PA1 ------> LPUART1_TX - */ - GPIO_InitStruct.Pin = LL_GPIO_PIN_0; - GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; - GPIO_InitStruct.Alternate = LL_GPIO_AF_6; - LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); + LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB); + /**LPUART1 GPIO Configuration + PA0-CK_IN ------> LPUART1_RX + PA1 ------> LPUART1_TX + PB1 ------> LPUART1_DE + */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_0; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + 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.Mode = LL_GPIO_MODE_ALTERNATE; - GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; - 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.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; + GPIO_InitStruct.Alternate = LL_GPIO_AF_6; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /* LPUART1 interrupt Init */ - NVIC_SetPriority(LPUART1_IRQn, 0); - NVIC_EnableIRQ(LPUART1_IRQn); + GPIO_InitStruct.Pin = LL_GPIO_PIN_1; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + 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 */ - 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 */ + /* USER CODE BEGIN LPUART1_Init 1 */ - /* Enable IDLE Interrupt */ - LL_LPUART_EnableIT_IDLE(LPUART1); + /* USER CODE END 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_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 */ - LL_LPUART_EnableIT_RXNE(LPUART1); + /* Enable IDLE Interrupt */ + LL_LPUART_EnableIT_IDLE(LPUART1); - LL_LPUART_EnableDirectionRx(LPUART1); - LL_LPUART_EnableDirectionTx(LPUART1); - LL_LPUART_Enable(LPUART1); - /* USER CODE END LPUART1_Init 2 */ + /* Enable RX Not Empty Interrupt */ + LL_LPUART_EnableIT_RXNE(LPUART1); + + 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 */ +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 */ diff --git a/fw/Core/Src/stm32l0xx_it.c b/fw/Core/Src/stm32l0xx_it.c index 16bfd27..0d36df7 100644 --- a/fw/Core/Src/stm32l0xx_it.c +++ b/fw/Core/Src/stm32l0xx_it.c @@ -23,6 +23,7 @@ #include "stm32l0xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "modbus.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -42,9 +43,10 @@ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ -uint8_t lpuart1_rx_message_index = 0; -uint8_t lpuart1_rx_message_len = 0; +uint16_t lpuart1_rx_message_index = 0; +uint16_t lpuart1_rx_message_len = 0; uint8_t lpuart1_rx_done = 0; +uint8_t lpuart1_rx_message_too_long = 0; uint8_t tim21_elapsed_period = 0; /* USER CODE END PV */ @@ -187,6 +189,10 @@ void LPUART1_IRQHandler(void) lpuart1_rx_message_len = lpuart1_rx_message_index; lpuart1_rx_message_index = 0; 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 */ } @@ -195,10 +201,11 @@ void LPUART1_IRQHandler(void) void LPUART1_CharReception_Callback( void ) { uint16_t lpuart1_rx_bit = LL_LPUART_ReceiveData9(LPUART1); - if (lpuart1_rx_message_index < (MODBUS_BUFFER_SIZE - 1)) { - /* buffer (defined in modbus.c) is shared for TX and RX */ - modbus_buffer[lpuart1_rx_message_index++] = (uint8_t)lpuart1_rx_bit; + if (lpuart1_rx_message_index < MODBUS_MAX_RTU_FRAME_SIZE) + { + modbus_buffer[lpuart1_rx_message_index] = (uint8_t)lpuart1_rx_bit; } + lpuart1_rx_message_index++; } /* USER CODE END 1 */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/fw/iaq_wired_sensor Debug.launch b/fw/iaq_wired_sensor Debug.launch index c6a4875..b298a25 100644 --- a/fw/iaq_wired_sensor Debug.launch +++ b/fw/iaq_wired_sensor Debug.launch @@ -1,73 +1,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fw/iaq_wired_sensor.ioc b/fw/iaq_wired_sensor.ioc index 61eed32..1e11fd8 100644 --- a/fw/iaq_wired_sensor.ioc +++ b/fw/iaq_wired_sensor.ioc @@ -1,151 +1,150 @@ #MicroXplorer Configuration settings - do not modify -Mcu.Family=STM32L0 -PA6.GPIOParameters=PinState,GPIO_Label -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 +File.Version=6 +GPIO.groupedBy=Group By Peripherals 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.IP3=RCC -LPUART1.OneBitSampling=UART_ONE_BIT_SAMPLE_ENABLE -Mcu.IP0=I2C1 -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.IP4=SYS +Mcu.IP5=TIM21 Mcu.IPNb=6 -ProjectManager.PreviousToolchain= -RCC.APB2TimFreq_Value=12000000 -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.Name=STM32L011F(3-4)Ux +Mcu.Package=UFQFPN20 Mcu.Pin0=PA0-CK_IN Mcu.Pin1=PA1 -GPIO.groupedBy=Group By Peripherals +Mcu.Pin10=VP_TIM21_VS_ClockSourceINT Mcu.Pin2=PA5 Mcu.Pin3=PA6 Mcu.Pin4=PA7 Mcu.Pin5=PA9 -PA5.Signal=GPIO_Output -ProjectManager.ProjectBuild=false -RCC.HSE_VALUE=8000000 -RCC.MCOPinFreq_Value=12000000 -board=custom -RCC.VCOOutputFreq_Value=48000000 -NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true -ProjectManager.LastFirmware=true -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 +Mcu.Pin6=PA10 +Mcu.Pin7=PA13 +Mcu.Pin8=PA14 +Mcu.Pin9=VP_SYS_VS_Systick +Mcu.PinsNb=11 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32L011F4Ux MxCube.Version=6.2.1 -VP_TIM21_VS_ClockSourceINT.Mode=Internal -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 +MxDb.Version=DB.6.0.21 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.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 -ProjectManager.ComputerToolchain=false -RCC.HSI_VALUE=16000000 -Mcu.Pin10=VP_TIM21_VS_ClockSourceINT -RCC.APB1TimFreq_Value=12000000 -RCC.PWRFreq_Value=12000000 -RCC.APB1Freq_Value=12000000 -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 +PA5.GPIO_Label=LED_B +PA5.Locked=true +PA5.PinState=GPIO_PIN_SET +PA5.Signal=GPIO_Output +PA6.GPIOParameters=PinState,GPIO_Label +PA6.GPIO_Label=LED_G 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