请问stm32f030f4p6微妙延时怎么做?

2019-07-14 18:34发布

感谢各路大神指点!
感谢各路大神指点!
感谢各路大神指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
60user135
1楼-- · 2019-07-15 00:39
精确点的 就用定时器做
vyewrewr
2楼-- · 2019-07-15 00:52
 精彩回答 2  元偷偷看……
60user135
3楼-- · 2019-07-15 01:31
用系统滴答也可以  

INT16U g_uwDelayTime_ms = 0;
static INT8U  g_ubMultiple_us = 0;
static INT16U g_uwMultiple_ms = 0;


void Delay(INT16U mTime)
{
        g_uwDelayTime_ms = mTime;
        while(g_uwDelayTime_ms != 0);
}


void Delay_Init(INT8U sysclk)
{
        SysTick->CTRL &= 0xFFFFFFFB;                                     // Ñ¡ÔñTickʱÖÓÔ´¡ª¡ªHCLK/8
        g_ubMultiple_us = sysclk / 8;
        g_uwMultiple_ms = (INT16U)sysclk / 8 * 1000;
        //SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;                   // Ñ¡ÔñTickʱÖÓÔ´¡ª¡ªÏµÍ³Ê±ÖÓ
        //g_ubMultiple_us = sysclk;
        //g_uwMultiple_ms = (INT16U)sysclk * 1000;
}


// ΢Ã붨ʱ
void Delay_us(INT16U time)
{
        INT32U ulTemp = 0;
       
        ulTemp = (INT32U)time * g_ubMultiple_us;
        SysTick->LOAD = ulTemp - 1;
        SysTick->VAL = 0;                                             // ¸³Öµ¿ÉÇå³þSysTick_CTRL_COUNTFLAG_Msk λ
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;                     // Æô¶¯¼ÆʱÆ÷
        do
        {
                ulTemp = SysTick->CTRL;
        }
        while((ulTemp & SysTick_CTRL_COUNTFLAG_Msk) != SysTick_CTRL_COUNTFLAG_Msk);       // µÈµ½¼ÆÊýÍê³É
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;                                        // Í£Ö¹¼ÆʱÆ÷
        SysTick->VAL = 0;       
}


// ºÁÃ붨ʱ
void Delay_ms(INT16U time)
{
        INT32U ulTemp = 0;
       
        ulTemp = (INT32U)time * g_uwMultiple_ms;
        SysTick->LOAD = ulTemp - 1;
        SysTick->VAL = 0;                                              // ¸³Öµ¿ÉÇå³þSysTick_CTRL_COUNTFLAG_Msk λ
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;                      // Æô¶¯¼ÆʱÆ÷
        do
        {
                ulTemp = SysTick->CTRL;
        }
        while((ulTemp & SysTick_CTRL_COUNTFLAG_Msk) != SysTick_CTRL_COUNTFLAG_Msk);       // µÈµ½¼ÆÊýÍê³É
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;                                        // Í£Ö¹¼ÆʱÆ÷
        SysTick->VAL = 0;
}
Tussi
4楼-- · 2019-07-15 05:11
60user135 发表于 2018-8-14 08:23
用系统滴答也可以  

INT16U g_uwDelayTime_ms = 0;

谢了,就是要滴答时钟
60user36
5楼-- · 2019-07-15 09:43
用SysTick配置比较靠谱,不需要中断
zhouxk
6楼-- · 2019-07-15 10:30
微秒延时,用滴答时钟最省事;
要更精准的话,用定时器查询方式。

一周热门 更多>