/* Includes ------------------------------------------------------------------*/
#include "tim.h"
uint32_t plus_value = 8000000;//100ms
uint32_t gCmpTbl[2] = {80000000-1,8000000-1};
uint32_t gCmpTb2[2] = {80000000-1,8000000-1+20}; //lc 20220826
//uint32_t gCmpTb2[2] = {80000000-1,8000000-1+8};
uint8_t gPosiOrNega_Out = 0;
uint8_t gPosiOrNega_Clr = 0;
uint8_t Led_Flag = 0;
void Mcu_Timer_SetCmpTbl(uint32_t *pCmp,uint32_t *pCmp4)
{
gCmpTb2[0] = *pCmp++;
gCmpTb2[1] = *pCmp++;
gCmpTbl[0] = *pCmp4++;
gCmpTbl[1] = *pCmp4++;
}
/* USER CODE BEGIN 0 */
void Mcu_Timer2_PinCfg(void)
{
/* input capture */
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA|LL_AHB2_GRP1_PERIPH_GPIOB);
/*PPS INPUT*/
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_0, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_0, LL_GPIO_PULL_UP);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_0, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetAFPin_0_7(GPIOA, LL_GPIO_PIN_0, LL_GPIO_AF_1);
/*PPS OUTPUT*/
LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_10, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_10, LL_GPIO_PULL_UP);
LL_GPIO_SetPinSpeed(GPIOB, LL_GPIO_PIN_10, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetAFPin_8_15(GPIOB, LL_GPIO_PIN_10, LL_GPIO_AF_1);
/*PPS CLR*/
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_1, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_1, LL_GPIO_PULL_UP);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_1, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetAFPin_0_7(GPIOA, LL_GPIO_PIN_1, LL_GPIO_AF_1);
}
/* USER CODE END 0 */
/* TIM2 init function */
void MX_TIM2_Init(void)
{
Mcu_Timer2_PinCfg();
NVIC_SetPriority(TIM2_IRQn, 1);
NVIC_EnableIRQ(TIM2_IRQn);
/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
LL_TIM_SetPrescaler(TIM2, __LL_TIM_CALC_PSC(SystemCoreClock , 80000000));
LL_TIM_SetAutoReload(TIM2, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM2), 1));
LL_TIM_EnableARRPreload(TIM2);
/************************************/
/* Input capture mode configuration */
/************************************/
LL_TIM_IC_SetActiveInput(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_ACTIVEINPUT_DIRECTTI);
/* Configure the input filter duration: no filter needed */
LL_TIM_IC_SetFilter(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1);
/* Set input prescaler: prescaler is disabled */
LL_TIM_IC_SetPrescaler(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_ICPSC_DIV1);
/* Select the edge of the active transition on the TI1 channel: rising edge */
LL_TIM_IC_SetPolarity(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_RISING);
/*********************************/
/* Output waveform configuration */
/*********************************/
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_ACTIVE);
/* Set output channel polarity: OC is active high */
LL_TIM_OC_SetPolarity(TIM2, LL_TIM_CHANNEL_CH3, LL_TIM_OCPOLARITY_HIGH);
/* Set output compare active/inactive delay to half of the auto-reload value */
LL_TIM_OC_SetCompareCH4(TIM2, (LL_TIM_GetAutoReload(TIM2) / 2));
/*********************************/
/* CLR waveform configuration */
/*********************************/
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_ACTIVE);
/* Set output channel polarity: OC is active high */
LL_TIM_OC_SetPolarity(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_OCPOLARITY_HIGH);
/* Set output compare active/inactive delay to half of the auto-reload value */
LL_TIM_OC_SetCompareCH2(TIM2, (LL_TIM_GetAutoReload(TIM2) / 2));
LL_TIM_EnableIT_CC1(TIM2);
LL_TIM_EnableIT_CC2(TIM2);
LL_TIM_EnableIT_CC3(TIM2);
LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1);
LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH2);
LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH3);
LL_TIM_EnableCounter(TIM2);
}
/* USER CODE BEGIN 1 */
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
/*INPUT*/
if(LL_TIM_IsActiveFlag_CC1(TIM2))
{
LL_TIM_ClearFlag_CC1(TIM2);
if(LL_TIM_IsEnabledIT_CC1(TIM2))
{
sys_str.cnt_for_in_pps_index++;
if(sys_str.cnt_for_in_pps_index>=0xffffff)
{
sys_str.cnt_for_in_pps_index = 0xffffff;
}
sys_str.cnt_for_local_pps_index = 0;
sys_str.capVlaue_last = sys_str.capVlaue_cur;
sys_str.capVlaue_cur = LL_TIM_IC_GetCaptureCH1(TIM2);
}
}
/*OUTPUT*/
if(LL_TIM_IsActiveFlag_CC3(TIM2))
{
LL_TIM_ClearFlag_CC3(TIM2);
if(LL_TIM_IsEnabledIT_CC3(TIM2))
{
gPosiOrNega_Out = 1 - gPosiOrNega_Out;
LL_TIM_OC_SetCompareCH3(TIM2,gCmpTbl[gPosiOrNega_Out]%80000000);
if(gPosiOrNega_Out)
{
sys_str.cnt_for_local_pps_index++;
if(sys_str.cnt_for_local_pps_index>=0xffffff)
{
sys_str.cnt_for_local_pps_index = 0xffffff;
}
sys_str.cnt_for_in_pps_index = 0;
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_ACTIVE);
}
else
{
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_INACTIVE);
}
}
}
/*CLR*/
if(LL_TIM_IsActiveFlag_CC2(TIM2))
{
LL_TIM_ClearFlag_CC2(TIM2);
if(LL_TIM_IsEnabledIT_CC2(TIM2))
{
gPosiOrNega_Clr = 1 - gPosiOrNega_Clr;
LL_TIM_OC_SetCompareCH2(TIM2,gCmpTb2[gPosiOrNega_Clr]%80000000);
if(gPosiOrNega_Clr)
{
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_ACTIVE);
}
else
{
sys_str.flag_for_1s = 1;
fsk_sync();
LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
}
}
}
/* USER CODE END TIM2_IRQn 1 */
}
同步函数
void Mcu_Timer_SetCmpTbl(uint32_t *pCmp,uint32_t *pCmp4);