打印
[N32L4xx]

延时函数

[复制链接]
692|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qeeuly|  楼主 | 2023-1-31 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问有没有延时函数?
自己写一个也可以,就是不如库自带的方便。

使用特权

评论回复
沙发
blust5| | 2023-1-31 16:09 | 只看该作者
写个for循环不就行了

使用特权

评论回复
板凳
WK520077778| | 2023-2-1 00:11 | 只看该作者
比较多的选择,看具体场景

使用特权

评论回复
地板
jobszheng| | 2023-2-1 09:06 | 只看该作者
还是看具体的应用场景吧!
优选设计成状态机的模式,把延迟部分更新为一个延时状态

使用特权

评论回复
5
CXFLBH| | 2023-2-1 09:09 | 只看该作者
//延时程序,由delay参数确定延时时间
void Delay(unsigned int delay)
{                               
   unsigned char k;
   for(;delay>0;delay--)
   for(k=0;k<255;k++);
}

使用特权

评论回复
6
quna| | 2023-2-1 15:31 | 只看该作者
void systick_delay_us(u32 nus)
{      
    u32 temp;      
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);    //select system clock   
    SysTick->LOAD=nus*(SystemCoreClock/1000000); //time relode           
    SysTick->VAL=0x00;        //clear timer value
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;  //Start countdown  
    do
    {
        temp=SysTick->CTRL;
    }
    while(temp&0x01&&!(temp&(1<<16)));//wait for the time reach
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //close the count
    SysTick->VAL =0X00;       //clear timer value   
}

/**
* @brief  us delay  program function.
* @param nus: the setting us value.
*   note: The system clock should be an integer multiple of 1M .
*   It is ensure accuracy .
*/
void systick_delay_ms(u16 nms)
{                 
    u32 temp;
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);  //select system clock   
    SysTick->LOAD=(u32)nms*((SystemCoreClock/1000000)*1000);//time relode(SysTick->LOAD is 24bit)
    SysTick->VAL =0x00;           //clear timer value
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //Start countdown  
    do
    {
        temp=SysTick->CTRL;
    }
    while(temp&0x01&&!(temp&(1<<16)));//wait for the time reach   
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //close the count
    SysTick->VAL =0X00;       //clear timer value               
}

使用特权

评论回复
7
qeeuly|  楼主 | 2023-2-1 16:18 | 只看该作者
quna 发表于 2023-2-1 15:31
void systick_delay_us(u32 nus)
{      
    u32 temp;      

谢谢。
再问下,如果在主循环的函数里调用这两个延时,就是操作SysTick,不会影响定时中断吧?

使用特权

评论回复
评论
quna 2023-2-2 11:49 回复TA
不会 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

15

帖子

0

粉丝