初级会员

- 积分
- 98
- 金钱
- 98
- 注册时间
- 2016-6-9
- 在线时间
- 24 小时
|

楼主 |
发表于 2016-7-5 12:35:53
|
显示全部楼层
本帖最后由 列兵一号 于 2016-7-5 19:48 编辑
恩恩,多谢了,似乎明白了一些,用你的这个方法先试试,看可不可以?今天试了一下, 你说的方法,具体的程序如下:(还有部分程序是配置中断2的没有贴出了,要控制的引脚为GPIOA2)
红色的是照你说的添加的程序
void TIM3_IRQHandler(void)
uint8_t ReadValue2; //用作中断2的标志位
{
static uint8_t pwm_index = 0; //用于PWM查表
static uint8_t period_cnt = 0; //用于计算周期数
static uint8_t ReadValue1; //用于监测GPIO5的状态
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //TIM_IT_Update
//if (TIM_GetITStatus(EXTI_Line1) != RESET)
{
period_cnt++;
if(period_cnt >= 10) //若输出的周期数大于10,输出下一种脉冲宽的PWM波
{
TIM3->CCR2 = indexWave[pwm_index]; //根据PWM表修改定时器的比较寄存器的值
pwm_index++; //标志PWM表的下一个元素
if( pwm_index >= 40) //若PWM脉冲表已经输出完成一遍,重置PWM查表标志
{
pwm_index=0;
}
period_cnt=0; //重置周期计数标志
/*******添加的程序**************/
if(ReadValue1==GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))
{
ReadValue2==SET;//中断2的标志位,感觉这个写法应该有问题,但不知道怎么改
}
/*********添加的程序************/
}
TIM_ClearITPendingBit (TIM3, TIM_IT_Update); //清除中断标志位
}
}
/********************添加的程序*************************/
void EXTI2_IRQHandler(void)
{
if(ReadValue2!=RESET)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2); //PA2高电平
}
}
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
以上,然而GPIOA2并没有出现高低电平的跳变,我想肯定是程序写得有问题,你给看看,感激不尽啊……
|
-
中断2的相关配置
|