//================================================================== // // Filename: mapp_time.c // Description: External Input driver. // //------------------------------------------------------------------ // // version: // date: 08:54am, 08.Feb.2023, by dwd // Description: // //------------------------------------------------------------------ //================================================================== /*------------------------------------------------------------------------------ * I N C L U D E *------------------------------------------------------------------------------*/ #include "stm32f0xx.h" #include "general.h" #include "main.h" #include "mapp_gpio.h" #include "mapp_time.h" #include "mapp_arm.h" #include "mapp_msg.h" /*------------------------------------------------------------------------------ * D E F I N E *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * S T R U C T *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * S T A T I C - V A R I A B L E S *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * G L O B A L *------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------ * P R O T O T Y P E *------------------------------------------------------------------------------*/ #define BUS_REV_MAX 6 static unsigned short BUS_Rev_Buf[6][150]={0}; static unsigned char BUS_Rev_ReadIndex=0; static unsigned char BUS_Rev_WriteIndex=0; static unsigned char TIM1_cc_flag=0; static unsigned char TIM1_Rev_Buf[30]={0}; unsigned char gt_busrxflag =0; int TIM6_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE); TIM_DeInit(TIM6); TIM_TimeBaseStructure.TIM_Prescaler = 48 - 1; //48000000/48=1M TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 100 ; //初始值 F=1M/100=10KHz TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure); //========================================================= TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); TIM_ITConfig(TIM6,TIM_IT_Update,DISABLE); TIM_ClearFlag(TIM6, TIM_FLAG_Update); NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM6, ENABLE); //========================================================= return 1; } /*---------------------------------------------------------------------- PWM OUT :100K,PA6(TIM3_CH1); BUSIN: PB1(TIM3_CH4) TIM3->CCER &=~(1<<0);//关闭PWM输出(TIM3_CH1);OC1禁止输出 ----------------------------------------------------------------------*/ //---------------------------------------------------------------------- void TIM3_PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_DeInit(TIM3); //TIM_Prescaler:48,TIM_Period:20000 周期20ms TIM_TimeBaseInitStructure.TIM_Prescaler = (24-0); //1M 1us加1. 48 TIM_TimeBaseInitStructure.TIM_Period = 17; //设置自动重装载寄存器周期值 9 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重复计数设置 //重复计数设置 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); //参数初始化 //================================= NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //================================= //================================= TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; //选择输入端 IC1映射到TI4上 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //下降沿捕获 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //通道一一对应 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 TIM_ICInitStructure.TIM_ICFilter =0; //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波 TIM_ICInit(TIM3, &TIM_ICInitStructure); //初始化定时器输入捕获通道 /* Select the TIM3 Input Trigger: TIM_TS_TI1FP1 */ TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //选择输入触发源trgi /* Select the slave Mode: Reset Mode */ TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); TIM_ITConfig(TIM3,TIM_IT_CC4,ENABLE); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //输出PWM TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 8; //预设值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1Init(TIM3,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_CtrlPWMOutputs(TIM3, ENABLE); //使能标志位CC1.CC2.CC3.CC4 TIM_Cmd(TIM3,ENABLE); TIM3->CCER &=~(1<<0); //默认不输出 } void TIM1_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_DeInit(TIM1); //TIM_Prescaler:48,TIM_Period:20000 周期20ms TIM_TimeBaseInitStructure.TIM_Prescaler = (480-1); //480-1预分频器,100K的计数频率,10us加1. TIM_TimeBaseInitStructure.TIM_Period = 65535; //设置自动重装载寄存器周期值 65535 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重复计数设置 //重复计数设置 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割 TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure); //参数初始化 //================================= TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1映射到TI4上 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //下降沿捕获 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //通道一一对应 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 TIM_ICInitStructure.TIM_ICFilter =0; //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波 TIM_ICInit(TIM1, &TIM_ICInitStructure); //初始化定时器输入捕获通道 //================================= NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //================================= /* Select the TIM3 Input Trigger: TIM_TS_TI1FP1 */ //TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //选择输入触发源trgi /* Select the slave Mode: Reset Mode */ // TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE); //TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//?????? TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);//?????? TIM_Cmd(TIM1, ENABLE); } /*------------------------------- E O F ----------------------------------------*/