Implemented UART communication (initial version). Needs more testing and make the buffer smaller to save space. RX and TX have been swapped in the system for debug (bad solder joint).

This commit is contained in:
David Žaitlík 2021-07-19 17:30:47 +02:00
parent 35e0e1fadc
commit 23f1f27c0e
3 changed files with 25 additions and 31 deletions

View File

@ -47,8 +47,8 @@
* Desired interrupt period 60s * Desired interrupt period 60s
*/ */
const uint16_t tim21_prescaler = 60000-1; // 100Hz const uint16_t tim21_prescaler = 60000-1; // 100Hz
const uint16_t tim21_period = 12000-1; // 60s //const uint16_t tim21_period = 12000-1; // 60s
//const uint16_t tim21_period = 1200-1; // 6s const uint16_t tim21_period = 1200-1; // 6s
//const uint16_t tim21_period = 200-1; // 1s //const uint16_t tim21_period = 200-1; // 1s
/* USER CODE END PV */ /* USER CODE END PV */
@ -158,6 +158,11 @@ int main(void)
if (lpuart1_rx_done == 1) if (lpuart1_rx_done == 1)
{ {
/* Process the message */ /* Process the message */
uint8_t buff_pom[255];
for (uint8_t j = 0; j < lpuart1_rx_message_len; j ++)
{
buff_pom[j] = lpuart1_rx_message[j];
}
/* process_modbus_message(lpuart1_rx_message, lpuart1_rx_message_len); */ /* process_modbus_message(lpuart1_rx_message, lpuart1_rx_message_len); */
/* Reset the RX DONE flag */ /* Reset the RX DONE flag */
@ -193,6 +198,9 @@ int main(void)
tim21_elapsed_period = 0; tim21_elapsed_period = 0;
} }
/* TEST START */ /* TEST START */
//LL_LPUART_TransmitData9(LPUART1, 0x69);
//LL_mDelay(250);
/* TODO: DELETE TEST */ /* TODO: DELETE TEST */
/* RS485 test */ /* RS485 test */
@ -350,11 +358,9 @@ static void MX_LPUART1_UART_Init(void)
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);
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
/**LPUART1 GPIO Configuration /**LPUART1 GPIO Configuration
PA0-CK_IN ------> LPUART1_RX PA0-CK_IN ------> LPUART1_RX
PA1 ------> LPUART1_TX PA1 ------> LPUART1_TX
PB1 ------> LPUART1_DE
*/ */
GPIO_InitStruct.Pin = LL_GPIO_PIN_0; GPIO_InitStruct.Pin = LL_GPIO_PIN_0;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
@ -372,14 +378,6 @@ static void MX_LPUART1_UART_Init(void)
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);
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);
/* LPUART1 interrupt Init */ /* LPUART1 interrupt Init */
NVIC_SetPriority(LPUART1_IRQn, 0); NVIC_SetPriority(LPUART1_IRQn, 0);
NVIC_EnableIRQ(LPUART1_IRQn); NVIC_EnableIRQ(LPUART1_IRQn);
@ -394,10 +392,7 @@ static void MX_LPUART1_UART_Init(void)
LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX; LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE; LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
LL_LPUART_Init(LPUART1, &LPUART_InitStruct); LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
LL_LPUART_EnableDEMode(LPUART1); LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
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 */ /* USER CODE BEGIN LPUART1_Init 2 */
/* Enable IDLE Interrupt */ /* Enable IDLE Interrupt */
@ -406,6 +401,9 @@ static void MX_LPUART1_UART_Init(void)
/* Enable RX Not Empty Interrupt */ /* Enable RX Not Empty Interrupt */
LL_LPUART_EnableIT_RXNE(LPUART1); LL_LPUART_EnableIT_RXNE(LPUART1);
LL_LPUART_EnableDirectionRx(LPUART1);
LL_LPUART_EnableDirectionTx(LPUART1);
LL_LPUART_Enable(LPUART1);
/* USER CODE END LPUART1_Init 2 */ /* USER CODE END LPUART1_Init 2 */
} }
@ -460,7 +458,6 @@ static void MX_GPIO_Init(void)
/* GPIO Ports Clock Enable */ /* GPIO Ports Clock Enable */
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA); LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
/**/ /**/
LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin);

View File

@ -179,13 +179,13 @@ void LPUART1_IRQHandler(void)
/* USER CODE END LPUART1_IRQn 0 */ /* USER CODE END LPUART1_IRQn 0 */
/* USER CODE BEGIN LPUART1_IRQn 1 */ /* USER CODE BEGIN LPUART1_IRQn 1 */
/* If the IDLE flag is active */ /* If the IDLE flag is active */
if (LL_LPUART_IsActiveFlag_IDLE(LPUART1) == 1) if (LL_LPUART_IsActiveFlag_IDLE(LPUART1) && LL_LPUART_IsEnabledIT_IDLE(LPUART1))
{ {
/* Clear the IDLE flag */ /* Clear the IDLE flag */
LL_LPUART_ClearFlag_IDLE(LPUART1); LL_LPUART_ClearFlag_IDLE(LPUART1);
/* Reset the buffer index */ /* Reset the buffer index */
lpuart1_rx_message_len = lpuart1_rx_message_index + 1; 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;
} }

View File

@ -8,7 +8,7 @@ ProjectManager.ProjectFileName=iaq_wired_sensor.ioc
ProjectManager.KeepUserCode=true ProjectManager.KeepUserCode=true
PA10.Mode=I2C PA10.Mode=I2C
Mcu.UserName=STM32L011F4Ux Mcu.UserName=STM32L011F4Ux
Mcu.PinsNb=12 Mcu.PinsNb=11
ProjectManager.NoMain=false ProjectManager.NoMain=false
TIM21.IPParameters=Prescaler,Period,AutoReloadPreload,ClockDivision TIM21.IPParameters=Prescaler,Period,AutoReloadPreload,ClockDivision
PA0-CK_IN.Mode=Asynchronous PA0-CK_IN.Mode=Asynchronous
@ -34,8 +34,8 @@ ProjectManager.StackSize=0x400
RCC.WatchDogFreq_Value=37000 RCC.WatchDogFreq_Value=37000
PA13.Signal=SYS_SWDIO PA13.Signal=SYS_SWDIO
Mcu.IP4=SYS Mcu.IP4=SYS
RCC.HSI16_VALUE=16000000
RCC.FCLKCortexFreq_Value=12000000 RCC.FCLKCortexFreq_Value=12000000
RCC.HSI16_VALUE=16000000
Mcu.IP5=TIM21 Mcu.IP5=TIM21
I2C1.IPParameters=Timing I2C1.IPParameters=Timing
Mcu.IP2=NVIC Mcu.IP2=NVIC
@ -58,11 +58,11 @@ RCC.APB2TimFreq_Value=12000000
PA9.Signal=I2C1_SCL PA9.Signal=I2C1_SCL
I2C1.Timing=0x40000A0B I2C1.Timing=0x40000A0B
LPUART1.Parity=UART_PARITY_EVEN LPUART1.Parity=UART_PARITY_EVEN
Mcu.Pin6=PA9 Mcu.Pin6=PA10
Mcu.Pin7=PA10 Mcu.Pin7=PA13
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=
Mcu.Pin8=PA13 Mcu.Pin8=PA14
Mcu.Pin9=PA14 Mcu.Pin9=VP_SYS_VS_Systick
PA0-CK_IN.GPIO_PuPd=GPIO_PULLUP PA0-CK_IN.GPIO_PuPd=GPIO_PULLUP
RCC.LSE_VALUE=32768 RCC.LSE_VALUE=32768
PA1.GPIO_PuPd=GPIO_PULLUP PA1.GPIO_PuPd=GPIO_PULLUP
@ -74,7 +74,7 @@ GPIO.groupedBy=Group By Peripherals
Mcu.Pin2=PA5 Mcu.Pin2=PA5
Mcu.Pin3=PA6 Mcu.Pin3=PA6
Mcu.Pin4=PA7 Mcu.Pin4=PA7
Mcu.Pin5=PB1 Mcu.Pin5=PA9
PA5.Signal=GPIO_Output PA5.Signal=GPIO_Output
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
RCC.HSE_VALUE=8000000 RCC.HSE_VALUE=8000000
@ -116,12 +116,11 @@ ProjectManager.UnderRoot=true
ProjectManager.CoupleFile=false ProjectManager.CoupleFile=false
RCC.SYSCLKFreq_VALUE=12000000 RCC.SYSCLKFreq_VALUE=12000000
Mcu.Package=UFQFPN20 Mcu.Package=UFQFPN20
PB1.Signal=LPUART1_DE
PA6.Signal=GPIO_Output PA6.Signal=GPIO_Output
PA7.GPIO_Label=LED_R PA7.GPIO_Label=LED_R
PA5.Locked=true PA5.Locked=true
PA7.Locked=true PA7.Locked=true
LPUART1.SwapParam=UART_ADVFEATURE_SWAP_DISABLE LPUART1.SwapParam=UART_ADVFEATURE_SWAP_ENABLE
PA5.GPIO_Label=LED_B PA5.GPIO_Label=LED_B
NVIC.ForceEnableDMAVector=true NVIC.ForceEnableDMAVector=true
KeepUserPlacement=false KeepUserPlacement=false
@ -133,12 +132,10 @@ PA10.Signal=I2C1_SDA
PA14.Signal=SYS_SWCLK PA14.Signal=SYS_SWCLK
ProjectManager.HeapSize=0x200 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
PB1.Mode=Hardware Flow Control (RS485)
PA5.GPIOParameters=PinState,GPIO_Label PA5.GPIOParameters=PinState,GPIO_Label
ProjectManager.ComputerToolchain=false ProjectManager.ComputerToolchain=false
RCC.HSI_VALUE=16000000 RCC.HSI_VALUE=16000000
Mcu.Pin11=VP_TIM21_VS_ClockSourceINT Mcu.Pin10=VP_TIM21_VS_ClockSourceINT
Mcu.Pin10=VP_SYS_VS_Systick
RCC.APB1TimFreq_Value=12000000 RCC.APB1TimFreq_Value=12000000
RCC.PWRFreq_Value=12000000 RCC.PWRFreq_Value=12000000
RCC.APB1Freq_Value=12000000 RCC.APB1Freq_Value=12000000