本帖最后由 liusheng1998 于 2023-2-25 10:40 编辑
谢谢帮助,
1.滴答定时器件做微秒级别的定时,只能做到百毫秒级别,我的需求是最少做到10us的级别的。
所以没有采用滴答定时器方案。但是我有放在我的整体工程代码中尝试过。
2.针对你说的单独定时器检测,我目前再 正点原子的定时器历程中进行测试,
经过我刚刚在源程序代码的框架下修改发现,我的思路代码没有问题。实验效果满足我的设想
//主函数中初始化及while(1)循环如下
TIM3_Int_Init(5000-1,8400-1); //定时器时钟84M,分频系数8400,所以84M/8400=10Khz的计数频率,计数5000次为500ms
while(1)
{
LED0 =! LED0;
Delay_us(4);
};
延时函数
void Delay_us(int T)
{
TIM_Cmd(TIM3,ENABLE);
while(t<=T)
{ }
t=0;
TIM_Cmd(TIM3,DISABLE);
}
中断溢出处理函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
LED1=!LED1;//DS1翻转
t++;
//printf("%d\r\n",t);
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
实验效果 LED0 2秒翻转一次。:主循环的延时代码 Delay_us(4) 生效
LED1 1秒翻转一次。:TIM3中断处理函数生效:
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
LED1=!LED1;//DS1翻转这里可行的原因是:因为设置的进入中断的周期是1ms。 如果我要设置1us,就会失败
|