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

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

[复制链接]
STMCU小助手 发布时间:2023-1-15 00:07
一、开发板平台简介:
0 `0 N( c/ p8 q* {(1)开发板主芯片型号:STM32L431RCT6% R1 y# q3 h2 y% `4 ?) m9 B
(2)开发板主芯片封装:LQFP-64_10x10x05P
0 b, n+ }- b" }6 V+ _; x' l0 }( w(3)开发板主芯片内核:ARM® Cortex®-M4' h0 v. Z( @- B; [6 t  h1 e* y
(4)开发板主芯片主频:80MHz
- M# o1 _7 }# K9 t. g(5)开发板主芯片Flash大小:256KB3 p5 e- _( n4 k4 p
(6)开发板主芯片RAM大小:64KB. H+ o- V+ d, D% @; N/ N/ K5 h
(7)其他外设:请参考芯片手册
: d  p$ [# W0 H" a* p0 B) z2 ^, z
9 x' s" h" s" T4 C/ j) F9 q! c
bb91345227434ee7a43a34bf3fe366e6.png 0 z6 |+ [1 Q3 n' ^- D3 f

3 u6 z; w0 [. V( u) ^( t
929c0cce04aa4115a8623703982bf3e1.png
& _9 N4 x* O' T! |. K
. o" |: @7 x# P& b  B. M' D
二、新建工程
* h! K1 k. D8 M0 g1、打开STM32CubeMX,点击“File”-->"New Project"
- o- ~2 w5 |3 d- c. H
9 i! i3 m) g1 O( l! s% F# W
2399170347904e959c855fefd5877f84.png
2 U+ I. m6 V  Z' N( d, Y6 O

- `+ C8 i, ^% m5 ?* ~3 w2、等待打开主芯片选项界面(大约1分钟时间)。
% X- G3 ^5 ?* R
d74d2fdc60c9440483e2b7cf8d928e7f.png
5 f3 K0 n9 y1 d7 z9 b4 b8 N8 m4 E

$ ]1 M9 G% S2 Z! y' m$ I3、昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处现在STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。/ h. c- F3 Z9 [& Z

9 A+ g. U8 Y+ J4 x8 r
7b80345238d74bea82ce70e1a348f7b4.png
( P- G4 }1 i- h. A9 B2 O1 s& b1 ]& y, O1 n7 G
4、选择时钟源。
. H+ y8 b# J" P* D(1)因为开发板上有8M外部时钟,此处选择外部高速时钟(HSE)。7 a, @! G% U2 l( p5 C2 g/ ^) w$ b  [
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理。
# }: y2 \$ t- a8 }- I' u* J, Q! `" S& r) j/ r8 H* F; A- k
72119b971f62410fa8344f7f9fb9f389.png ) y# `+ D8 x4 ?& X( h" y6 }8 d/ C5 P2 q
' I* h9 d6 {1 ~$ E: S
5、查STM32L431RCT6开发板原理图得LED1控制引脚为PC0,则配置GPIO的引脚PC0。' u- U" D8 _8 d" i% ?. Q  \, ~
3 F9 J2 z" W6 A( R* Y  b3 O. i
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。# x6 H2 a$ e+ D

  G/ K  p" k: N, l! I
0045751883134411a48743a0cd4a97d9.png
& z( _( B+ C* A$ C' I" E  J! b" G" G' e& w
492907c1e71149819adbaee4516a2af4.png
( @$ Z! N; F  E  h1 X% U1 f' p$ F) z; h  Z
6、根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。& r5 _8 D+ Y) I
3 X6 [4 g8 d" z' [. _' d
38ff4b80e1c5495ba3076a5158fd91fa.png - j: T6 k* I9 x7 f

* t5 F9 r, M2 q# |7、配置定时器TIM2
6 m7 _& k1 |- C: s+ I1 t$ d(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。
( Q6 M) m! R7 s% D( G

# I, F" ]% W/ E5 Y" y(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。
$ _" g& E' @; T4 z6 z& M! |6 V7 i6 k" n8 i4 f8 [' Z1 F
6a0f2c39237b45b9adb61940c9805d3b.png ' l0 s4 l, z( ~( F

7 d& n7 M6 T; X# L( O(3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):4 ~' U5 |- k1 O: e% d8 r3 w7 w

. g7 t. }8 P9 @9 P6 ~6 e; `
4b2d341e8da446ecacc3030b2f962f4c.png
* S6 V- _9 M% `1 z6 H
- Y! ~" ?# w7 Z5 p5 T& n# T4 S
(4)开启TIM2中断即可。0 V. |) n' X+ f( e. S, P
' Z, `! z! H, i+ }; ]
8d40ecae57144183ba5f885b7c77ca1d.png ( M0 k4 z- A8 q  {

/ I8 {3 p7 e; F6 |% c- y6 Y 8、配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。+ G; [" @% _3 w: C

/ B% H$ j$ }% ~3 u( i( A+ V: R
bb92fee3c06e4743aa1efd770bdc9cc8.png 3 y( q$ O* _' f0 R" q2 h3 h
- @' T0 X9 R' ^8 }! j2 |

& \; {, H( I& p, z/ h9、完成配置工程。
5 U- [1 v" o# ~6 F9 ]* e8 h% c9 [  A
# T" ^2 M' H) e: u; m
ef6feb3c454441c59bf509c6692e254d.png ) {) j+ H' n0 W1 c4 b8 v7 q( F

- n  W/ ]9 u, T$ Q3 r10、生成代码。
& x! b2 W; B. e7 ]) @4 C+ g: D' V
8eaa7d0babea40ee93f158481a6ee471.png
. F3 a2 N5 r$ `
3 i6 F, Z# t0 z% w7 z 三、在KEIL 5中编写代码
4 V* E; V- h0 T# g4 ~3 l1、找到刚才新建工程的存储路径,安装项目名称,打开项目工程。- J/ E8 Y# |0 R! \/ m$ ~7 Z% l
# [4 E8 T* v* [) @* S: O% r- |
5951e4dd80b94d94b063f26ba2871dd2.png
; V3 H8 ^& T3 G6 I" U4 J1 a& r: k$ a1 I0 _$ e
2、在stm32l4xx_it.c中生成的中断处理函数如下,定时器TIM2所有的中断都会调用该中断服务函数TIM2_IRQHandler:
6 o' H6 k" @! `; {2 c& `! Q+ Y2 f, u& T6 ^2 ^+ l
d704737d507746e59c7911cba14d6fe3.png
3 E2 d" G2 x) e3 d1 j
6 n! [8 d- D8 g4 ?3、在中断处理函数中自动生成了HAL_TIM_IRQHandler(&htim2)代码,该代码会自动根据中断事件回调相应的函数,这里我们需要处理更新中断的事件,回调函数默认是__weak定义的,所以在stm32l4xx_it.c中重新定义该回调函数,并且在该函数中添加功能的时候,因为该回调函数会被所有的定时器共用,所以需要先判断是哪个定时器在调用:4 x% S" \8 P3 h$ S* l& S
(1)在回调函数中添加LED1反转的控制函数。, o5 c2 z3 M4 \
9 r/ T% _- B0 b1 Y. T  K- Y6 r( i/ p' N

  1. ; u7 s5 N7 ]: c/ `
  2. /* USER CODE BEGIN 1 */+ G( E& j- q! s7 S" r
  3. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)
    4 H$ o' Z1 ]( K: @. a9 L# s0 f
  4. {$ Q' O1 {4 r$ Q2 b9 k3 v+ K6 v
  5.         if(tim_baseHandle->Instance == htim2.Instance)
    $ X6 b& e: _$ n" v. o. f
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);   //反转LED10 X+ X1 z7 E! G4 e! A6 F* y$ |
  7. }
    - j! u5 ?; k/ V7 }
  8. 4 ~1 _6 M( _3 e+ \
  9. /* USER CODE END 1 */
复制代码
5 N6 e; d4 x: Z5 y
(2)重新函数的位置如下:( G: k' u9 @4 `7 l
4 U# G! _1 n5 q- ]; s; c  S0 \
5274e54a690145329f7c490ef9c486a0.png
2 S# e8 S: x& P
6 F+ q7 N& g; l) p$ b1 v  h; S# E5 V
4、最后在MX_TIM2_Init()函数中开启TIM2并使能中断。, ^. v( N0 e. I+ S4 T+ x8 p2 g
  1.   /* USER CODE BEGIN TIM2_Init 2 */
    ( t7 c0 _, _; m! c, ~4 [1 M/ y+ ^
  2.                 HAL_TIM_Base_Start_IT(&htim2);            //开启TIM2中断
    8 V- K6 q& m$ \0 N
  3.   /* USER CODE END TIM2_Init 2 */
复制代码
- Q. |  z9 P1 s% p7 Z7 V
890dbf6203e54d8ba6259be34e4a135c.png ) o. Q8 h$ w7 R( h2 v

. r5 Y3 {; H# t5 |5、选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
$ }# }9 r) L; P7 U' t: Q% _
: _. P% A" Z7 J
d444af879a804dc1bc924096aa0ff97c.png ' I! L6 J; m' X9 e

$ C1 o% D* F+ f  N) e, N$ r) K 6、点击“build”(或快捷键F7)进行编译程序,可以看到编译成功的提示“0 errors,0 warnings”。
  `2 Z5 ]* Q% y: w: p  g& N( p7 d5 N
1e522f91c7ff4e528c21052688aa5825.png
  K6 B6 Q  G% j- n3 Y" t7 K% r
  y, \4 _  u  c  n( b7、点击Download(或者快捷键F8),即可下载程序。即可看到LED1每隔0.5s闪烁一次。
. ~  o( Z$ v9 O9 l% a: V# |, L% T  x5 a8 l, s
7b47f33669f749e698147ecffc06bf4b.png # W+ u6 n7 j+ B! L/ w- p

. S, ~$ Q3 E3 _$ w  C7 l  e. N, g1 n8、 如果下载程序后,没有看到LED1灯闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。$ D' D7 W$ m( T
* w! ], s; m. M7 M' H9 X$ r
7f75477f2ac24930b2e5d00ffe27f00e.png
+ S3 Z# E9 t: @5 T3 @4 y
& X8 Q9 J  ^' K) v! k) W! n& J9、至此,STM32L431RCT6通过通用定时TM2控制LED1灯闪烁即可完成了。& O# F3 y! k+ U  Q4 N  n* `& E
————————————————  n9 i/ J; L/ f/ J
版权声明:智能小屋ZYXC
" o- Y/ t( C, D; T! D
3 s0 ^; O2 ~$ v1 O) I$ k; ?( `8 i! k) b( ?, V4 ^; _  X' s& p
赞 收藏 评论0 发布时间:2023-1-15 00:07

举报

0个回答

所属标签

相似技术帖

官网相关资源

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