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

【经验分享】STM32cubeMX教程-定时器实现定时1秒LED闪烁

[复制链接]
STMCU小助手 发布时间:2022-6-26 13:54
    软件:
STM32CubeMX V4.25.0  
keil_u5
    固件库版本:
STM32Cube FW_F1 V1.6.1
    硬件:
OneNet 麒麟座V1.4
    在STM32CubeMX中新建项目,选择正确的MCU型号

/ w$ F  h- ?$ Z7 |# E
VL@T1M1X}C1BSB9Z0PEZJDE.png

/ z# r7 a& S4 `  u1 D% n6 v
    首先设置RCC和SYS,如下图

6 q# C8 I5 o' h; b
(O3_{$B5IFGBMM{7A3PAURH.png

* s* C* _2 S, E  V; n/ J/ W
    启用TIM1,选择内部时钟源(Internal Clock)。
9 N) p- |" h; P" a: \
94O0N4L$(EQC{3{WT]UT{WB.png

: J6 x" h" J9 t$ [! k# h: j
    根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图
! L- U7 j* ~) M& J9 _3 `
AL($H`{O@MURB_H8W(@0UM5.png
1 R; g% r/ B! B6 V% G, ?
    GPIO设置 PC7和 PC10为GPIO_OUTPUT, (这是麒麟座V1.4的四个LED管脚其中的两个)

& K: m7 J4 M# ~" ~% T
[NWP5[0S5)4N3WZP]{Y[(G3.png
" [8 P4 V7 e) k, E2 _  m/ ~
    设置其中一个默认为高电平,另一个默认为低电平,User Label分别是LED1和LED4。

) W: S/ G2 N5 u
RI[Q0CPNE[Y~(S%ZEK254O2.png

- R; [  b1 N+ a" T
    设置TIM1,启用中断
% Y8 b4 d7 k, H+ z6 l
EL]VPH1JW[7)VLN3MI}S65S.png

! N# K4 W" ^; }+ `3 n+ z5 S
    由于TIM1是挂在APB2总线上。在文章最后会描述判断当前计时器在哪个总线的方法。查看时钟树我们知道APB2当前频率为72MHz,我们希望每秒钟发生2次中断,就把预分频系数设置为36000-1,自动重载值为1000-1,得到的计时器更新中断频率即为72,000,000/36000/1000=2Hz。此时定时为0.5秒,若要实现定时1秒,则将1000改为2000

/ B2 \( b) F- f
2R%ICRIS@`4M$]E~493XJ]H.png
( o* e% l/ Z; d5 N

" j& u$ D4 s! e$ P: E
    点击任务栏的生成代码图标

8 z+ E  N- k1 }( G$ Q. U& S9 C# s
QM5FAJ5)RE$~Y]L5N3]HQ_A.png
; r/ ^; U9 [5 A9 K
    生成工程,并添加相关程序。
首先,在main.c程序中添加(放置于定时器配置之后)开启 TIM1计时中断。
  1. /* USER CODE BEGIN 2 */9 t3 L; Q& _) ]' S; R: @
  2.     /*使能定时器1中断*/
    5 i: C9 s- q7 D$ _
  3.     HAL_TIM_Base_Start_IT(&htim1);) Z/ Z! A3 r9 w  S- C  X: w
  4.   /* USER CODE END 2 */
复制代码

7 I# V) l( z8 f, X0 T8 C& T5 x) l
其次,在 tim.c文件中添加定时器中断完成回调函数。
  1. /* USER CODE BEGIN 1 */
    " S% `5 {& |% w3 T
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    # g, x2 H! e  [3 h3 V$ w( s% v& m$ A
  3.     + B8 b$ E) I; v2 I, L2 t
  4.     if (htim->Instance == TIM1){' S( f: F  q; C9 @  G2 l# P; E
  5.         + D" `2 ], p8 t
  6.         /* Toggle LED */' U: `0 O' I( ?; o
  7.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    * O3 S3 d8 w. B2 ~2 k* _, U
  8.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    : _# }+ F3 Y+ n3 O
  9.     }
    6 Q) @& S/ E0 h! q
  10. }
    ! {" ^7 N$ \) ?9 a8 b1 |
  11. /* USER CODE END 1 */
复制代码

5 {/ W6 p4 B/ A2 ^. q3 [

* d5 n7 L8 Z+ S
赞 收藏 评论0 发布时间:2022-6-26 13:54

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版