Browse Source

[stm32 nucleo][f072][f401] support TIM7/TIM11 hardware timer

Meco Man 3 years ago
parent
commit
8a7b9da76d

+ 11 - 0
bsp/stm32/libraries/HAL_Drivers/config/f0/tim_config.h

@@ -27,6 +27,17 @@ extern "C" {
     }
 #endif /* TIM_DEV_INFO_CONFIG */
 
+#ifdef BSP_USING_TIM7
+#ifndef TIM7_CONFIG
+#define TIM7_CONFIG                                        \
+    {                                                      \
+       .tim_handle.Instance     = TIM7,                    \
+       .tim_irqn                = TIM7_IRQn,               \
+       .name                    = "timer7",                \
+    }
+#endif /* TIM7_CONFIG */
+#endif /* BSP_USING_TIM7 */
+
 #ifdef BSP_USING_TIM14
 #ifndef TIM14_CONFIG
 #define TIM14_CONFIG                             \

+ 2 - 1
bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c

@@ -599,7 +599,8 @@ static int stm32_hwtimer_init(void)
     {
         stm32_hwtimer_obj[i].time_device.info = &_info;
         stm32_hwtimer_obj[i].time_device.ops  = &_ops;
-        if (rt_device_hwtimer_register(&stm32_hwtimer_obj[i].time_device, stm32_hwtimer_obj[i].name, &stm32_hwtimer_obj[i].tim_handle) == RT_EOK)
+        if (rt_device_hwtimer_register(&stm32_hwtimer_obj[i].time_device,
+            stm32_hwtimer_obj[i].name, &stm32_hwtimer_obj[i].tim_handle) == RT_EOK)
         {
             LOG_D("%s register success", stm32_hwtimer_obj[i].name);
         }

+ 2 - 1
bsp/stm32/stm32f072-st-nucleo/applications/arduino_pinout/pins_arduino.h

@@ -40,6 +40,7 @@
 
 #define LED_BUILTIN  D13 /* Default Built-in LED */
 
-#define RTDUINO_DEFAULT_IIC_BUS_NAME "i2c1"
+#define RTDUINO_DEFAULT_IIC_BUS_NAME            "i2c1"
+#define RTDUINO_DEFAULT_HWTIMER_DEVICE_NAME     "timer7"
 
 #endif /* Pins_Arduino_h */

File diff suppressed because it is too large
+ 0 - 0
bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/.mxproject


+ 11 - 7
bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc

@@ -9,10 +9,11 @@ Mcu.IP2=RCC
 Mcu.IP3=SYS
 Mcu.IP4=TIM2
 Mcu.IP5=TIM3
-Mcu.IP6=TIM16
-Mcu.IP7=TIM17
-Mcu.IP8=USART2
-Mcu.IPNb=9
+Mcu.IP6=TIM7
+Mcu.IP7=TIM16
+Mcu.IP8=TIM17
+Mcu.IP9=USART2
+Mcu.IPNb=10
 Mcu.Name=STM32F072R(8-B)Tx
 Mcu.Package=LQFP64
 Mcu.Pin0=PC13
@@ -35,8 +36,9 @@ Mcu.Pin23=VP_ADC_Vref_Input
 Mcu.Pin24=VP_SYS_VS_Systick
 Mcu.Pin25=VP_TIM2_VS_ClockSourceINT
 Mcu.Pin26=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin27=VP_TIM16_VS_ClockSourceINT
-Mcu.Pin28=VP_TIM17_VS_ClockSourceINT
+Mcu.Pin27=VP_TIM7_VS_ClockSourceINT
+Mcu.Pin28=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin29=VP_TIM17_VS_ClockSourceINT
 Mcu.Pin3=PF0-OSC_IN
 Mcu.Pin4=PF1-OSC_OUT
 Mcu.Pin5=PC0
@@ -44,7 +46,7 @@ Mcu.Pin6=PC1
 Mcu.Pin7=PA0
 Mcu.Pin8=PA1
 Mcu.Pin9=PA2
-Mcu.PinsNb=29
+Mcu.PinsNb=30
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F072RBTx
@@ -225,5 +227,7 @@ VP_TIM2_VS_ClockSourceINT.Mode=Internal
 VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
 VP_TIM3_VS_ClockSourceINT.Mode=Internal
 VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
+VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer
+VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT
 board=NUCLEO-F072RB
 boardIOC=true

+ 41 - 0
bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/main.c

@@ -65,6 +65,7 @@
 
 TIM_HandleTypeDef htim2;
 TIM_HandleTypeDef htim3;
+TIM_HandleTypeDef htim7;
 TIM_HandleTypeDef htim16;
 TIM_HandleTypeDef htim17;
 
@@ -84,6 +85,7 @@ static void MX_TIM2_Init(void);
 static void MX_TIM3_Init(void);
 static void MX_TIM16_Init(void);
 static void MX_TIM17_Init(void);
+static void MX_TIM7_Init(void);
 /* USER CODE BEGIN PFP */
 /* Private function prototypes -----------------------------------------------*/
 
@@ -128,6 +130,7 @@ int main(void)
   MX_TIM3_Init();
   MX_TIM16_Init();
   MX_TIM17_Init();
+  MX_TIM7_Init();
   /* USER CODE BEGIN 2 */
 
   /* USER CODE END 2 */
@@ -422,6 +425,44 @@ static void MX_TIM3_Init(void)
 
 }
 
+/**
+  * @brief TIM7 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void MX_TIM7_Init(void)
+{
+
+  /* USER CODE BEGIN TIM7_Init 0 */
+
+  /* USER CODE END TIM7_Init 0 */
+
+  TIM_MasterConfigTypeDef sMasterConfig = {0};
+
+  /* USER CODE BEGIN TIM7_Init 1 */
+
+  /* USER CODE END TIM7_Init 1 */
+  htim7.Instance = TIM7;
+  htim7.Init.Prescaler = 0;
+  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
+  htim7.Init.Period = 65535;
+  htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+  if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+  if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN TIM7_Init 2 */
+
+  /* USER CODE END TIM7_Init 2 */
+
+}
+
 /**
   * @brief TIM16 Initialization Function
   * @param None

+ 22 - 0
bsp/stm32/stm32f072-st-nucleo/board/CubeMX_Config/Src/stm32f0xx_hal_msp.c

@@ -216,6 +216,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
 
   /* USER CODE END TIM3_MspInit 1 */
   }
+  else if(htim_base->Instance==TIM7)
+  {
+  /* USER CODE BEGIN TIM7_MspInit 0 */
+
+  /* USER CODE END TIM7_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_TIM7_CLK_ENABLE();
+  /* USER CODE BEGIN TIM7_MspInit 1 */
+
+  /* USER CODE END TIM7_MspInit 1 */
+  }
   else if(htim_base->Instance==TIM16)
   {
   /* USER CODE BEGIN TIM16_MspInit 0 */
@@ -369,6 +380,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
 
   /* USER CODE END TIM3_MspDeInit 1 */
   }
+  else if(htim_base->Instance==TIM7)
+  {
+  /* USER CODE BEGIN TIM7_MspDeInit 0 */
+
+  /* USER CODE END TIM7_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_TIM7_CLK_DISABLE();
+  /* USER CODE BEGIN TIM7_MspDeInit 1 */
+
+  /* USER CODE END TIM7_MspDeInit 1 */
+  }
   else if(htim_base->Instance==TIM16)
   {
   /* USER CODE BEGIN TIM16_MspDeInit 0 */

+ 12 - 0
bsp/stm32/stm32f072-st-nucleo/board/Kconfig

@@ -19,6 +19,8 @@ menu "Onboard Peripheral Drivers"
         select PKG_USING_RTDUINO
         select BSP_USING_STLINK_TO_USART
         select BSP_USING_GPIO
+        select BSP_USING_TIM
+        select BSP_USING_TIM7
         select BSP_USING_ADC
         select BSP_USING_ADC1
         select BSP_USING_PWM
@@ -82,6 +84,16 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
+    menuconfig BSP_USING_TIM
+        bool "Enable timer"
+        default n
+        select RT_USING_HWTIMER
+        if BSP_USING_TIM
+            config BSP_USING_TIM7
+                bool "Enable TIM7"
+                default n
+        endif
+
     menuconfig BSP_USING_PWM
         bool "Enable PWM"
         default n

+ 3 - 2
bsp/stm32/stm32f401-st-nucleo/applications/arduino_pinout/pins_arduino.h

@@ -40,7 +40,8 @@
 
 #define LED_BUILTIN  D13 /* Default Built-in LED */
 
-#define RTDUINO_DEFAULT_IIC_BUS_NAME "i2c1"
-#define RTDUINO_DEFAULT_SPI_BUS_NAME "spi1"
+#define RTDUINO_DEFAULT_IIC_BUS_NAME            "i2c1"
+#define RTDUINO_DEFAULT_SPI_BUS_NAME            "spi1"
+#define RTDUINO_DEFAULT_HWTIMER_DEVICE_NAME     "timer11"
 
 #endif /* Pins_Arduino_h */

File diff suppressed because it is too large
+ 0 - 0
bsp/stm32/stm32f401-st-nucleo/board/CubeMX_Config/.mxproject


+ 7 - 3
bsp/stm32/stm32f401-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc

@@ -16,8 +16,9 @@ Mcu.IP3=SPI1
 Mcu.IP4=SYS
 Mcu.IP5=TIM2
 Mcu.IP6=TIM3
-Mcu.IP7=USART2
-Mcu.IPNb=8
+Mcu.IP7=TIM11
+Mcu.IP8=USART2
+Mcu.IPNb=9
 Mcu.Name=STM32F401R(D-E)Tx
 Mcu.Package=LQFP64
 Mcu.Pin0=PC14-OSC32_IN
@@ -37,6 +38,7 @@ Mcu.Pin20=PB4
 Mcu.Pin21=VP_ADC1_TempSens_Input
 Mcu.Pin22=VP_ADC1_Vref_Input
 Mcu.Pin23=VP_SYS_VS_Systick
+Mcu.Pin24=VP_TIM11_VS_ClockSourceINT
 Mcu.Pin3=PH1 - OSC_OUT
 Mcu.Pin4=PC0
 Mcu.Pin5=PC1
@@ -44,7 +46,7 @@ Mcu.Pin6=PA0-WKUP
 Mcu.Pin7=PA1
 Mcu.Pin8=PA2
 Mcu.Pin9=PA3
-Mcu.PinsNb=24
+Mcu.PinsNb=25
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F401RETx
@@ -205,4 +207,6 @@ VP_ADC1_Vref_Input.Mode=IN-Vrefint
 VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
 VP_SYS_VS_Systick.Mode=SysTick
 VP_SYS_VS_Systick.Signal=SYS_VS_Systick
+VP_TIM11_VS_ClockSourceINT.Mode=Enable_Timer
+VP_TIM11_VS_ClockSourceINT.Signal=TIM11_VS_ClockSourceINT
 board=custom

+ 34 - 0
bsp/stm32/stm32f401-st-nucleo/board/CubeMX_Config/Src/main.c

@@ -67,6 +67,7 @@ SPI_HandleTypeDef hspi1;
 
 TIM_HandleTypeDef htim2;
 TIM_HandleTypeDef htim3;
+TIM_HandleTypeDef htim11;
 
 UART_HandleTypeDef huart2;
 
@@ -82,6 +83,7 @@ static void MX_SPI1_Init(void);
 static void MX_ADC1_Init(void);
 static void MX_TIM2_Init(void);
 static void MX_TIM3_Init(void);
+static void MX_TIM11_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -124,6 +126,7 @@ int main(void)
   MX_ADC1_Init();
   MX_TIM2_Init();
   MX_TIM3_Init();
+  MX_TIM11_Init();
   /* USER CODE BEGIN 2 */
 
   /* USER CODE END 2 */
@@ -385,6 +388,37 @@ static void MX_TIM3_Init(void)
 
 }
 
+/**
+  * @brief TIM11 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void MX_TIM11_Init(void)
+{
+
+  /* USER CODE BEGIN TIM11_Init 0 */
+
+  /* USER CODE END TIM11_Init 0 */
+
+  /* USER CODE BEGIN TIM11_Init 1 */
+
+  /* USER CODE END TIM11_Init 1 */
+  htim11.Instance = TIM11;
+  htim11.Init.Prescaler = 0;
+  htim11.Init.CounterMode = TIM_COUNTERMODE_UP;
+  htim11.Init.Period = 65535;
+  htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+  htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+  if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN TIM11_Init 2 */
+
+  /* USER CODE END TIM11_Init 2 */
+
+}
+
 /**
   * @brief USART2 Initialization Function
   * @param None

+ 44 - 0
bsp/stm32/stm32f401-st-nucleo/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c

@@ -286,6 +286,28 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
 
 }
 
+/**
+* @brief TIM_Base MSP Initialization
+* This function configures the hardware resources used in this example
+* @param htim_base: TIM_Base handle pointer
+* @retval None
+*/
+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
+{
+  if(htim_base->Instance==TIM11)
+  {
+  /* USER CODE BEGIN TIM11_MspInit 0 */
+
+  /* USER CODE END TIM11_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_TIM11_CLK_ENABLE();
+  /* USER CODE BEGIN TIM11_MspInit 1 */
+
+  /* USER CODE END TIM11_MspInit 1 */
+  }
+
+}
+
 void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
 {
   GPIO_InitTypeDef GPIO_InitStruct = {0};
@@ -375,6 +397,28 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm)
 
 }
 
+/**
+* @brief TIM_Base MSP De-Initialization
+* This function freeze the hardware resources used in this example
+* @param htim_base: TIM_Base handle pointer
+* @retval None
+*/
+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
+{
+  if(htim_base->Instance==TIM11)
+  {
+  /* USER CODE BEGIN TIM11_MspDeInit 0 */
+
+  /* USER CODE END TIM11_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_TIM11_CLK_DISABLE();
+  /* USER CODE BEGIN TIM11_MspDeInit 1 */
+
+  /* USER CODE END TIM11_MspDeInit 1 */
+  }
+
+}
+
 /**
 * @brief UART MSP Initialization
 * This function configures the hardware resources used in this example

+ 12 - 0
bsp/stm32/stm32f401-st-nucleo/board/Kconfig

@@ -19,6 +19,8 @@ menu "Onboard Peripheral Drivers"
         select PKG_USING_RTDUINO
         select BSP_USING_STLINK_TO_USART
         select BSP_USING_GPIO
+        select BSP_USING_TIM
+        select BSP_USING_TIM11
         select BSP_USING_ADC
         select BSP_USING_ADC1
         select BSP_USING_PWM
@@ -72,6 +74,16 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
+    menuconfig BSP_USING_TIM
+        bool "Enable timer"
+        default n
+        select RT_USING_HWTIMER
+        if BSP_USING_TIM
+            config BSP_USING_TIM11
+                bool "Enable TIM11"
+                default n
+        endif
+
     menuconfig BSP_USING_PWM
         bool "Enable PWM"
         default n

+ 2 - 2
bsp/stm32/stm32l475-atk-pandora/board/Kconfig

@@ -24,6 +24,8 @@ menu "Onboard Peripheral Drivers"
         select PKG_USING_RTDUINO
         select BSP_USING_STLINK_TO_USART
         select BSP_USING_GPIO
+        select BSP_USING_TIM
+        select BSP_USING_TIM7
         select BSP_USING_PWM
         select BSP_USING_PWM1
         select BSP_USING_PWM1_CH1
@@ -44,8 +46,6 @@ menu "Onboard Peripheral Drivers"
         select BSP_USING_DAC1
         select BSP_USING_SPI
         select BSP_USING_SPI2
-        select BSP_USING_TIM
-        select BSP_USING_TIM7
         imply BSP_SPI2_TX_USING_DMA
         imply BSP_SPI2_RX_USING_DMA
         imply RTDUINO_USING_SERVO

Some files were not shown because too many files changed in this diff