久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32雙定時器TIM2和TIM4+8個HC-SR04超聲波源程序
[打印本頁]
作者:
ruyuer
時間:
2020-2-25 23:31
標題:
STM32雙定時器TIM2和TIM4+8個HC-SR04超聲波源程序
單片機源程序如下:
#include "timer.h"
TIM_ICInitTypeDef TIM2_ICInitStructure;
TIM_ICInitTypeDef TIM4_ICInitStructure;
void TIM2_Cap_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA時鐘
//TIM2的2個通道
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 輸入 下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
TIM_TimeBaseStructure.TIM_Period = arr; //設定計數器自動重裝值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //預分頻器
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM2通道1輸入捕獲參數
TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM2, &TIM2_ICInitStructure);
//初始化TIM2通道1輸入捕獲參數
TIM2_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM2, &TIM2_ICInitStructure);
TIM2_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM2, &TIM2_ICInitStructure);
TIM2_ICInitStructure.TIM_Channel = TIM_Channel_4; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM2, &TIM2_ICInitStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優先級2級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //從優先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);//允許更新中斷 ,允許CC2IE捕獲中斷
TIM_Cmd(TIM2,ENABLE );
}
//*****************************************************************
//************************************************************
void TIM4_Cap_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOA時鐘
//TIM4的2個通道
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 輸入 下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);
TIM_TimeBaseStructure.TIM_Period = arr; //設定計數器自動重裝值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //預分頻器
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM4通道1輸入捕獲參數
TIM4_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM4_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM4, &TIM4_ICInitStructure);
TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM4_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM4, &TIM4_ICInitStructure);
TIM4_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM4_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM4, &TIM4_ICInitStructure);
TIM4_ICInitStructure.TIM_Channel = TIM_Channel_4; //CC1S=01 選擇輸入端 IC1映射到TI1上
TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕獲
TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置輸入分頻,不分頻
TIM4_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波
TIM_ICInit(TIM4, &TIM4_ICInitStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM4中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優先級2級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //從優先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
TIM_ITConfig(TIM4,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);//允許更新中斷 ,允許CC2IE捕獲中斷
TIM_Cmd(TIM4,ENABLE );
}
u8 TIM2CH1_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM2CH1_CAPTURE_VAL; //輸入捕獲值
u8 TIM2CH2_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM2CH2_CAPTURE_VAL; //輸入捕獲值
u16 TIM2CH3_CAPTURE_VAL; //輸入捕獲值
u8 TIM2CH3_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM2CH4_CAPTURE_VAL; //輸入捕獲值
u8 TIM2CH4_CAPTURE_STA=0; //輸入捕獲狀態
u8 TIM4CH1_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM4CH1_CAPTURE_VAL; //輸入捕獲值
u8 TIM4CH2_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM4CH2_CAPTURE_VAL; //輸入捕獲值
u16 TIM4CH3_CAPTURE_VAL; //輸入捕獲值
u8 TIM4CH3_CAPTURE_STA=0; //輸入捕獲狀態
u16 TIM4CH4_CAPTURE_VAL; //輸入捕獲值
u8 TIM4CH4_CAPTURE_STA=0; //輸入捕獲狀態
extern u32 distan1,distan2;
extern u32 distan3,distan4;
extern u32 distan5,distan6;
extern u32 distan7,distan8;
void TIM2_IRQHandler(void)
{
if((TIM2CH1_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
if(TIM2CH1_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM2CH1_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM2CH1_CAPTURE_VAL=0XFFFF;
}else TIM2CH1_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕獲1發生捕獲事件
{
if(TIM2CH1_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM2CH1_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
distan1=TIM2CH1_CAPTURE_STA&0X3F;
distan1*=65536;//溢出時間總和
distan1+=TIM2CH1_CAPTURE_VAL;//得到總的高電平時間
distan1=340*distan1/2/10000;
TIM2CH1_CAPTURE_STA=0;
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM2CH1_CAPTURE_STA=0; //清空
TIM2CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM2,0);
TIM2CH1_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM2CH2_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
if(TIM2CH2_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM2CH2_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM2CH2_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM2CH2_CAPTURE_VAL=0XFFFF;
}else TIM2CH2_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)//捕獲1發生捕獲事件
{
if(TIM2CH2_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM2CH2_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM2CH2_CAPTURE_VAL=TIM_GetCapture2(TIM2);
distan2=TIM2CH2_CAPTURE_STA&0X3F;
distan2*=65536;//溢出時間總和
distan2+=TIM2CH2_CAPTURE_VAL;//得到總的高電平時間
distan2=340*distan2/2/10000;
TIM2CH2_CAPTURE_STA=0;
TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM2CH2_CAPTURE_STA=0; //清空
TIM2CH2_CAPTURE_VAL=0;
TIM_SetCounter(TIM2,0);
TIM2CH2_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC2PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM2CH3_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
if(TIM2CH3_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM2CH3_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM2CH3_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM2CH3_CAPTURE_VAL=0XFFFF;
}else TIM2CH3_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)//捕獲1發生捕獲事件
{
if(TIM2CH3_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM2CH3_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM2CH3_CAPTURE_VAL=TIM_GetCapture3(TIM2);
distan3=TIM2CH3_CAPTURE_STA&0X3F;
distan3*=65536;//溢出時間總和
distan3+=TIM2CH3_CAPTURE_VAL;//得到總的高電平時間
distan3=340*distan3/2/10000;
TIM2CH3_CAPTURE_STA=0;
TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM2CH3_CAPTURE_STA=0; //清空
TIM2CH3_CAPTURE_VAL=0;
TIM_SetCounter(TIM2,0);
TIM2CH3_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM2CH4_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
if(TIM2CH4_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM2CH4_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM2CH4_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM2CH4_CAPTURE_VAL=0XFFFF;
}else TIM2CH4_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)//捕獲1發生捕獲事件
{
if(TIM2CH4_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM2CH4_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM2CH4_CAPTURE_VAL=TIM_GetCapture4(TIM2);
distan4=TIM2CH4_CAPTURE_STA&0X3F;
distan4*=65536;//溢出時間總和
distan4+=TIM2CH4_CAPTURE_VAL;//得到總的高電平時間
distan4=340*distan4/2/10000;
TIM2CH4_CAPTURE_STA=0;
TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM2CH4_CAPTURE_STA=0; //清空
TIM2CH4_CAPTURE_VAL=0;
TIM_SetCounter(TIM2,0);
TIM2CH4_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1| TIM_IT_CC2| TIM_IT_CC3| TIM_IT_CC4|TIM_IT_Update); //清除中斷標志位
}
//***********************************************************************************
//***********************************************************************************
void TIM4_IRQHandler(void)
{
if((TIM4CH1_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(TIM4CH1_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM4CH1_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM4CH1_CAPTURE_VAL=0XFFFF;
}else TIM4CH1_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)//捕獲1發生捕獲事件
{
if(TIM4CH1_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM4CH1_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM4CH1_CAPTURE_VAL=TIM_GetCapture1(TIM4);
distan5=TIM4CH1_CAPTURE_STA&0X3F;
distan5*=65536;//溢出時間總和
distan5+=TIM4CH1_CAPTURE_VAL;//得到總的高電平時間
distan5=340*distan5/2/10000;
TIM4CH1_CAPTURE_STA=0;
TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM4CH1_CAPTURE_STA=0; //清空
TIM4CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM4,0);
TIM4CH1_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM4CH2_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(TIM4CH2_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM4CH2_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM4CH2_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM4CH2_CAPTURE_VAL=0XFFFF;
}else TIM4CH2_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)//捕獲1發生捕獲事件
{
if(TIM4CH2_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM4CH2_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM4CH2_CAPTURE_VAL=TIM_GetCapture2(TIM4);
distan6=TIM4CH2_CAPTURE_STA&0X3F;
distan6*=65536;//溢出時間總和
distan6+=TIM4CH2_CAPTURE_VAL;//得到總的高電平時間
distan6=340*distan6/2/10000;
TIM4CH2_CAPTURE_STA=0;
TIM_OC2PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM4CH2_CAPTURE_STA=0; //清空
TIM4CH2_CAPTURE_VAL=0;
TIM_SetCounter(TIM4,0);
TIM4CH2_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC2PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM4CH3_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(TIM4CH3_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM4CH3_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM4CH3_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM4CH3_CAPTURE_VAL=0XFFFF;
}else TIM4CH3_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC3) != RESET)//捕獲1發生捕獲事件
{
if(TIM4CH3_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM4CH3_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM4CH3_CAPTURE_VAL=TIM_GetCapture3(TIM4);
distan7=TIM4CH3_CAPTURE_STA&0X3F;
distan7*=65536;//溢出時間總和
distan7+=TIM4CH3_CAPTURE_VAL;//得到總的高電平時間
distan7=340*distan7/2/10000;
TIM4CH3_CAPTURE_STA=0;
TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM4CH3_CAPTURE_STA=0; //清空
TIM4CH3_CAPTURE_VAL=0;
TIM_SetCounter(TIM4,0);
TIM4CH3_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
if((TIM4CH4_CAPTURE_STA&0X80)==0)//還未成功捕獲
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(TIM4CH4_CAPTURE_STA&0X40)//已經捕獲到高電平了
{
if((TIM4CH4_CAPTURE_STA&0X3F)==0X3F)//高電平太長了
{
TIM4CH4_CAPTURE_STA|=0X80;//標記成功捕獲了一次
TIM4CH4_CAPTURE_VAL=0XFFFF;
}else TIM4CH4_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC4) != RESET)//捕獲1發生捕獲事件
{
if(TIM4CH4_CAPTURE_STA&0X40) //捕獲到一個下降沿
{
TIM4CH4_CAPTURE_STA|=0X80; //標記成功捕獲到一次上升沿
TIM4CH4_CAPTURE_VAL=TIM_GetCapture4(TIM4);
distan8=TIM4CH4_CAPTURE_STA&0X3F;
distan8*=65536;//溢出時間總和
distan8+=TIM4CH4_CAPTURE_VAL;//得到總的高電平時間
distan8=340*distan8/2/10000;
TIM4CH4_CAPTURE_STA=0;
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 設置為上升沿捕獲
}else //還未開始,第一次捕獲上升沿
{
TIM4CH4_CAPTURE_STA=0; //清空
TIM4CH4_CAPTURE_VAL=0;
TIM_SetCounter(TIM4,0);
TIM4CH4_CAPTURE_STA|=0X40; //標記捕獲到了上升沿
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 設置為下降沿捕獲
}
}
}
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1| TIM_IT_CC2| TIM_IT_CC3| TIM_IT_CC4|TIM_IT_Update); //清除中斷標志位
}
復制代碼
全部資料51hei下載地址:
TIM2和TIM4八超聲波.7z
(183.58 KB, 下載次數: 23)
2020-2-26 01:17 上傳
點擊文件名下載附件
閱讀權限: 10
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
人干人操
|
欧美精品成人
|
二区三区视频
|
在线观看国产
|
成人精品在线观看
|
欧洲精品一区
|
www.国产91
|
999精品视频
|
色婷婷九月
|
欧美日高清视频
|
欧美精品福利视频
|
噜久寡妇噜噜久久寡妇
|
精品一区在线看
|
亚洲高清在线播放
|
视频精品一区二区三区
|
日日夜夜精品视频
|
人人射人人草
|
久久久久久免费观看
|
日韩欧美在线观看视频网站
|
国产一区
|
日韩在线观看视频一区
|
午夜av电影院
|
国产精品美女久久久久aⅴ国产馆
|
亚洲一区二区三区桃乃木香奈
|
欧美一区二区三区四区五区无卡码
|
狠狠草视频
|
亚洲三区在线观看
|
欧美视频二区
|
性生生活大片免费看视频
|
欧美一区二区三区四区在线
|
丝袜一区二区三区
|
国产一区免费
|
免费国产一区二区视频
|
久久精品国产一区二区电影
|
午夜精品一区二区三区在线视频
|
美女爽到呻吟久久久久
|
欧美成人精品欧美一级
|
亚洲国产成人在线视频
|
精品国产高清一区二区三区
|
欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片
|
国产亚洲精品久久19p
|