定时器输入捕获驱动实现

Signed-off-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
2023-01-17 11:00:29 +08:00
parent 9ebd4970a0
commit b2d3238dc2
15 changed files with 860 additions and 167 deletions

14
.config
View File

@@ -150,7 +150,8 @@ CONFIG_RT_USING_WDT=y
# CONFIG_RT_USING_TOUCH is not set
# CONFIG_RT_USING_HWCRYPTO is not set
# CONFIG_RT_USING_PULSE_ENCODER is not set
# CONFIG_RT_USING_INPUT_CAPTURE is not set
CONFIG_RT_USING_INPUT_CAPTURE=y
CONFIG_RT_INPUT_CAPTURE_RB_SIZE=100
# CONFIG_RT_USING_WIFI is not set
#
@@ -1051,6 +1052,17 @@ CONFIG_BSP_USING_PWM4_CH1=y
CONFIG_BSP_USING_PWM4_CH2=y
CONFIG_BSP_USING_PWM4_CH3=y
CONFIG_BSP_USING_PWM4_CH4=y
CONFIG_BSP_USING_CAPTURE=y
CONFIG_BSP_USING_CAPTURE1=y
CONFIG_BSP_USING_CAPTURE1_CH1=y
CONFIG_BSP_USING_CAPTURE1_CH2=y
# CONFIG_BSP_USING_CAPTURE1_CH3 is not set
# CONFIG_BSP_USING_CAPTURE1_CH4 is not set
CONFIG_BSP_USING_CAPTURE2=y
# CONFIG_BSP_USING_CAPTURE2_CH1 is not set
# CONFIG_BSP_USING_CAPTURE2_CH2 is not set
CONFIG_BSP_USING_CAPTURE2_CH3=y
CONFIG_BSP_USING_CAPTURE2_CH4=y
CONFIG_BSP_USING_ADC=y
CONFIG_BSP_USING_ADC1=y
# CONFIG_BSP_USING_ONCHIP_RTC is not set

View File

@@ -74,51 +74,49 @@ Mcu.Pin24=PE8
Mcu.Pin25=PE9
Mcu.Pin26=PE11
Mcu.Pin27=PE12
Mcu.Pin28=PE13
Mcu.Pin29=PE14
Mcu.Pin28=PB10
Mcu.Pin29=PB12
Mcu.Pin3=PE5
Mcu.Pin30=PB10
Mcu.Pin31=PB12
Mcu.Pin32=PB13
Mcu.Pin33=PB14
Mcu.Pin34=PB15
Mcu.Pin35=PD14
Mcu.Pin36=PD15
Mcu.Pin37=PC6
Mcu.Pin38=PC7
Mcu.Pin39=PC9
Mcu.Pin30=PB13
Mcu.Pin31=PB14
Mcu.Pin32=PB15
Mcu.Pin33=PD14
Mcu.Pin34=PD15
Mcu.Pin35=PC6
Mcu.Pin36=PC7
Mcu.Pin37=PC9
Mcu.Pin38=PA8
Mcu.Pin39=PA9
Mcu.Pin4=PE6
Mcu.Pin40=PA8
Mcu.Pin41=PA9
Mcu.Pin42=PA10
Mcu.Pin43=PA11
Mcu.Pin44=PA12
Mcu.Pin45=PA13
Mcu.Pin46=PA14
Mcu.Pin47=PC10
Mcu.Pin48=PC11
Mcu.Pin49=PC12
Mcu.Pin40=PA10
Mcu.Pin41=PA11
Mcu.Pin42=PA12
Mcu.Pin43=PA13
Mcu.Pin44=PA14
Mcu.Pin45=PC10
Mcu.Pin46=PC11
Mcu.Pin47=PC12
Mcu.Pin48=PD2
Mcu.Pin49=PD5
Mcu.Pin5=PH0 - OSC_IN
Mcu.Pin50=PD2
Mcu.Pin51=PD5
Mcu.Pin52=PD6
Mcu.Pin53=PB3
Mcu.Pin54=PB4
Mcu.Pin55=PB6
Mcu.Pin56=PB7
Mcu.Pin57=PB8
Mcu.Pin58=PB9
Mcu.Pin59=PE0
Mcu.Pin50=PD6
Mcu.Pin51=PB3
Mcu.Pin52=PB4
Mcu.Pin53=PB6
Mcu.Pin54=PB7
Mcu.Pin55=PB8
Mcu.Pin56=PB9
Mcu.Pin57=PE0
Mcu.Pin58=PE1
Mcu.Pin59=VP_SYS_VS_Systick
Mcu.Pin6=PH1 - OSC_OUT
Mcu.Pin60=PE1
Mcu.Pin61=VP_SYS_VS_Systick
Mcu.Pin62=VP_TIM1_VS_ClockSourceINT
Mcu.Pin63=VP_TIM3_VS_ClockSourceINT
Mcu.Pin64=VP_TIM4_VS_ClockSourceINT
Mcu.Pin60=VP_TIM1_VS_ClockSourceINT
Mcu.Pin61=VP_TIM3_VS_ClockSourceINT
Mcu.Pin62=VP_TIM4_VS_ClockSourceINT
Mcu.Pin7=PC0
Mcu.Pin8=PC1
Mcu.Pin9=PC2
Mcu.PinsNb=65
Mcu.PinsNb=63
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F413VGTx
@@ -224,8 +222,6 @@ PE1.Signal=UART8_TX
PE11.Signal=S_TIM1_CH2
PE12.Mode=Full_Duplex_Master
PE12.Signal=SPI4_SCK
PE13.Signal=S_TIM1_CH3
PE14.Signal=S_TIM1_CH4
PE2.Mode=Asynchronous
PE2.Signal=UART10_RX
PE3.Mode=Asynchronous
@@ -338,10 +334,6 @@ SH.S_TIM1_CH1.0=TIM1_CH1,Input_Capture1_from_TI1
SH.S_TIM1_CH1.ConfNb=1
SH.S_TIM1_CH2.0=TIM1_CH2,Input_Capture2_from_TI2
SH.S_TIM1_CH2.ConfNb=1
SH.S_TIM1_CH3.0=TIM1_CH3,Input_Capture3_from_TI3
SH.S_TIM1_CH3.ConfNb=1
SH.S_TIM1_CH4.0=TIM1_CH4,Input_Capture4_from_TI4
SH.S_TIM1_CH4.ConfNb=1
SH.S_TIM2_CH3.0=TIM2_CH3,Input_Capture3_from_TI3
SH.S_TIM2_CH3.ConfNb=1
SH.S_TIM2_CH4.0=TIM2_CH4,Input_Capture4_from_TI4
@@ -375,9 +367,7 @@ SPI4.VirtualNSS=VM_NSSHARD
SPI4.VirtualType=VM_MASTER
TIM1.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
TIM1.Channel-Input_Capture2_from_TI2=TIM_CHANNEL_2
TIM1.Channel-Input_Capture3_from_TI3=TIM_CHANNEL_3
TIM1.Channel-Input_Capture4_from_TI4=TIM_CHANNEL_4
TIM1.IPParameters=Channel-Input_Capture1_from_TI1,Channel-Input_Capture2_from_TI2,Channel-Input_Capture3_from_TI3,Channel-Input_Capture4_from_TI4
TIM1.IPParameters=Channel-Input_Capture1_from_TI1,Channel-Input_Capture2_from_TI2
TIM12.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
TIM12.Channel-Input_Capture2_from_TI2=TIM_CHANNEL_2
TIM12.IPParameters=Channel-Input_Capture1_from_TI1,Channel-Input_Capture2_from_TI2

View File

@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
@@ -525,12 +525,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/**TIM1 GPIO Configuration
PE9 ------> TIM1_CH1
PE11 ------> TIM1_CH2
PE13 ------> TIM1_CH3
PE14 ------> TIM1_CH4
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
@@ -588,7 +586,7 @@ void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* htim_ic)
*/
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
@@ -703,10 +701,8 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/**TIM1 GPIO Configuration
PE9 ------> TIM1_CH1
PE11 ------> TIM1_CH2
PE13 ------> TIM1_CH3
PE14 ------> TIM1_CH4
*/
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_13|GPIO_PIN_14);
HAL_GPIO_DeInit(GPIOE, GPIO_PIN_9|GPIO_PIN_11);
/* USER CODE BEGIN TIM1_MspDeInit 1 */

View File

@@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2022 STMicroelectronics.
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@@ -194,7 +194,7 @@ menu "On-chip Peripheral Drivers"
depends on BSP_USING_SPI2
select BSP_SPI2_TX_USING_DMA
default n
endif
menuconfig BSP_USING_I2C1
@@ -275,6 +275,50 @@ menu "On-chip Peripheral Drivers"
endif
endif
menuconfig BSP_USING_CAPTURE
bool "Enable input capture"
default n
select RT_USING_INPUT_CAPTURE
if BSP_USING_CAPTURE
menuconfig BSP_USING_CAPTURE1
bool "Enable capture1"
default n
if BSP_USING_CAPTURE1
config BSP_USING_CAPTURE1_CH1
bool "Enable capture1 channel1"
default n
config BSP_USING_CAPTURE1_CH2
bool "Enable capture1 channel2"
default n
config BSP_USING_CAPTURE1_CH3
bool "Enable capture1 channel3"
default n
config BSP_USING_CAPTURE1_CH4
bool "Enable capture1 channel4"
default n
endif
menuconfig BSP_USING_CAPTURE2
bool "Enable capture2"
default n
if BSP_USING_CAPTURE2
config BSP_USING_CAPTURE2_CH1
bool "Enable capture2 channel1"
default n
config BSP_USING_CAPTURE2_CH2
bool "Enable capture2 channel2"
default n
config BSP_USING_CAPTURE2_CH3
bool "Enable capture2 channel3"
default n
config BSP_USING_CAPTURE2_CH4
bool "Enable capture2 channel4"
default n
endif
endif
menuconfig BSP_USING_ADC
bool "Enable ADC"
default n

View File

@@ -104,3 +104,6 @@ INIT_DEVICE_EXPORT(stm32_pwm_init);
extern int stm32_adc_init(void);
INIT_BOARD_EXPORT(stm32_adc_init);
extern int stm32_capture_init(void);
INIT_APP_EXPORT(stm32_capture_init);

View File

@@ -105,6 +105,9 @@ if GetDepend(['BSP_USING_USBD']):
if GetDepend(['BSP_USING_PULSE_ENCODER']):
src += ['drv_pulse_encoder.c']
if GetDepend(['BSP_USING_CAPTURE']):
src += ['drv_inputcapture.c']
if GetDepend(['BSP_USING_USBH']):
src += ['drv_usbh.c']

View File

@@ -0,0 +1,605 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
*/
#include <board.h>
#ifdef BSP_USING_CAPTURE
#include "drv_config.h"
#define CAPTURE1_CONFIG \
{ \
.timer.Instance = TIM1, \
.iqrn = TIM1_CC_IRQn, \
.timerx = 1, \
.advanced = RT_TRUE, \
}
#define CAPTURE2_CONFIG \
{ \
.timer.Instance = TIM2, \
.iqrn = TIM2_IRQn, \
.timerx = 2, \
}
#define LOG_TAG "drv.tcap"
#include <drv_log.h>
#define MAX_PERIOD 65535
#define MAX_PULSE 1000
typedef enum {
POLARITY_BOTHEDGE,
POLARITY_RISING,
POLARITY_FALLING,
}trigger_polarity;
struct pulse_data
{
rt_uint32_t last_overflow;
rt_uint32_t last_cnt;
trigger_polarity polarity;
};
struct stm32_capture_device;
struct stm32_capture
{
TIM_HandleTypeDef timer;
IRQn_Type iqrn;
rt_uint8_t timerx;
rt_uint8_t advanced;
rt_uint8_t inited;
rt_uint32_t tim_overflow;
struct stm32_capture_device *channels[4];
};
enum
{
#ifdef BSP_USING_CAPTURE1
CAPTURE1_INDEX,
#endif
#ifdef BSP_USING_CAPTURE2
CAPTURE2_INDEX,
#endif
#ifdef BSP_USING_CAPTURE3
CAPTURE3_INDEX,
#endif
#ifdef BSP_USING_CAPTURE4
CAPTURE4_INDEX,
#endif
#ifdef BSP_USING_CAPTURE5
CAPTURE5_INDEX,
#endif
#ifdef BSP_USING_CAPTURE6
CAPTURE6_INDEX,
#endif
#ifdef BSP_USING_CAPTURE7
CAPTURE7_INDEX,
#endif
#ifdef BSP_USING_CAPTURE8
CAPTURE8_INDEX,
#endif
#ifdef BSP_USING_CAPTURE9
CAPTURE9_INDEX,
#endif
#ifdef BSP_USING_CAPTURE10
CAPTURE10_INDEX,
#endif
};
static struct stm32_capture stm32_capture_obj[] =
{
#ifdef BSP_USING_CAPTURE1
CAPTURE1_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE2
CAPTURE2_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE3
CAPTURE3_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE4
CAPTURE4_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE5
CAPTURE5_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE6
CAPTURE6_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE7
CAPTURE7_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE8
CAPTURE8_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE9
CAPTURE9_CONFIG,
#endif
#ifdef BSP_USING_CAPTURE10
CAPTURE10_CONFIG,
#endif
};
struct stm32_capture_device
{
struct rt_inputcapture_device parent;
struct stm32_capture *timer;
rt_uint8_t ch;
rt_uint8_t opend;
struct pulse_data data;
rt_uint32_t pulsewidth_us;
};
static struct stm32_capture_device stm32_capture_devices[] =
{
#ifdef BSP_USING_CAPTURE1_CH1
{{0}, &stm32_capture_obj[CAPTURE1_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE1_CH2
{{0}, &stm32_capture_obj[CAPTURE1_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE1_CH3
{{0}, &stm32_capture_obj[CAPTURE1_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE1_CH4
{{0}, &stm32_capture_obj[CAPTURE1_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE2_CH1
{{0}, &stm32_capture_obj[CAPTURE2_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE2_CH2
{{0}, &stm32_capture_obj[CAPTURE2_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE2_CH3
{{0}, &stm32_capture_obj[CAPTURE2_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE2_CH4
{{0}, &stm32_capture_obj[CAPTURE2_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE3_CH1
{{0}, &stm32_capture_obj[CAPTURE3_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE3_CH2
{{0}, &stm32_capture_obj[CAPTURE3_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE3_CH3
{{0}, &stm32_capture_obj[CAPTURE3_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE3_CH4
{{0}, &stm32_capture_obj[CAPTURE3_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE4_CH1
{{0}, &stm32_capture_obj[CAPTURE4_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE4_CH2
{{0}, &stm32_capture_obj[CAPTURE4_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE4_CH3
{{0}, &stm32_capture_obj[CAPTURE4_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE4_CH4
{{0}, &stm32_capture_obj[CAPTURE4_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE5_CH1
{{0}, &stm32_capture_obj[CAPTURE5_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE5_CH2
{{0}, &stm32_capture_obj[CAPTURE5_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE5_CH3
{{0}, &stm32_capture_obj[CAPTURE5_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE5_CH4
{{0}, &stm32_capture_obj[CAPTURE5_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE6_CH1
{{0}, &stm32_capture_obj[CAPTURE6_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE6_CH2
{{0}, &stm32_capture_obj[CAPTURE6_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE6_CH3
{{0}, &stm32_capture_obj[CAPTURE6_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE6_CH4
{{0}, &stm32_capture_obj[CAPTURE6_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE7_CH1
{{0}, &stm32_capture_obj[CAPTURE7_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE7_CH2
{{0}, &stm32_capture_obj[CAPTURE7_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE7_CH3
{{0}, &stm32_capture_obj[CAPTURE7_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE7_CH4
{{0}, &stm32_capture_obj[CAPTURE7_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE8_CH1
{{0}, &stm32_capture_obj[CAPTURE8_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE8_CH2
{{0}, &stm32_capture_obj[CAPTURE8_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE8_CH3
{{0}, &stm32_capture_obj[CAPTURE8_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE8_CH4
{{0}, &stm32_capture_obj[CAPTURE8_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE9_CH1
{{0}, &stm32_capture_obj[CAPTURE9_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE9_CH2
{{0}, &stm32_capture_obj[CAPTURE9_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE9_CH3
{{0}, &stm32_capture_obj[CAPTURE9_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE9_CH4
{{0}, &stm32_capture_obj[CAPTURE9_INDEX], 4, {0}},
#endif
#ifdef BSP_USING_CAPTURE10_CH1
{{0}, &stm32_capture_obj[CAPTURE10_INDEX], 1, {0}},
#endif
#ifdef BSP_USING_CAPTURE10_CH2
{{0}, &stm32_capture_obj[CAPTURE10_INDEX], 2, {0}},
#endif
#ifdef BSP_USING_CAPTURE10_CH3
{{0}, &stm32_capture_obj[CAPTURE10_INDEX], 3, {0}},
#endif
#ifdef BSP_USING_CAPTURE10_CH4
{{0}, &stm32_capture_obj[CAPTURE10_INDEX], 4, {0}},
#endif
};
static rt_uint64_t get_timer_clock(TIM_HandleTypeDef *htim)
{
rt_uint64_t tim_clock = 0;
#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)
if (htim->Instance == TIM9 || htim->Instance == TIM10 || htim->Instance == TIM11 || htim->Instance == TIM1 || htim->Instance == TIM8)
#elif defined(SOC_SERIES_STM32L4)
if (htim->Instance == TIM15 || htim->Instance == TIM16 || htim->Instance == TIM17)
#elif defined(SOC_SERIES_STM32MP1)
if (htim->Instance == TIM4)
#elif defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)
if (0)
#endif
{
#if !defined(SOC_SERIES_STM32F0) && !defined(SOC_SERIES_STM32G0)
#ifdef STM32F413xx
tim_clock = HAL_RCC_GetPCLK2Freq();
#else
tim_clock = HAL_RCC_GetPCLK2Freq() * 2;
#endif
#endif
}
else
{
#if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)
tim_clock = HAL_RCC_GetPCLK1Freq();
#else
tim_clock = HAL_RCC_GetPCLK1Freq() * 2;
#endif
}
return tim_clock;
}
static void rt_hw_capture_timer_init(struct stm32_capture *device)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_IC_InitTypeDef sConfigIC = {0};
rt_uint64_t tim_clock;
if (device->inited)
{
return;
}
tim_clock = get_timer_clock(&device->timer) / 1000000;
/* configure the timer to ic mode */
device->timer.Init.Prescaler = tim_clock-1;
device->timer.Init.CounterMode = TIM_COUNTERMODE_UP;
device->timer.Init.Period = MAX_PERIOD-1;
device->timer.Init.AutoReloadPreload = MAX_PERIOD-1;
device->timer.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
#if defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32L4)
device->timer.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
#else
device->timer.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
#endif
if (device->advanced && HAL_TIM_Base_Init(&device->timer) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_IC_Init(&device->timer) != HAL_OK)
{
Error_Handler();
}
HAL_NVIC_SetPriority(device->iqrn, 0, 0);
HAL_NVIC_EnableIRQ(device->iqrn);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&device->timer, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&device->timer, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
if (device->channels[0] != RT_NULL && HAL_TIM_IC_ConfigChannel(&device->timer, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
if (device->channels[1] != RT_NULL && HAL_TIM_IC_ConfigChannel(&device->timer, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
if (device->channels[2] != RT_NULL && HAL_TIM_IC_ConfigChannel(&device->timer, &sConfigIC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
if (device->channels[3] != RT_NULL && HAL_TIM_IC_ConfigChannel(&device->timer, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
__HAL_TIM_DISABLE(&device->timer);
__HAL_TIM_SET_COUNTER(&device->timer,0);
__HAL_TIM_ENABLE_IT(&device->timer,TIM_IT_UPDATE);
__HAL_TIM_ENABLE(&device->timer);
device->inited = RT_TRUE;
}
static rt_err_t rt_hw_capture_open(struct rt_inputcapture_device *inputcapture)
{
struct stm32_capture_device *device_ch;
rt_uint32_t ch;
rt_enter_critical();
device_ch = rt_container_of(inputcapture, struct stm32_capture_device, parent);
if (device_ch->opend)
{
rt_exit_critical();
return RT_EOK;
}
device_ch->opend = RT_TRUE;
rt_hw_capture_timer_init(device_ch->timer);
rt_exit_critical();
switch (device_ch->ch)
{
case 1:
ch = TIM_CHANNEL_1;
break;
case 2:
ch = TIM_CHANNEL_2;
break;
case 3:
ch = TIM_CHANNEL_3;
break;
default:
ch = TIM_CHANNEL_4;
break;
}
HAL_TIM_IC_Start_IT(&device_ch->timer->timer, ch);
return RT_EOK;
}
void TIM2_IRQHandler(void)
{
/* enter interrupt */
rt_interrupt_enter();
HAL_TIM_IRQHandler(&stm32_capture_obj[CAPTURE2_INDEX].timer);
/* leave interrupt */
rt_interrupt_leave();
}
void TIM1_CC_IRQHandler(void)
{
/* enter interrupt */
rt_interrupt_enter();
HAL_TIM_IRQHandler(&stm32_capture_obj[CAPTURE1_INDEX].timer);
/* leave interrupt */
rt_interrupt_leave();
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
int i = 0;
for (i = 0; i < sizeof(stm32_capture_obj) / sizeof(stm32_capture_obj[0]); i++)
{
if (stm32_capture_obj[i].timer.Instance == htim->Instance)
{
stm32_capture_obj[i].tim_overflow ++;
}
}
}
static void _capture_computer(struct stm32_capture_device *dev, rt_uint32_t channel)
{
rt_uint32_t trigger_overflow = 0;
rt_uint32_t trigger_cnt = 0;
if (dev->data.polarity == POLARITY_RISING)
{
TIM_RESET_CAPTUREPOLARITY(&dev->timer->timer, channel);
TIM_SET_CAPTUREPOLARITY(&dev->timer->timer,channel, TIM_ICPOLARITY_FALLING);
dev->data.polarity = POLARITY_FALLING;
}
else
{
TIM_RESET_CAPTUREPOLARITY(&dev->timer->timer, channel);
TIM_SET_CAPTUREPOLARITY(&dev->timer->timer,channel, TIM_ICPOLARITY_RISING);
dev->data.polarity = POLARITY_RISING;
}
trigger_cnt = HAL_TIM_ReadCapturedValue(&dev->timer->timer, channel);
trigger_overflow = dev->timer->tim_overflow;
if((trigger_overflow < dev->data.last_overflow) ||
((trigger_overflow - dev->data.last_overflow) > MAX_PULSE))
{
dev->data.last_overflow = trigger_overflow;
dev->data.last_cnt = trigger_cnt;
return;
}
dev->pulsewidth_us = (trigger_overflow - dev->data.last_overflow)*MAX_PERIOD
+ trigger_cnt - dev->data.last_cnt;
rt_hw_inputcapture_isr(&dev->parent, dev->data.polarity != POLARITY_FALLING);
dev->data.last_overflow = trigger_overflow;
dev->data.last_cnt = trigger_cnt;
return;
}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
int i = 0;
rt_uint32_t ch, to;
for (i = 0; i < sizeof(stm32_capture_devices) / sizeof(stm32_capture_devices[0]); i++)
{
switch (stm32_capture_devices[i].ch)
{
case 1:
ch = HAL_TIM_ACTIVE_CHANNEL_1;
to = TIM_CHANNEL_1;
break;
case 2:
ch = HAL_TIM_ACTIVE_CHANNEL_2;
to = TIM_CHANNEL_2;
break;
case 3:
ch = HAL_TIM_ACTIVE_CHANNEL_3;
to = TIM_CHANNEL_3;
break;
default:
ch = HAL_TIM_ACTIVE_CHANNEL_4;
to = TIM_CHANNEL_4;
break;
}
if (htim->Channel == ch && htim->Instance == stm32_capture_devices[i].timer->timer.Instance)
{
_capture_computer(&stm32_capture_devices[i], to);
}
}
}
static rt_err_t rt_hw_capture_get_pulsewidth (struct rt_inputcapture_device *inputcapture, rt_uint32_t *pulsewidth_us)
{
struct stm32_capture_device *device;
device = rt_container_of(inputcapture, struct stm32_capture_device, parent);
*pulsewidth_us = device->pulsewidth_us;
return RT_EOK;
}
static rt_err_t rt_hw_capture_init (struct rt_inputcapture_device *inputcapture)
{
return RT_EOK;
}
static rt_err_t rt_hw_capture_close (struct rt_inputcapture_device *inputcapture)
{
struct stm32_capture_device *device_ch;
rt_uint32_t ch;
rt_enter_critical();
device_ch = rt_container_of(inputcapture, struct stm32_capture_device, parent);
if (!device_ch->opend)
{
rt_exit_critical();
return RT_EOK;
}
switch (device_ch->ch)
{
case 1:
ch = TIM_CHANNEL_1;
break;
case 2:
ch = TIM_CHANNEL_2;
break;
case 3:
ch = TIM_CHANNEL_3;
break;
default:
ch = TIM_CHANNEL_4;
break;
}
HAL_TIM_IC_Stop_IT(&device_ch->timer->timer, ch);
device_ch->opend = RT_FALSE;
rt_exit_critical();
return RT_EOK;
}
static const struct rt_inputcapture_ops _drv_ops = {
.init = rt_hw_capture_init,
.open = rt_hw_capture_open,
.close = rt_hw_capture_close,
.get_pulsewidth = rt_hw_capture_get_pulsewidth,
};
int stm32_capture_init(void)
{
int i = 0;
char name[] = "tc00ch0";
for (i = 0; i < sizeof(stm32_capture_devices) / sizeof(stm32_capture_devices[0]); i++)
{
stm32_capture_devices[i].timer->channels[stm32_capture_devices[i].ch - 1] = &stm32_capture_devices[i];
stm32_capture_devices[i].parent.ops = &_drv_ops;
rt_snprintf(name, sizeof(name),"tc%dch%d", stm32_capture_devices[i].timer->timerx, stm32_capture_devices[i].ch);
rt_device_inputcapture_register(&stm32_capture_devices[i].parent, name, RT_NULL);
}
return RT_EOK;
}
#endif

View File

@@ -46,7 +46,7 @@ if GetDepend(['RT_USING_USB']):
if GetDepend(['RT_USING_CAN']):
src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c']
if GetDepend(['RT_USING_HWTIMER']) or GetDepend(['RT_USING_PWM']) or GetDepend(['RT_USING_PULSE_ENCODER']):
if GetDepend(['RT_USING_HWTIMER']) or GetDepend(['RT_USING_PWM']) or GetDepend(['RT_USING_PULSE_ENCODER']) or GetDepend(['RT_USING_INPUT_CAPTURE']):
src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c']
src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c']
src += ['STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_lptim.c']

View File

@@ -303,18 +303,6 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\libc\cplusplus\cxx_crt.cpp</PathWithFileName>
<FilenameWithoutPath>cxx_crt.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\libc\cplusplus\cxx_Thread.cpp</PathWithFileName>
<FilenameWithoutPath>cxx_Thread.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@@ -322,7 +310,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -334,7 +322,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>11</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -344,6 +332,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\libc\cplusplus\cxx_crt.cpp</PathWithFileName>
<FilenameWithoutPath>cxx_crt.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
@@ -571,6 +571,18 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\drivers\misc\rt_inputcapture.c</PathWithFileName>
<FilenameWithoutPath>rt_inputcapture.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\drivers\serial\serial.c</PathWithFileName>
<FilenameWithoutPath>serial.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@@ -578,7 +590,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -598,7 +610,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -610,7 +622,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -622,7 +634,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +646,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +658,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +670,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +682,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +694,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -694,7 +706,19 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>libraries\HAL_Drivers\drv_inputcapture.c</PathWithFileName>
<FilenameWithoutPath>drv_inputcapture.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -706,7 +730,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -726,7 +750,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -738,7 +762,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -750,19 +774,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\fal\src\fal.c</PathWithFileName>
<FilenameWithoutPath>fal.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -772,6 +784,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>rt-thread\components\fal\src\fal.c</PathWithFileName>
<FilenameWithoutPath>fal.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@@ -782,7 +806,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -794,7 +818,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -806,7 +830,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -818,7 +842,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -838,7 +862,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -858,7 +882,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -870,7 +894,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -882,7 +906,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -894,7 +918,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -906,7 +930,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -918,7 +942,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -930,7 +954,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -942,7 +966,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -954,7 +978,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -966,7 +990,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -978,7 +1002,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -990,7 +1014,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1002,7 +1026,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1022,7 +1046,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1034,7 +1058,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1046,7 +1070,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1058,7 +1082,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1070,7 +1094,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1082,7 +1106,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1094,7 +1118,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1106,7 +1130,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1118,7 +1142,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1130,7 +1154,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1142,7 +1166,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1154,7 +1178,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1166,7 +1190,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1178,7 +1202,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1190,7 +1214,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1202,7 +1226,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1214,7 +1238,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1226,7 +1250,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1238,7 +1262,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1250,7 +1274,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1262,7 +1286,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1274,7 +1298,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1286,7 +1310,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1298,7 +1322,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1310,7 +1334,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1322,7 +1346,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1334,7 +1358,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1346,7 +1370,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1366,7 +1390,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1380,13 +1404,13 @@
<Group>
<GroupName>Utilities</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1398,7 +1422,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -1410,7 +1434,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -428,11 +428,6 @@
<Group>
<GroupName>CPlusPlus</GroupName>
<Files>
<File>
<FileName>cxx_crt.cpp</FileName>
<FileType>8</FileType>
<FilePath>rt-thread\components\libc\cplusplus\cxx_crt.cpp</FilePath>
</File>
<File>
<FileName>cxx_Thread.cpp</FileName>
<FileType>8</FileType>
@@ -448,6 +443,11 @@
<FileType>8</FileType>
<FilePath>rt-thread\components\libc\cplusplus\cxx_Mutex.cpp</FilePath>
</File>
<File>
<FileName>cxx_crt.cpp</FileName>
<FileType>8</FileType>
<FilePath>rt-thread\components\libc\cplusplus\cxx_crt.cpp</FilePath>
</File>
<File>
<FileName>cxx_Semaphore.cpp</FileName>
<FileType>8</FileType>
@@ -543,6 +543,11 @@
<FileType>1</FileType>
<FilePath>rt-thread\components\drivers\misc\rt_drv_pwm.c</FilePath>
</File>
<File>
<FileName>rt_inputcapture.c</FileName>
<FileType>1</FileType>
<FilePath>rt-thread\components\drivers\misc\rt_inputcapture.c</FilePath>
</File>
<File>
<FileName>serial.c</FileName>
<FileType>1</FileType>
@@ -598,6 +603,11 @@
<FileType>1</FileType>
<FilePath>libraries\HAL_Drivers\drv_gpio.c</FilePath>
</File>
<File>
<FileName>drv_inputcapture.c</FileName>
<FileType>1</FileType>
<FilePath>libraries\HAL_Drivers\drv_inputcapture.c</FilePath>
</File>
<File>
<FileName>drv_pwm.c</FileName>
<FileType>1</FileType>
@@ -623,16 +633,16 @@
<FileType>1</FileType>
<FilePath>rt-thread\components\fal\src\fal_partition.c</FilePath>
</File>
<File>
<FileName>fal.c</FileName>
<FileType>1</FileType>
<FilePath>rt-thread\components\fal\src\fal.c</FilePath>
</File>
<File>
<FileName>fal_flash.c</FileName>
<FileType>1</FileType>
<FilePath>rt-thread\components\fal\src\fal_flash.c</FilePath>
</File>
<File>
<FileName>fal.c</FileName>
<FileType>1</FileType>
<FilePath>rt-thread\components\fal\src\fal.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@@ -181,10 +181,7 @@ void rt_hw_inputcapture_isr(struct rt_inputcapture_device *inputcapture, rt_bool
}
data.is_high = level;
if (rt_ringbuffer_put(inputcapture->ringbuff, (rt_uint8_t *)&data, sizeof(struct rt_inputcapture_data)) == 0)
{
LOG_W("inputcapture ringbuffer doesn't have enough space.");
}
rt_ringbuffer_put(inputcapture->ringbuff, (rt_uint8_t *)&data, sizeof(struct rt_inputcapture_data));
receive_size = rt_ringbuffer_data_len(inputcapture->ringbuff) / sizeof(struct rt_inputcapture_data);

View File

@@ -88,6 +88,8 @@
#define RT_USING_ADC
#define RT_USING_PWM
#define RT_USING_WDT
#define RT_USING_INPUT_CAPTURE
#define RT_INPUT_CAPTURE_RB_SIZE 100
/* Using USB */
@@ -304,6 +306,13 @@
#define BSP_USING_PWM4_CH2
#define BSP_USING_PWM4_CH3
#define BSP_USING_PWM4_CH4
#define BSP_USING_CAPTURE
#define BSP_USING_CAPTURE1
#define BSP_USING_CAPTURE1_CH1
#define BSP_USING_CAPTURE1_CH2
#define BSP_USING_CAPTURE2
#define BSP_USING_CAPTURE2_CH3
#define BSP_USING_CAPTURE2_CH4
#define BSP_USING_ADC
#define BSP_USING_ADC1
#define BSP_USING_ON_CHIP_FLASH