[其他ST产品] STM32单片机的延时函数

[复制链接]
646|16
 楼主| 慢醇 发表于 2023-7-8 12:35 | 显示全部楼层 |阅读模式
函数的延时有普通的方式:

  1. //微秒级的延时
  2. void delay_us(uint32_t delay_us)
  3. {   
  4.   volatile unsigned int num;
  5.   volatile unsigned int t;

  6.   
  7.   for (num = 0; num < delay_us; num++)
  8.   {
  9.     t = 11;
  10.     while (t != 0)
  11.     {
  12.       t--;
  13.     }
  14.   }
  15. }
  16. //毫秒级的延时
  17. void delay_ms(uint16_t delay_ms)
  18. {   
  19.   volatile unsigned int num;
  20.   for (num = 0; num < delay_ms; num++)
  21.   {
  22.     delay_us(1000);
  23.   }
  24. }

直接延时delay_ms(500)

 楼主| 慢醇 发表于 2023-7-8 12:37 | 显示全部楼层
定时器延时

  1. #include "stm32f10x.h"   

  2. volatile uint32_t ms_ticks = 0;

  3. void SysTick_Init(void)
  4. {
  5.     if (SysTick_Config(SystemCoreClock / 1000))
  6.     {
  7.         // 错误处理
  8.         while (1);
  9.     }
  10. }

  11. void SysTick_Handler(void)
  12. {
  13.     ms_ticks++;
  14. }

  15. void delay_ms(uint32_t ms)
  16. {
  17.     uint32_t start_ticks = ms_ticks;

  18.     while ((ms_ticks - start_ticks) < ms);
  19. }

  20. int main(void)
  21. {
  22.     SysTick_Init();
  23.    
  24.     while(1)
  25.     {
  26.         LED1_ON();
  27.         delay_ms(500);
  28.         LED1_OFF();
  29.         delay_ms(500);
  30.     }
  31. }

 楼主| 慢醇 发表于 2023-7-8 12:37 | 显示全部楼层
delay_ms(500);延时500ms;
 楼主| 慢醇 发表于 2023-7-8 12:37 | 显示全部楼层
注意
void SysTick_Handler(void)
{
ms_ticks++;
}
这个函数在在stm32f10x_it.c中也有定义,但是没有实现,找到这个在stm32f10x_it.c,大约在135行左右,把他注释掉就好了。
643757107 发表于 2023-7-9 17:41 | 显示全部楼层
定时可以使用HAL_Delay()
MessageRing 发表于 2023-7-9 22:46 | 显示全部楼层
HAL_Delay()没有微秒
Undshing 发表于 2023-7-10 23:27 | 显示全部楼层
MessageRing 发表于 2023-7-9 22:46
HAL_Delay()没有微秒

自己改一下库就有了
Clyde011 发表于 2024-1-16 09:24 | 显示全部楼层
万图 发表于 2024-1-16 11:20 | 显示全部楼层

理解了共模噪声我们就知道共模电感就知道为什么共模电感会接在交流一侧了
Uriah 发表于 2024-1-16 12:23 | 显示全部楼层

这样就可以制作出我们想要的邮票孔了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

1382

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部