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

【经验分享】STM32CubeIDE自平衡小车教程3.通过滴答定时器完成LED的定时闪烁

[复制链接]
STMCU小助手 发布时间:2022-3-14 22:38
以LED100HZ闪烁为任务,过程如下:

1.第一步首先要对GPIO引脚和IOC文件进行设置,详细步骤可参考上一教程。

   GPIO设置和LED点亮教程

2.在工程下新建一个文件夹并命名。

18ITNI_VLW2`BNCLOL]AQVD.png

4WH9N)W8P[Q]DQ8W]N9IBZP.png

3.在User文件夹下新建Inc和Src文件夹。

C17%Q])W8FYK0MZ~{_)1V_W.png

4.在Src中新建.c文件,在Inc中新建.h文件。

(注意新建的文件夹需要设置路径)

先设置路径:

QO@XZ_JY`54$P5FW$_O4SYI.png

R87`BO}X@X[`86BG(GE($XT.png

5.在.c文件中加入以下代码:

  1. /*
  2. * hal_systick.c
  3. *
  4. *  Created on: May 25, 2021
  5. *      Author: Administrator
  6. */
  7. #include "main.h"

  8. static volatile uint32_t UsTicks = 0;

  9. void GetUsTicks(void)
  10. {
  11.         UsTicks = HAL_RCC_GetSysClockFreq()/1000000;
  12. }

  13. void HAL_Systick_Init(void)
  14. {
  15.         GetUsTicks();
  16. }

  17. uint32_t HAL_Systick_Millis(void)
  18. {
  19.         return HAL_GetTick();
  20. }

  21. uint32_t HAL_Systick_Micros(void)
  22. {
  23.         register uint32_t ms,SystickCycle;
  24.         do
  25.         {
  26.                 ms = HAL_GetTick();
  27.                 SystickCycle = SysTick->VAL;
  28.         }while(ms != HAL_GetTick());
  29.         return (ms * 1000) + (UsTicks * 1000 - SystickCycle) / UsTicks;
  30. }

  31. void HAL_Systick_DelayUs(uint32_t us)
  32. {
  33.         uint32_t now = HAL_Systick_Micros();
  34.         while(HAL_Systick_Micros() - now < us);
  35. }

  36. void HAL_Systick_DelayMs(uint32_t ms)
  37. {
  38.         while(ms--)
  39.                 HAL_Systick_DelayUs(1000);
  40. }
复制代码

6.在.h文件中加入以下代码。

  1. /*
  2. * hal_systick.h
  3. *
  4. *  Created on: May 25, 2021
  5. *      Author: Administrator
  6. */

  7. #ifndef INC_HAL_SYSTICK_H_
  8. #define INC_HAL_SYSTICK_H_

  9. void GetUsTicks(void);
  10. void HAL_Systick_Init(void);
  11. uint32_t HAL_Systick_Millis(void);
  12. uint32_t HAL_Systick_Micros(void);
  13. void HAL_Systick_DelayUs(uint32_t us);
  14. void HAL_Systick_DelayMs(uint32_t ms);

  15. #endif /* INC_HAL_SYSTICK_H_ */
复制代码

7.在mian.c文件的/* USER CODE BEGIN Init */和/* USER CODE END Init */中加入以下代码:

W2AAC[74P}SM(K_W7_~J.png

  1.   uint32_t Timer1ms=0;
  2.   uint32_t Timer_1_100Hz=0;
  3.   Timer1ms=HAL_Systick_Micros();
复制代码

8.在main.c的while函数中加入以下代码:

~FS23GZJZSBW8~R$XF[4JOB.png

  1.           if(HAL_Systick_Micros() - Timer1ms >=1000)//微秒
  2.           {
  3.                   Timer1ms=HAL_Systick_Micros();
  4.                   Timer_1_100Hz++;
  5.           }
  6.           if(Timer_1_100Hz>=100)
  7.           {
  8.                   Timer_1_100Hz=0;
  9.                   HAL_GPIO_TogglePin(LE_GPIO_Port, LED_Pin);
  10.           }
复制代码

9.点击编译,不报错再进行烧录,实现LED100HZ闪烁任务。


收藏 评论0 发布时间:2022-3-14 22:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版