你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

谁有delay函数是基于SYSTICK

[复制链接]
fjlmnb456 提问时间:2018-3-21 23:30 /
   STM32F030F4 P6芯片用内部时钟。    想用滴答延时函数做。2.5kHz pwm波形。现在滴答延时函数搞不定,希望高手提供个例子。

收藏 评论12 发布时间:2018-3-21 23:30

举报

12个回答
feixiang20 回答时间:2018-3-21 23:58:00
要不去看看“STM32滴答时钟也就是SYSTICK做精确的延时函数”这个文章,有代码

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-22 07:29:17
st官方的例程很多呀

systick(库函数).rar (1.15 MB, 下载次数: 1)

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wudianjun2001 回答时间:2018-3-22 08:15:28
官方有相关的例程的,
黑皮男 回答时间:2018-3-22 08:44:05
官方HAL_Delay
stm1024 回答时间:2018-3-22 09:51:18
直接贴代码,基于F103
  1. void Delay_ms(uint32_t ms)
  2. {
  3.     uint32_t temp;
  4.         SysTick->LOAD=9000*ms;
  5.         SysTick->CTRL=0x01;//CLKSOUTCE=0, so 9 MHz
  6.         SysTick->VAL=0;
  7.         do
  8.         {
  9.                 temp=SysTick->CTRL;
  10.         }while((temp&0x01)&&(!(temp&(1<<16))));
  11.         SysTick->CTRL=0;
  12.         SysTick->VAL=0;
  13. }
复制代码

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-3-22 09:59:20
本帖最后由 toofree 于 2018-3-22 10:00 编辑

默认的HAL_Delay()是1ms级延时。
对应的系统时钟初始化中有一条指令,HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_RCC_GetHCLKFreq()/1000的值越小,频率越高。当HAL_RCC_GetHCLKFreq()/1时,为1Hz;你要分个5KHz,那么就是HAL_RCC_GetHCLKFreq()/200。
在函数中用一条HAL_Delay(1),就相当于200us延时。

傲游截图20180322095601.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Tcreat 回答时间:2018-3-22 10:05:43
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;
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

dsjsjf 回答时间:2018-3-22 10:37:37
官方HAL库中使用的,你可以参考。
  1. __weak void HAL_IncTick(void)
  2. {
  3.   uwTick++;
  4. }
复制代码
  1. __weak void HAL_Delay(__IO uint32_t Delay)
  2. {
  3.   uint32_t tickstart = HAL_GetTick();
  4.   uint32_t wait = Delay;
  5.   
  6.   /* Add a period to guarantee minimum wait */
  7.   if (wait < HAL_MAX_DELAY)
  8.   {
  9.      wait++;
  10.   }
  11.   
  12.   while((HAL_GetTick() - tickstart) < wait)
  13.   {
  14.   }
  15. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版