中级会员
 
- 积分
- 251
- 金钱
- 251
- 注册时间
- 2018-4-6
- 在线时间
- 31 小时
|
3金钱
如题,PWM设置的是5ms周期,ARR设置的5000,当CCR的值低于1000或高于3500,数据感觉第一个脉冲还正常,然后就跳动
[mw_shl_code=c,true]#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "tim.h"
u8 TIM2CH1_CAPTURE_STA=0; //êäèë2¶»ñ×′ì¬
u32 TIM2CH1_CAPTURE_VAL1; //êäèë2¶»ñÖμ
u32 TIM2CH1_CAPTURE_VAL2;
void TIM2_IRQHandler(void)
{
if((TIM2CH1_CAPTURE_STA&0x80)==0)//ûóDíê3é
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
if(TIM2CH1_CAPTURE_STA&0x20)
{
if(TIM2CH1_CAPTURE_STA&0x1f)
{
TIM2CH1_CAPTURE_STA|=0x80;
TIM_ITConfig(TIM2, TIM_IT_Update|TIM_IT_CC1, DISABLE);
TIM_Cmd(TIM2, DISABLE);
}
else
TIM2CH1_CAPTURE_STA++;
}
}
if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET) //·¢éú2¶»ñ
{
if((TIM2CH1_CAPTURE_STA&0x20)==0) //μúò»′θßμçÆ½
{
TIM2CH1_CAPTURE_STA|=0x20;
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2, ENABLE);
TIM_OC1PolarityConfig(TIM2,TIM_OCPolarity_Low);//ϽμÑØ
}
else if((TIM2CH1_CAPTURE_STA&0x20)&&(!(TIM2CH1_CAPTURE_STA&0x40)))//μúò»′ÎμíμçÆ½
{
TIM2CH1_CAPTURE_STA|=0x40;
TIM2CH1_CAPTURE_VAL1=TIM_GetCapture1(TIM2)+(TIM2CH1_CAPTURE_STA&0x1f)*65536;
TIM_SetCounter(TIM2,0);
TIM_OC1PolarityConfig(TIM2,TIM_OCPolarity_High);//éÏéyÑØ
TIM2CH1_CAPTURE_STA&=0xe0;
}
else if((TIM2CH1_CAPTURE_STA&0x40)&&(!(TIM2CH1_CAPTURE_STA&0x80)))//óÖ»ñμøßμçÆ½
{
TIM2CH1_CAPTURE_VAL2=TIM_GetCapture1(TIM2)+(TIM2CH1_CAPTURE_STA&0x1f)*65536;
TIM2CH1_CAPTURE_STA|=0x80;
TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High);//éÏéy
TIM_ITConfig(TIM2, TIM_IT_Update|TIM_IT_CC1, DISABLE);
TIM_Cmd(TIM2, DISABLE);
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update);
}
}
void get_pwm(void)
{
TIM2CH1_CAPTURE_STA=0;
TIM2CH1_CAPTURE_VAL1=0;
TIM2CH1_CAPTURE_VAL2=0;
TIM_ITConfig(TIM2, TIM_IT_Update|TIM_IT_CC1, ENABLE);
while((TIM2CH1_CAPTURE_STA&0x80)==0);
printf("¸ßμçÆ½:%d+++++++++++++++",TIM2CH1_CAPTURE_VAL1);
printf("μíμçÆ½%d----------------\n",TIM2CH1_CAPTURE_VAL2);
printf("==============%d---------------\n",TIM2CH1_CAPTURE_VAL1+TIM2CH1_CAPTURE_VAL2);
}
int main()
{
uart_init(9600);
TIM3_PWM1_init();//PA6μÄpwm
TIM_SetCompare1(TIM3, 500);
TIM2_CH1_init();//PA0μÄêäèë2¶»ñ
while(1)
{
unsigned int i=50000;
get_pwm();
while(i--);
}
}
[/mw_shl_code]
|
|