Browse Source

USART as RS485

Juraj Ďuďák 2 years ago
parent
commit
c2379cbf41
4 changed files with 60 additions and 54 deletions
  1. 5 5
      Core/Src/main.c
  2. 10 8
      Core/Src/stm32l0xx_hal_msp.c
  3. 1 1
      Modules/nbus
  4. 44 40
      baModule-slave.ioc

+ 5 - 5
Core/Src/main.c

@@ -255,7 +255,7 @@ static void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-  sConfig.Channel = ADC_CHANNEL_1;
+  sConfig.Channel = ADC_CHANNEL_2;
   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
   {
     Error_Handler();
@@ -263,7 +263,7 @@ static void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-  sConfig.Channel = ADC_CHANNEL_2;
+  sConfig.Channel = ADC_CHANNEL_3;
   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
   {
     Error_Handler();
@@ -271,7 +271,7 @@ static void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-  sConfig.Channel = ADC_CHANNEL_3;
+  sConfig.Channel = ADC_CHANNEL_4;
   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
   {
     Error_Handler();
@@ -279,7 +279,7 @@ static void MX_ADC_Init(void)
 
   /** Configure for the selected ADC regular channel to be converted.
   */
-  sConfig.Channel = ADC_CHANNEL_4;
+  sConfig.Channel = ADC_CHANNEL_5;
   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
   {
     Error_Handler();
@@ -493,7 +493,7 @@ static void MX_USART2_UART_Init(void)
   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
-  if (HAL_UART_Init(&huart2) != HAL_OK)
+  if (HAL_RS485Ex_Init(&huart2, UART_DE_POLARITY_HIGH, 0, 0) != HAL_OK)
   {
     Error_Handler();
   }

+ 10 - 8
Core/Src/stm32l0xx_hal_msp.c

@@ -101,16 +101,16 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
     __HAL_RCC_GPIOB_CLK_ENABLE();
     /**ADC GPIO Configuration
     PA0-CK_IN     ------> ADC_IN0
-    PA1     ------> ADC_IN1
     PA2     ------> ADC_IN2
     PA3     ------> ADC_IN3
     PA4     ------> ADC_IN4
+    PA5     ------> ADC_IN5
     PA6     ------> ADC_IN6
     PA7     ------> ADC_IN7
     PB0     ------> ADC_IN8
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
-                          |GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7;
+    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
+                          |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
@@ -166,16 +166,16 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
 
     /**ADC GPIO Configuration
     PA0-CK_IN     ------> ADC_IN0
-    PA1     ------> ADC_IN1
     PA2     ------> ADC_IN2
     PA3     ------> ADC_IN3
     PA4     ------> ADC_IN4
+    PA5     ------> ADC_IN5
     PA6     ------> ADC_IN6
     PA7     ------> ADC_IN7
     PB0     ------> ADC_IN8
     */
-    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
-                          |GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7);
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
+                          |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
 
     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0);
 
@@ -332,10 +332,11 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
     __HAL_RCC_GPIOA_CLK_ENABLE();
     /**USART2 GPIO Configuration
+    PA1     ------> USART2_DE
     PA9     ------> USART2_TX
     PA10     ------> USART2_RX
     */
-    GPIO_InitStruct.Pin = VCP_TX_Pin|VCP_RX_Pin;
+    GPIO_InitStruct.Pin = GPIO_PIN_1|VCP_TX_Pin|VCP_RX_Pin;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@@ -387,10 +388,11 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
     __HAL_RCC_USART2_CLK_DISABLE();
 
     /**USART2 GPIO Configuration
+    PA1     ------> USART2_DE
     PA9     ------> USART2_TX
     PA10     ------> USART2_RX
     */
-    HAL_GPIO_DeInit(GPIOA, VCP_TX_Pin|VCP_RX_Pin);
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|VCP_TX_Pin|VCP_RX_Pin);
 
     /* USART2 DMA DeInit */
     HAL_DMA_DeInit(huart->hdmatx);

+ 1 - 1
Modules/nbus

@@ -1 +1 @@
-Subproject commit c1ae1538d909db7307dd20445dbe1beccea076ba
+Subproject commit e2b19551a533cecf768395769150a62d60c8d267

+ 44 - 40
baModule-slave.ioc

@@ -7,27 +7,27 @@ ADC.SamplingTime=ADC_SAMPLETIME_79CYCLES_5
 CAD.formats=
 CAD.pinconfig=
 CAD.provider=
-Dma.ADC.1.Direction=DMA_PERIPH_TO_MEMORY
-Dma.ADC.1.Instance=DMA1_Channel1
-Dma.ADC.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
-Dma.ADC.1.MemInc=DMA_MINC_ENABLE
-Dma.ADC.1.Mode=DMA_CIRCULAR
-Dma.ADC.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
-Dma.ADC.1.PeriphInc=DMA_PINC_DISABLE
-Dma.ADC.1.Priority=DMA_PRIORITY_MEDIUM
-Dma.ADC.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
-Dma.Request0=USART2_TX
-Dma.Request1=ADC
+Dma.ADC.0.Direction=DMA_PERIPH_TO_MEMORY
+Dma.ADC.0.Instance=DMA1_Channel1
+Dma.ADC.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
+Dma.ADC.0.MemInc=DMA_MINC_ENABLE
+Dma.ADC.0.Mode=DMA_CIRCULAR
+Dma.ADC.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
+Dma.ADC.0.PeriphInc=DMA_PINC_DISABLE
+Dma.ADC.0.Priority=DMA_PRIORITY_MEDIUM
+Dma.ADC.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.Request0=ADC
+Dma.Request1=USART2_TX
 Dma.RequestsNb=2
-Dma.USART2_TX.0.Direction=DMA_MEMORY_TO_PERIPH
-Dma.USART2_TX.0.Instance=DMA1_Channel4
-Dma.USART2_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
-Dma.USART2_TX.0.MemInc=DMA_MINC_ENABLE
-Dma.USART2_TX.0.Mode=DMA_NORMAL
-Dma.USART2_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
-Dma.USART2_TX.0.PeriphInc=DMA_PINC_DISABLE
-Dma.USART2_TX.0.Priority=DMA_PRIORITY_LOW
-Dma.USART2_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
+Dma.USART2_TX.1.Direction=DMA_MEMORY_TO_PERIPH
+Dma.USART2_TX.1.Instance=DMA1_Channel4
+Dma.USART2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.USART2_TX.1.MemInc=DMA_MINC_ENABLE
+Dma.USART2_TX.1.Mode=DMA_NORMAL
+Dma.USART2_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.USART2_TX.1.PeriphInc=DMA_PINC_DISABLE
+Dma.USART2_TX.1.Priority=DMA_PRIORITY_LOW
+Dma.USART2_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 File.Version=6
 KeepUserPlacement=false
 Mcu.CPN=STM32L031K6T6
@@ -46,27 +46,28 @@ Mcu.Name=STM32L031K(4-6)Tx
 Mcu.Package=LQFP32
 Mcu.Pin0=PC14-OSC32_IN
 Mcu.Pin1=PC15-OSC32_OUT
-Mcu.Pin10=PB1
-Mcu.Pin11=PA9
-Mcu.Pin12=PA10
-Mcu.Pin13=PA11
-Mcu.Pin14=PA12
-Mcu.Pin15=PA13
-Mcu.Pin16=PA14
-Mcu.Pin17=PB3
-Mcu.Pin18=VP_RTC_VS_RTC_Activate
-Mcu.Pin19=VP_RTC_VS_RTC_Calendar
+Mcu.Pin10=PB0
+Mcu.Pin11=PB1
+Mcu.Pin12=PA9
+Mcu.Pin13=PA10
+Mcu.Pin14=PA11
+Mcu.Pin15=PA12
+Mcu.Pin16=PA13
+Mcu.Pin17=PA14
+Mcu.Pin18=PB3
+Mcu.Pin19=VP_RTC_VS_RTC_Activate
 Mcu.Pin2=PA0-CK_IN
-Mcu.Pin20=VP_TIM21_VS_ClockSourceINT
-Mcu.Pin21=VP_TIM22_VS_ClockSourceINT
+Mcu.Pin20=VP_RTC_VS_RTC_Calendar
+Mcu.Pin21=VP_TIM21_VS_ClockSourceINT
+Mcu.Pin22=VP_TIM22_VS_ClockSourceINT
 Mcu.Pin3=PA1
 Mcu.Pin4=PA2
 Mcu.Pin5=PA3
 Mcu.Pin6=PA4
-Mcu.Pin7=PA6
-Mcu.Pin8=PA7
-Mcu.Pin9=PB0
-Mcu.PinsNb=22
+Mcu.Pin7=PA5
+Mcu.Pin8=PA6
+Mcu.Pin9=PA7
+Mcu.PinsNb=23
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32L031K6Tx
@@ -86,8 +87,8 @@ NVIC.TIM22_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 PA0-CK_IN.Mode=IN0
 PA0-CK_IN.Signal=ADC_IN0
-PA1.Mode=IN1
-PA1.Signal=ADC_IN1
+PA1.Mode=Hardware Flow Control (RS485)
+PA1.Signal=USART2_DE
 PA10.GPIOParameters=GPIO_Label
 PA10.GPIO_Label=VCP_RX
 PA10.Locked=true
@@ -115,6 +116,8 @@ PA3.Mode=IN3
 PA3.Signal=ADC_IN3
 PA4.Mode=IN4
 PA4.Signal=ADC_IN4
+PA5.Mode=IN5
+PA5.Signal=ADC_IN5
 PA6.Mode=IN6
 PA6.Signal=ADC_IN6
 PA7.Mode=IN7
@@ -162,7 +165,7 @@ ProjectManager.ProjectBuild=false
 ProjectManager.ProjectFileName=baModule-slave.ioc
 ProjectManager.ProjectName=baModule-slave
 ProjectManager.ProjectStructure=
-ProjectManager.RegisterCallBack=TIM,UART,ADC
+ProjectManager.RegisterCallBack=ADC,TIM,UART
 ProjectManager.StackSize=0x400
 ProjectManager.TargetToolchain=STM32CubeIDE
 ProjectManager.ToolChainLocation=
@@ -212,9 +215,10 @@ TIM22.IPParameters=Prescaler
 TIM22.IPParametersWithoutCheck=Prescaler
 TIM22.Prescaler=UART_TIMER_PRESCALER
 USART2.BaudRate=UART_BAUDRATE
-USART2.IPParameters=VirtualMode-Asynchronous,BaudRate
+USART2.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485),BaudRate
 USART2.IPParametersWithoutCheck=BaudRate
 USART2.VirtualMode-Asynchronous=VM_ASYNC
+USART2.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC
 VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
 VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
 VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar