主芯片:STM32F103VE 系统:ucos ii
外部时钟 12M PLL进行6倍频产生72M系统时钟
#define COMMONPost(Flag) OSFlagPost(COMMONFlag,Flag,OS_FLAG_SET,&err)
#define COMMONPend(Flag) OSFlagPend(COMMONFlag,Flag,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&err)
#define TIM4_Flag (1<<1)
#define COMMONFlagInit 0
#define TIME4_PRESCALER 72
OS_FLAG_GRP * COMMONFlag;
void main()
{
bool Flag=0;
…………硬件初始化
OS_CPU_SysTickInit();
....
DRV_Tim4Init();
COMMONFlag = OSFlagCreate(COMMONFlagInit, &err);//创建标志位
创建任务AppTask();
}
void AppTask(void);
{
while(1)
{
DRV_Tim4Pend();
if(Flag)
{
SetRLED();
Flag=0;
}
else
{
ClrRLED();
Flag=1;
}
}
void DRV_Tim4Pend(void)
{
uint8 err;
COMMONPend(TIM4_Flag);
}
void DRV_Tim4Init(void)
{
…………
TIM4->PSC = TIME4_PRESCALER-1;//72分频
.......
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;
...
TIM4->ARR = 250;//250us定时
……。
TIM_Cmd(TIM4, ENABLE);
}
//中断函数
void DRV_Tim4Irq(void)
{
if(TIM4->SR&0X0001)//溢出中断
{
TIM4->SR&=~(1<<0);//清除中断标志位
COMMONPost(TIM4_Flag);
}
}
这时用示波器看输出的高低变化为250us
当把系统时钟改为12M #define TIME4_PRESCALER 12
时出来的波形变化有时小于200us有时大于300us请问各位大侠这是什么原因呢?
|