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

【实测教程】STM32CubeMX-STM32L4(定时器Timer2)

[复制链接]
STMCU小助手 发布时间:2023-1-15 00:07
一、开发板平台简介:
6 l. R# l- |. f(1)开发板主芯片型号:STM32L431RCT6" a; s2 x" p2 {" I* t
(2)开发板主芯片封装:LQFP-64_10x10x05P0 v. L3 P. T- h* }
(3)开发板主芯片内核:ARM® Cortex®-M4* R+ Q- d* I! L; a: Z& ]
(4)开发板主芯片主频:80MHz" X5 [8 E; ]+ e1 X" b& T
(5)开发板主芯片Flash大小:256KB( q, \, [% u4 g& L3 f4 b# g# j
(6)开发板主芯片RAM大小:64KB
' L4 i$ o9 n/ m' q% _3 P(7)其他外设:请参考芯片手册2 `, R" k* g1 c  A% p# }7 D* W
1 E8 d/ R+ A3 d$ T1 h
bb91345227434ee7a43a34bf3fe366e6.png
1 D+ A+ O$ F- ^' Z2 o, Q  y# O# n: ?7 O# ?" {& @
929c0cce04aa4115a8623703982bf3e1.png
' T7 a9 d* }6 g

7 X2 S( Z" H8 U二、新建工程( r: p2 |3 [$ B6 T- l; p; P4 W
1、打开STM32CubeMX,点击“File”-->"New Project"$ N9 F" ~' m% `- d7 A# C+ @& C
% `: J! p7 }4 `" O
2399170347904e959c855fefd5877f84.png $ q' H* v* ^* M+ z# G% [" M% G7 J
" |, `9 K0 u& @
2、等待打开主芯片选项界面(大约1分钟时间)。4 S6 c  x- _2 Z  |+ q" b
d74d2fdc60c9440483e2b7cf8d928e7f.png
3 ?2 C" z+ V$ U* h. h) A! I
1 n3 N" u) j) ]& u( r# @
3、昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处现在STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
* Z) e* B4 I  C0 G2 f+ i, d
! V  f. l0 e7 r" z
7b80345238d74bea82ce70e1a348f7b4.png
0 h% i" p7 x+ Y' C$ y5 ~, t7 v
$ f9 `, J! p' S9 d4、选择时钟源。! T4 U3 O7 u/ Y- ~# Y" g
(1)因为开发板上有8M外部时钟,此处选择外部高速时钟(HSE)。9 g" s$ f6 ?5 L. F
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理。, c& @6 B/ b' c: C, v! W7 N' y

  h, {) Z) e2 `0 `0 l0 T5 h
72119b971f62410fa8344f7f9fb9f389.png / M9 o) C8 p& J+ M

! h8 j+ p0 ^' e7 ^5、查STM32L431RCT6开发板原理图得LED1控制引脚为PC0,则配置GPIO的引脚PC0。
- I$ n% q6 `2 \3 q% M2 Z3 u& r4 ~- M4 @+ r8 d( c
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
8 ~% A8 e8 t4 w! L7 y% P# d( m5 v6 I, G3 }
0045751883134411a48743a0cd4a97d9.png
6 K6 u) Y. W+ q7 s4 C% O# L
1 K' ]: [& z% \
492907c1e71149819adbaee4516a2af4.png
! B0 H" b+ [% f$ {) n( P- F( p$ l( H7 X2 t. }* J/ n
6、根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。) f8 P6 q; M" A; W

. \- H0 d- T) R! [( S
38ff4b80e1c5495ba3076a5158fd91fa.png
; h4 i* Q9 x! L; T  ^, q
" q8 }9 d9 `1 I# T4 E3 u2 Q4 W
7、配置定时器TIM2$ p, L1 j6 D9 [$ ~3 _5 ^
(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。0 H3 l( I( e/ p- Q  z7 E/ @( N
# b2 {! B) K# I$ n* V! C, [
(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。
1 K# B- p) h2 g. g9 W! ^2 g2 O. R
+ r3 c4 D4 T- Q3 h5 e" f& x
6a0f2c39237b45b9adb61940c9805d3b.png
6 v' [( F- O, g4 L3 z5 L+ H
  l9 \5 ^3 l4 P) W& G3 \* J: {- O0 `(3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):1 x, |' P- L+ Y5 k4 x' ?
' |2 n, a+ w# ^6 b9 W# |
4b2d341e8da446ecacc3030b2f962f4c.png
% q+ @0 F3 x# ~2 f4 c6 ~
* r- U- f% U* f
(4)开启TIM2中断即可。
" Z6 N5 Q* b) \* I5 t% \8 ]2 I2 r' Q+ m7 ~
8d40ecae57144183ba5f885b7c77ca1d.png / G' V( s2 i0 V+ p* g. h: F

% S; u& k' u2 h0 K6 n' J+ j 8、配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。9 d* p3 ~* D/ k0 v% J; l9 H

( M; X7 L( M2 ^" T* f
bb92fee3c06e4743aa1efd770bdc9cc8.png
7 A0 ]) N, |4 p  ~4 L
' U0 O2 |' L9 _, w2 L! d# F( X4 e
9、完成配置工程。
& c( f8 c  y+ X6 ]  ~# d  ]& r% H+ u& n; o4 Z  U) o
ef6feb3c454441c59bf509c6692e254d.png $ `1 r/ l) v3 o3 G) h5 `8 |1 C
- d  l7 G% M- l' J
10、生成代码。! t! ^7 n: P, |) w: o

7 s0 u) Q$ Z7 w$ f
8eaa7d0babea40ee93f158481a6ee471.png # i! k/ q$ v4 F) U
- U* n5 r" B! W* i: i5 }! W
三、在KEIL 5中编写代码. Z2 o( @2 _2 U# |  `1 t8 w* h
1、找到刚才新建工程的存储路径,安装项目名称,打开项目工程。# I9 q+ X* j5 F. Z' d  O; D, w3 s
5 N" h. _& S* f7 o
5951e4dd80b94d94b063f26ba2871dd2.png 5 C# E6 Q0 |- y1 c( x, b/ @/ M: g# F
) s2 N: p8 J: U" X6 A- ]
2、在stm32l4xx_it.c中生成的中断处理函数如下,定时器TIM2所有的中断都会调用该中断服务函数TIM2_IRQHandler:
" a9 W1 X9 a0 F; l/ ~0 W  t5 H& ]9 ^. p9 ^; b' \
d704737d507746e59c7911cba14d6fe3.png
- g* z2 B6 t+ ]& @
- C6 x+ ?- {( O% o; ?8 p1 b* H3、在中断处理函数中自动生成了HAL_TIM_IRQHandler(&htim2)代码,该代码会自动根据中断事件回调相应的函数,这里我们需要处理更新中断的事件,回调函数默认是__weak定义的,所以在stm32l4xx_it.c中重新定义该回调函数,并且在该函数中添加功能的时候,因为该回调函数会被所有的定时器共用,所以需要先判断是哪个定时器在调用:
/ X; s4 k/ o1 ](1)在回调函数中添加LED1反转的控制函数。6 d! v' V. x9 u7 \' p% G% s
; w: `" C$ R/ k- `$ o1 }
  1. 5 @- s) P/ G6 B' a. P, o, X( W5 X9 r
  2. /* USER CODE BEGIN 1 */
    : D5 D  E+ `- o1 J  Y% @, W
  3. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)
    # ?% b1 F) a* ~- s
  4. {
    4 f- v6 v  _5 n8 q. E  H$ v
  5.         if(tim_baseHandle->Instance == htim2.Instance)
    + X- q: [& m+ z1 ?% B9 S
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);   //反转LED1
    $ Z7 V/ c3 P$ R9 F& n
  7. }
    3 l3 G2 Q) ~1 r

  8. . n1 Y9 J* C2 @, |
  9. /* USER CODE END 1 */
复制代码

/ n* n/ l# G: P( q(2)重新函数的位置如下:! H  S# K7 X# u& j$ Q! {- }

- V9 z  V) u% a& f& m, y. v7 G( `
5274e54a690145329f7c490ef9c486a0.png . w) @5 u+ E2 g, U3 W* i0 e8 m
( y! N5 `* s0 _: u: e7 T
4、最后在MX_TIM2_Init()函数中开启TIM2并使能中断。% B" k% R5 l3 c
  1.   /* USER CODE BEGIN TIM2_Init 2 */
    9 {( D- h. o/ J" q# P1 \0 P
  2.                 HAL_TIM_Base_Start_IT(&htim2);            //开启TIM2中断1 D8 _/ N2 E2 m  M  y1 g- ]% C9 d
  3.   /* USER CODE END TIM2_Init 2 */
复制代码
7 W' k2 h# n0 V9 s
890dbf6203e54d8ba6259be34e4a135c.png
$ f" {/ f, S) O5 G/ Z: z3 L9 z! w# e5 F" }5 T
5、选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。  b; _  d7 ~( c% C* u& e

% O- j* C. v3 ?& q1 d0 k
d444af879a804dc1bc924096aa0ff97c.png
3 k2 a  K& |, h8 p
2 ?5 a0 @8 f" f( E0 |* f 6、点击“build”(或快捷键F7)进行编译程序,可以看到编译成功的提示“0 errors,0 warnings”。' B( o% F. D. [/ ]' l

" x- c( r; }, P( F( ~3 X
1e522f91c7ff4e528c21052688aa5825.png & Y  F$ X( r8 K* C- N4 k
5 J4 e5 {* x# t3 k) n* b' G
7、点击Download(或者快捷键F8),即可下载程序。即可看到LED1每隔0.5s闪烁一次。
3 Q7 ^, j) H& b& e& u+ t5 ]8 ^  x9 r9 j1 a! @
7b47f33669f749e698147ecffc06bf4b.png ) d, P: Z% s# c

: }$ `$ |- V- K. e0 |" L" L7 v8、 如果下载程序后,没有看到LED1灯闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。- q7 m. _$ x. e; w% ~. E

, L6 o, A5 c' e. _+ P  Y1 g' V: a
7f75477f2ac24930b2e5d00ffe27f00e.png 4 W: X0 P1 D) ~$ W, [

! D- A1 e" `7 e" x2 h' V& P$ U9、至此,STM32L431RCT6通过通用定时TM2控制LED1灯闪烁即可完成了。
7 Q1 Q+ n5 U6 j$ S% b$ R, g————————————————, a  |, A3 M* I. X# [
版权声明:智能小屋ZYXC) T. C" J2 R2 K% I3 k3 o

8 Y/ j* `7 Z' B$ }- j
) C+ D+ _% u1 ~- b( c4 N
收藏 评论0 发布时间:2023-1-15 00:07

举报

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