新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2016-10-6
- 在线时间
- 23 小时
|
20金钱
void E5_Cap1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_ICInitTypeDef TIM9_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE); //TIM9时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); //使能PORTE时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //GPIOE5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
GPIO_Init(GPIOE,&GPIO_InitStructure); //初始化PE5
GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9); //PE5复用 TIM9CH1
//初始化TIM9输入捕获参数 通道1-PE5
TIM9_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端 IC1映射到TI1上
TIM9_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
TIM9_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//映射到TI1上
TIM9_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
TIM9_ICInitStructure.TIM_ICFilter = 0x0F; //滤波
TIM_ICInit(TIM9, &TIM9_ICInitStructure);
TIM_ITConfig(TIM9,TIM_IT_CC1,ENABLE); //允许更新中断 ,允许CC1IE捕获中断
TIM_Cmd(TIM9,ENABLE ); //使能定时器9
NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_TIM9_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
}
//定时器9中断服务程序
void TIM1_BRK_TIM9_IRQnHandler (void)
{
if(TIM_GetITStatus(TIM9, TIM_IT_CC1) != RESET) //捕获1,发生捕获事件
{
I_COUNT++;
}
TIM_ClearITPendingBit(TIM9, TIM_IT_CC1); //清除中断标志位
}
仿真的时候PE5引脚(捕获引脚)悬空,程序正常进行,一旦PE5引脚有高电平,上升沿后,就会死在中断里面,main函数的程序就会停止继续执行,暂停仿真,程序死在startup_stm32f2xx.s里,还有个定时器12溢出中断还可以继续执行。
把TIM9中断程序屏蔽了,也没问题了。
昨天上午也是这个程序(可能有小修小改),都跑通了。今天又出问题了。。。。
谢谢大家
|
|