TelenkovDmitry 1 年間 前
コミット
cd138205bf
4 ファイル変更543 行追加492 行削除
  1. 119 113
      modules/pwm_in.c
  2. BIN
      output/lasertag.bin
  3. 418 372
      project/ewarm/drone.dep
  4. 6 7
      project/settings/drone.wsdt

+ 119 - 113
modules/pwm_in.c

@@ -1,113 +1,119 @@
-#include "stm32f0xx_hal.h"
-#include "pwm_in.h"
-#include <stdio.h>
-
-
-
-static TIM_HandleTypeDef       TimHandle;
-static TIM_IC_InitTypeDef      sConfig;
-static TIM_SlaveConfigTypeDef  sSlaveConfig;
-
-
-__IO uint32_t uwIC2Value = 0;  // Captured Value
-__IO uint32_t uwDutyCycle = 0; // Duty Cycle Value
-__IO uint32_t uwFrequency = 0; // Frequency Value
-
-//
-void tim_pwm_in_init(void)
-{
-    GPIO_InitTypeDef   GPIO_InitStruct;
-    
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    __HAL_RCC_TIM3_CLK_ENABLE();
-  
-    GPIO_InitStruct.Pin = GPIO_PIN_6;
-    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
-    GPIO_InitStruct.Pull = GPIO_PULLUP;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
-    GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;//GPIO_AF0_TIM3;
-    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-    
-    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1);
-    //HAL_NVIC_SetPriority(TIM3_IRQn, 2, 0); // From lasertag project
-    HAL_NVIC_EnableIRQ(TIM3_IRQn);
-        
-    TimHandle.Instance = TIM3;
-
-    TimHandle.Init.Period            = 0xFFFF;
-    TimHandle.Init.Prescaler         = 0;
-    TimHandle.Init.ClockDivision     = 0;
-    TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
-    TimHandle.Init.RepetitionCounter = 0;
-    TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
-    HAL_TIM_IC_Init(&TimHandle);
-    //HAL_TIM_Base_Init(&TimHandle);
-
-    sConfig.ICPrescaler = TIM_ICPSC_DIV1;
-    sConfig.ICFilter = 0;
-  
-    sConfig.ICPolarity = TIM_ICPOLARITY_RISING; ;
-    sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;
-    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1);
-    
-    sConfig.ICPolarity = TIM_ICPOLARITY_FALLING;
-    sConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI;
-    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
-    
-    sSlaveConfig.SlaveMode        = TIM_SLAVEMODE_RESET;
-    sSlaveConfig.InputTrigger     = TIM_TS_TI1FP1;
-    sSlaveConfig.TriggerPolarity  = TIM_TRIGGERPOLARITY_NONINVERTED;
-    sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
-    sSlaveConfig.TriggerFilter    = 0;
-    
-    HAL_TIM_SlaveConfigSynchro(&TimHandle, &sSlaveConfig);
-    
-    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_1);
-    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2);
-}
-
-//
-void tim_print_out_pwm(void)
-{
-    printf("Captured Value %u\r\n", uwIC2Value);
-    printf("Duty Cycle Value %u\r\n", uwDutyCycle);
-    printf("Frequency Value %u\r\n\n", uwFrequency);
-}
-
-
-void TIM3_IRQHandler(void)
-{
-    HAL_TIM_IRQHandler(&TimHandle);
-}
-
-
-void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
-{
-    static uint32_t cnt = 0;
-    
-    cnt++;
-    
-#if 1  
-    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
-    {
-        // Get the Input Capture value
-        uwIC2Value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
-
-        if (uwIC2Value != 0)
-        {
-            // Duty cycle computation
-            uwDutyCycle = ((HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)) * 100) / uwIC2Value;
-
-            // uwFrequency computation
-            //TIM3 counter clock = (RCC_Clocks.HCLK_Frequency)
-            uwFrequency = (HAL_RCC_GetHCLKFreq())  / uwIC2Value;
-        }
-        else
-        {
-            uwDutyCycle = 0;
-            uwFrequency = 0;
-        }
-    }
-#endif    
-}
-
+#include "stm32f0xx_hal.h"
+#include "pwm_in.h"
+#include <stdio.h>
+
+
+#define PWM_IN_TIM_FREQ     1000000
+
+static TIM_HandleTypeDef       TimHandle;
+static TIM_IC_InitTypeDef      sConfig;
+static TIM_SlaveConfigTypeDef  sSlaveConfig;
+
+static uint16_t prescaler;
+static uint32_t tim_freq;
+
+__IO uint32_t cap_value_1 = 0;  // Captured Value
+__IO uint32_t uwDutyCycle = 0; // Duty Cycle Value
+__IO uint32_t uwFrequency = 0; // Frequency Value
+
+//
+void tim_pwm_in_init(void)
+{
+    GPIO_InitTypeDef   GPIO_InitStruct;
+    
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    __HAL_RCC_TIM3_CLK_ENABLE();
+  
+    GPIO_InitStruct.Pin = GPIO_PIN_6;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;//GPIO_AF0_TIM3;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+    
+    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1);
+    //HAL_NVIC_SetPriority(TIM3_IRQn, 2, 0); // From lasertag project
+    HAL_NVIC_EnableIRQ(TIM3_IRQn);
+    
+    prescaler = HAL_RCC_GetHCLKFreq()/PWM_IN_TIM_FREQ - 1;
+    
+    TimHandle.Instance = TIM3;
+    TimHandle.Init.Period            = 0xFFFF;
+    TimHandle.Init.Prescaler         = 47;
+    TimHandle.Init.ClockDivision     = 0;
+    TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
+    TimHandle.Init.RepetitionCounter = 0;
+    TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+    HAL_TIM_IC_Init(&TimHandle);
+    //HAL_TIM_Base_Init(&TimHandle);
+
+    sConfig.ICPrescaler = TIM_ICPSC_DIV1;
+    sConfig.ICFilter = 0;
+  
+    sConfig.ICPolarity = TIM_ICPOLARITY_RISING; ;
+    sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;
+    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1);
+    
+    sConfig.ICPolarity = TIM_ICPOLARITY_FALLING;
+    sConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI;
+    HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
+    
+    sSlaveConfig.SlaveMode        = TIM_SLAVEMODE_RESET;
+    sSlaveConfig.InputTrigger     = TIM_TS_TI1FP1;
+    sSlaveConfig.TriggerPolarity  = TIM_TRIGGERPOLARITY_NONINVERTED;
+    sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
+    sSlaveConfig.TriggerFilter    = 0;
+    
+    HAL_TIM_SlaveConfigSynchro(&TimHandle, &sSlaveConfig);
+    
+    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_1);
+    HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2);
+}
+
+//
+void tim_print_out_pwm(void)
+{
+    printf("Captured Value %u\r\n", uwIC2Value);
+    printf("Duty Cycle Value %u\r\n", uwDutyCycle);
+    printf("Frequency Value %u\r\n\n", uwFrequency);
+}
+
+
+void TIM3_IRQHandler(void)
+{
+    HAL_TIM_IRQHandler(&TimHandle);
+}
+
+
+void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
+{
+    static uint32_t cnt = 0;
+    
+    cnt++;
+    
+#if 1  
+    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
+    {
+        // Get the Input Capture value
+        uwIC2Value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
+
+        if (uwIC2Value != 0)
+        {
+            // Duty cycle computation
+            //uwDutyCycle = ((HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2)) * 100) / uwIC2Value;
+          
+            uwDutyCycle = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
+
+            // uwFrequency computation
+            //TIM3 counter clock = (RCC_Clocks.HCLK_Frequency)
+            uwFrequency = tim_freq/uwIC2Value;
+        }
+        else
+        {
+            uwDutyCycle = 0;
+            uwFrequency = 0;
+        }
+    }
+#endif    
+}
+

BIN
output/lasertag.bin


ファイルの差分が大きいため隠しています
+ 418 - 372
project/ewarm/drone.dep


ファイルの差分が大きいため隠しています
+ 6 - 7
project/settings/drone.wsdt


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません