Ignore:
Timestamp:
Feb 5, 2025, 9:37:56 AM (3 months ago)
Author:
Zed
Message:

Modbus Master and Slave interfaces were added.

Location:
ctrl/firmware/Main/CubeMX/Core
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • ctrl/firmware/Main/CubeMX/Core/Inc/main.h

    r77 r81  
    5858
    5959/* Private defines -----------------------------------------------------------*/
     60#define USART_MODBUS_MASTER_RX_Pin GPIO_PIN_2
     61#define USART_MODBUS_MASTER_RX_GPIO_Port GPIOE
     62#define USART_MODBUS_MASTER_TX_Pin GPIO_PIN_3
     63#define USART_MODBUS_MASTER_TX_GPIO_Port GPIOE
    6064#define TX1_LED_Pin GPIO_PIN_6
    6165#define TX1_LED_GPIO_Port GPIOE
     
    96100#define ETH_SPI_PWR_Pin GPIO_PIN_3
    97101#define ETH_SPI_PWR_GPIO_Port GPIOD
     102#define USART_MODBUS_SLAVE_DE_Pin GPIO_PIN_4
     103#define USART_MODBUS_SLAVE_DE_GPIO_Port GPIOD
     104#define USART_MODBUS_SLAVE_TX_Pin GPIO_PIN_5
     105#define USART_MODBUS_SLAVE_TX_GPIO_Port GPIOD
     106#define USART_MODBUS_SLAVE_RX_Pin GPIO_PIN_6
     107#define USART_MODBUS_SLAVE_RX_GPIO_Port GPIOD
    98108#define OUTPUT_ON_LED_Pin GPIO_PIN_7
    99109#define OUTPUT_ON_LED_GPIO_Port GPIOD
     
    108118#define TX2_LED_Pin GPIO_PIN_13
    109119#define TX2_LED_GPIO_Port GPIOG
     120#define USART_MODBUS_MASTER_DE_Pin GPIO_PIN_14
     121#define USART_MODBUS_MASTER_DE_GPIO_Port GPIOG
    110122#define BUZZER_Pin GPIO_PIN_15
    111123#define BUZZER_GPIO_Port GPIOG
  • ctrl/firmware/Main/CubeMX/Core/Inc/stm32h7xx_it.h

    r79 r81  
    6161void TIM3_IRQHandler(void);
    6262void SPI2_IRQHandler(void);
     63void USART2_IRQHandler(void);
    6364void USART3_IRQHandler(void);
    6465void TIM8_CC_IRQHandler(void);
     
    6667void TIM7_IRQHandler(void);
    6768void SPI4_IRQHandler(void);
     69void USART10_IRQHandler(void);
    6870/* USER CODE BEGIN EFP */
    6971
  • ctrl/firmware/Main/CubeMX/Core/Inc/usart.h

    r61 r81  
    3333/* USER CODE END Includes */
    3434
     35extern UART_HandleTypeDef huart2;
     36
    3537extern UART_HandleTypeDef huart3;
     38
     39extern UART_HandleTypeDef huart10;
    3640
    3741/* USER CODE BEGIN Private defines */
     
    3943/* USER CODE END Private defines */
    4044
     45void MX_USART2_UART_Init(void);
    4146void MX_USART3_UART_Init(void);
     47void MX_USART10_UART_Init(void);
    4248
    4349/* USER CODE BEGIN Prototypes */
  • ctrl/firmware/Main/CubeMX/Core/Src/gpio.c

    r77 r81  
    7979  HAL_GPIO_WritePin(ETH_SPI_RST_GPIO_Port, ETH_SPI_RST_Pin, GPIO_PIN_RESET);
    8080
    81   /*Configure GPIO pins : PE2 PE3 PE4 PE5
    82                            PE8 PE9 PE10 PE0
    83                            PE1 */
    84   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
    85                           |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0
    86                           |GPIO_PIN_1;
     81  /*Configure GPIO pins : PE4 PE5 PE8 PE9
     82                           PE10 PE0 PE1 */
     83  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_9
     84                          |GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_1;
    8785  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    8886  GPIO_InitStruct.Pull = GPIO_NOPULL;
     
    167165  HAL_GPIO_Init(GSM_STATUS_GPIO_Port, &GPIO_InitStruct);
    168166
    169   /*Configure GPIO pins : PD14 PD15 PD0 PD1
    170                            PD4 PD5 PD6 */
    171   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1
    172                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
     167  /*Configure GPIO pins : PD14 PD15 PD0 PD1 */
     168  GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
    173169  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    174170  GPIO_InitStruct.Pull = GPIO_NOPULL;
     
    176172
    177173  /*Configure GPIO pins : PG2 PG3 PG4 PG5
    178                            PG6 PG7 PG8 PG14 */
     174                           PG6 PG7 PG8 */
    179175  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
    180                           |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_14;
     176                          |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;
    181177  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    182178  GPIO_InitStruct.Pull = GPIO_NOPULL;
  • ctrl/firmware/Main/CubeMX/Core/Src/main.c

    r78 r81  
    6262/* Private function prototypes -----------------------------------------------*/
    6363void SystemClock_Config(void);
     64void PeriphCommonClock_Config(void);
    6465static void MPU_Config(void);
    6566void MX_FREERTOS_Init(void);
     
    110111  /* Configure the system clock */
    111112  SystemClock_Config();
     113
     114  /* Configure the peripherals common clocks */
     115  PeriphCommonClock_Config();
    112116
    113117  /* USER CODE BEGIN SysInit */
     
    128132  MX_TIM8_Init();
    129133  MX_SPI2_Init();
     134  MX_USART2_UART_Init();
     135  MX_USART10_UART_Init();
    130136  /* USER CODE BEGIN 2 */
    131137
     
    218224}
    219225
     226/**
     227  * @brief Peripherals Common Clock Configuration
     228  * @retval None
     229  */
     230void PeriphCommonClock_Config(void)
     231{
     232  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
     233
     234  /** Initializes the peripherals clock
     235  */
     236  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART10|RCC_PERIPHCLK_USART2
     237                              |RCC_PERIPHCLK_USART3;
     238  PeriphClkInitStruct.PLL3.PLL3M = 25;
     239  PeriphClkInitStruct.PLL3.PLL3N = 200;
     240  PeriphClkInitStruct.PLL3.PLL3P = 2;
     241  PeriphClkInitStruct.PLL3.PLL3Q = 8;
     242  PeriphClkInitStruct.PLL3.PLL3R = 2;
     243  PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
     244  PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM;
     245  PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
     246  PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_PLL3;
     247  PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16910CLKSOURCE_PLL3;
     248  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
     249  {
     250    Error_Handler();
     251  }
     252}
     253
    220254/* USER CODE BEGIN 4 */
    221255
  • ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c

    r79 r81  
    7070extern DMA_HandleTypeDef hdma_usart3_rx;
    7171extern DMA_HandleTypeDef hdma_usart3_tx;
     72extern UART_HandleTypeDef huart2;
    7273extern UART_HandleTypeDef huart3;
     74extern UART_HandleTypeDef huart10;
    7375extern TIM_HandleTypeDef htim7;
    7476
     
    288290
    289291/**
     292  * @brief This function handles USART2 global interrupt.
     293  */
     294void USART2_IRQHandler(void)
     295{
     296  /* USER CODE BEGIN USART2_IRQn 0 */
     297
     298  /* USER CODE END USART2_IRQn 0 */
     299  HAL_UART_IRQHandler(&huart2);
     300  /* USER CODE BEGIN USART2_IRQn 1 */
     301
     302  /* USER CODE END USART2_IRQn 1 */
     303}
     304
     305/**
    290306  * @brief This function handles USART3 global interrupt.
    291307  */
     
    355371
    356372  /* USER CODE END SPI4_IRQn 1 */
     373}
     374
     375/**
     376  * @brief This function handles USART10 global interrupt.
     377  */
     378void USART10_IRQHandler(void)
     379{
     380  /* USER CODE BEGIN USART10_IRQn 0 */
     381
     382  /* USER CODE END USART10_IRQn 0 */
     383  HAL_UART_IRQHandler(&huart10);
     384  /* USER CODE BEGIN USART10_IRQn 1 */
     385
     386  /* USER CODE END USART10_IRQn 1 */
    357387}
    358388
  • ctrl/firmware/Main/CubeMX/Core/Src/usart.c

    r72 r81  
    2525/* USER CODE END 0 */
    2626
     27UART_HandleTypeDef huart2;
    2728UART_HandleTypeDef huart3;
     29UART_HandleTypeDef huart10;
    2830DMA_HandleTypeDef hdma_usart3_rx;
    2931DMA_HandleTypeDef hdma_usart3_tx;
    3032
     33/* USART2 init function */
     34
     35void MX_USART2_UART_Init(void)
     36{
     37
     38  /* USER CODE BEGIN USART2_Init 0 */
     39
     40  /* USER CODE END USART2_Init 0 */
     41
     42  /* USER CODE BEGIN USART2_Init 1 */
     43
     44  /* USER CODE END USART2_Init 1 */
     45  huart2.Instance = USART2;
     46  huart2.Init.BaudRate = 115200;
     47  huart2.Init.WordLength = UART_WORDLENGTH_8B;
     48  huart2.Init.StopBits = UART_STOPBITS_1;
     49  huart2.Init.Parity = UART_PARITY_NONE;
     50  huart2.Init.Mode = UART_MODE_TX_RX;
     51  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
     52  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
     53  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
     54  huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
     55  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
     56  if (HAL_RS485Ex_Init(&huart2, UART_DE_POLARITY_HIGH, 0, 0) != HAL_OK)
     57  {
     58    Error_Handler();
     59  }
     60  if (HAL_UARTEx_SetTxFifoThreshold(&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
     61  {
     62    Error_Handler();
     63  }
     64  if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
     65  {
     66    Error_Handler();
     67  }
     68  if (HAL_UARTEx_DisableFifoMode(&huart2) != HAL_OK)
     69  {
     70    Error_Handler();
     71  }
     72  /* USER CODE BEGIN USART2_Init 2 */
     73
     74  /* USER CODE END USART2_Init 2 */
     75
     76}
    3177/* USART3 init function */
    3278
     
    75121
    76122}
     123/* USART10 init function */
     124
     125void MX_USART10_UART_Init(void)
     126{
     127
     128  /* USER CODE BEGIN USART10_Init 0 */
     129
     130  /* USER CODE END USART10_Init 0 */
     131
     132  /* USER CODE BEGIN USART10_Init 1 */
     133
     134  /* USER CODE END USART10_Init 1 */
     135  huart10.Instance = USART10;
     136  huart10.Init.BaudRate = 115200;
     137  huart10.Init.WordLength = UART_WORDLENGTH_8B;
     138  huart10.Init.StopBits = UART_STOPBITS_1;
     139  huart10.Init.Parity = UART_PARITY_NONE;
     140  huart10.Init.Mode = UART_MODE_TX_RX;
     141  huart10.Init.HwFlowCtl = UART_HWCONTROL_NONE;
     142  huart10.Init.OverSampling = UART_OVERSAMPLING_16;
     143  huart10.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
     144  huart10.Init.ClockPrescaler = UART_PRESCALER_DIV1;
     145  huart10.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
     146  if (HAL_RS485Ex_Init(&huart10, UART_DE_POLARITY_HIGH, 0, 0) != HAL_OK)
     147  {
     148    Error_Handler();
     149  }
     150  if (HAL_UARTEx_SetTxFifoThreshold(&huart10, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
     151  {
     152    Error_Handler();
     153  }
     154  if (HAL_UARTEx_SetRxFifoThreshold(&huart10, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
     155  {
     156    Error_Handler();
     157  }
     158  if (HAL_UARTEx_DisableFifoMode(&huart10) != HAL_OK)
     159  {
     160    Error_Handler();
     161  }
     162  /* USER CODE BEGIN USART10_Init 2 */
     163
     164  /* USER CODE END USART10_Init 2 */
     165
     166}
    77167
    78168void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
     
    80170
    81171  GPIO_InitTypeDef GPIO_InitStruct = {0};
    82   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
    83   if(uartHandle->Instance==USART3)
     172  if(uartHandle->Instance==USART2)
     173  {
     174  /* USER CODE BEGIN USART2_MspInit 0 */
     175
     176  /* USER CODE END USART2_MspInit 0 */
     177    /* USART2 clock enable */
     178    __HAL_RCC_USART2_CLK_ENABLE();
     179
     180    __HAL_RCC_GPIOD_CLK_ENABLE();
     181    /**USART2 GPIO Configuration
     182    PD4     ------> USART2_DE
     183    PD5     ------> USART2_TX
     184    PD6     ------> USART2_RX
     185    */
     186    GPIO_InitStruct.Pin = USART_MODBUS_SLAVE_DE_Pin|USART_MODBUS_SLAVE_TX_Pin|USART_MODBUS_SLAVE_RX_Pin;
     187    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     188    GPIO_InitStruct.Pull = GPIO_NOPULL;
     189    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     190    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
     191    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
     192
     193    /* USART2 interrupt Init */
     194    HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);
     195    HAL_NVIC_EnableIRQ(USART2_IRQn);
     196  /* USER CODE BEGIN USART2_MspInit 1 */
     197
     198  /* USER CODE END USART2_MspInit 1 */
     199  }
     200  else if(uartHandle->Instance==USART3)
    84201  {
    85202  /* USER CODE BEGIN USART3_MspInit 0 */
    86203
    87204  /* USER CODE END USART3_MspInit 0 */
    88 
    89   /** Initializes the peripherals clock
    90   */
    91     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3;
    92     PeriphClkInitStruct.PLL3.PLL3M = 25;
    93     PeriphClkInitStruct.PLL3.PLL3N = 200;
    94     PeriphClkInitStruct.PLL3.PLL3P = 2;
    95     PeriphClkInitStruct.PLL3.PLL3Q = 8;
    96     PeriphClkInitStruct.PLL3.PLL3R = 2;
    97     PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
    98     PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOMEDIUM;
    99     PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
    100     PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_PLL3;
    101     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    102     {
    103       Error_Handler();
    104     }
    105 
    106205    /* USART3 clock enable */
    107206    __HAL_RCC_USART3_CLK_ENABLE();
     
    165264  /* USER CODE END USART3_MspInit 1 */
    166265  }
     266  else if(uartHandle->Instance==USART10)
     267  {
     268  /* USER CODE BEGIN USART10_MspInit 0 */
     269
     270  /* USER CODE END USART10_MspInit 0 */
     271    /* USART10 clock enable */
     272    __HAL_RCC_USART10_CLK_ENABLE();
     273
     274    __HAL_RCC_GPIOE_CLK_ENABLE();
     275    __HAL_RCC_GPIOG_CLK_ENABLE();
     276    /**USART10 GPIO Configuration
     277    PE2     ------> USART10_RX
     278    PE3     ------> USART10_TX
     279    PG14     ------> USART10_DE
     280    */
     281    GPIO_InitStruct.Pin = USART_MODBUS_MASTER_RX_Pin;
     282    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     283    GPIO_InitStruct.Pull = GPIO_NOPULL;
     284    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     285    GPIO_InitStruct.Alternate = GPIO_AF4_USART10;
     286    HAL_GPIO_Init(USART_MODBUS_MASTER_RX_GPIO_Port, &GPIO_InitStruct);
     287
     288    GPIO_InitStruct.Pin = USART_MODBUS_MASTER_TX_Pin;
     289    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     290    GPIO_InitStruct.Pull = GPIO_NOPULL;
     291    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     292    GPIO_InitStruct.Alternate = GPIO_AF11_USART10;
     293    HAL_GPIO_Init(USART_MODBUS_MASTER_TX_GPIO_Port, &GPIO_InitStruct);
     294
     295    GPIO_InitStruct.Pin = USART_MODBUS_MASTER_DE_Pin;
     296    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     297    GPIO_InitStruct.Pull = GPIO_NOPULL;
     298    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
     299    GPIO_InitStruct.Alternate = GPIO_AF4_USART10;
     300    HAL_GPIO_Init(USART_MODBUS_MASTER_DE_GPIO_Port, &GPIO_InitStruct);
     301
     302    /* USART10 interrupt Init */
     303    HAL_NVIC_SetPriority(USART10_IRQn, 5, 0);
     304    HAL_NVIC_EnableIRQ(USART10_IRQn);
     305  /* USER CODE BEGIN USART10_MspInit 1 */
     306
     307  /* USER CODE END USART10_MspInit 1 */
     308  }
    167309}
    168310
     
    170312{
    171313
    172   if(uartHandle->Instance==USART3)
     314  if(uartHandle->Instance==USART2)
     315  {
     316  /* USER CODE BEGIN USART2_MspDeInit 0 */
     317
     318  /* USER CODE END USART2_MspDeInit 0 */
     319    /* Peripheral clock disable */
     320    __HAL_RCC_USART2_CLK_DISABLE();
     321
     322    /**USART2 GPIO Configuration
     323    PD4     ------> USART2_DE
     324    PD5     ------> USART2_TX
     325    PD6     ------> USART2_RX
     326    */
     327    HAL_GPIO_DeInit(GPIOD, USART_MODBUS_SLAVE_DE_Pin|USART_MODBUS_SLAVE_TX_Pin|USART_MODBUS_SLAVE_RX_Pin);
     328
     329    /* USART2 interrupt Deinit */
     330    HAL_NVIC_DisableIRQ(USART2_IRQn);
     331  /* USER CODE BEGIN USART2_MspDeInit 1 */
     332
     333  /* USER CODE END USART2_MspDeInit 1 */
     334  }
     335  else if(uartHandle->Instance==USART3)
    173336  {
    174337  /* USER CODE BEGIN USART3_MspDeInit 0 */
     
    196359  /* USER CODE END USART3_MspDeInit 1 */
    197360  }
     361  else if(uartHandle->Instance==USART10)
     362  {
     363  /* USER CODE BEGIN USART10_MspDeInit 0 */
     364
     365  /* USER CODE END USART10_MspDeInit 0 */
     366    /* Peripheral clock disable */
     367    __HAL_RCC_USART10_CLK_DISABLE();
     368
     369    /**USART10 GPIO Configuration
     370    PE2     ------> USART10_RX
     371    PE3     ------> USART10_TX
     372    PG14     ------> USART10_DE
     373    */
     374    HAL_GPIO_DeInit(GPIOE, USART_MODBUS_MASTER_RX_Pin|USART_MODBUS_MASTER_TX_Pin);
     375
     376    HAL_GPIO_DeInit(USART_MODBUS_MASTER_DE_GPIO_Port, USART_MODBUS_MASTER_DE_Pin);
     377
     378    /* USART10 interrupt Deinit */
     379    HAL_NVIC_DisableIRQ(USART10_IRQn);
     380  /* USER CODE BEGIN USART10_MspDeInit 1 */
     381
     382  /* USER CODE END USART10_MspDeInit 1 */
     383  }
    198384}
    199385
Note: See TracChangeset for help on using the changeset viewer.