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

【实测教程】STM32L431之定时器timer2实验

[复制链接]
STMCU小助手 发布时间:2023-1-13 19:00
   一、开发板平台简介:
/ L; s' T% p3 ^: L+ P+ u1、开发板资源简介

  ?" a6 @8 Q5 `9 W' }9 _5 a6 d(1)开发板主芯片型号:STM32L431RCT6
& a0 G/ ?) J0 b+ g$ b$ O(2)开发板主芯片封装:LQFP-64_10x10x05P
. c# l$ W& R* {$ R" u/ {2 ]9 v(3)开发板主芯片内核:ARM® Cortex®-M4: r. Q2 ~+ |* C
(4)开发板主芯片主频:80MHz, Z$ _% a' E1 K* D9 I- z- F
(5)开发板主芯片Flash大小:256KB
6 i0 j" w" b9 G# @, s! d(6)开发板主芯片RAM大小:64KB& m/ }1 Q6 d1 X( B. r

* {2 n: [$ _% ^- m
bb91345227434ee7a43a34bf3fe366e6.png 0 W) M; G4 o$ {/ J# n9 R

! q! B+ V: z& I9 X
929c0cce04aa4115a8623703982bf3e1.png
$ M/ [. y6 {) |% ]2 v3 L7 m) S1 v5 A% l& c
2、LED灯资源6 f. ~0 F! n$ R. M/ P6 u
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:
# W5 L; n; A; f; V6 t$ B' u3 l' G. f9 K
0f177691c5814f16a508bcfa747f87ac.png
# I: T0 F0 `, W4 {6 Z) @0 r# q0 B4 n6 h5 v, a
(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:1 Z  t/ I+ r3 ?
# n" R+ K" j4 N! S' w) v
e923ad767b8448b7ac37c4ed693724bd.png
5 P, x" A4 Y- _+ Y; [% ?# m- B+ Z) ?
2 b& G4 L# Z$ V9 r
​3、TIMx定时器5 J3 [9 a% j, n* Z
STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。0 h! ?/ Y: c, D

) @; r" [: ^9 N- m此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。
4 q4 K! I' a  |7 r# e. L8 s5 `2 b8 T! j: u

# e" c8 V4 M7 w) s0 P  二、Timer2定时器实验过程
  N% }& f# v) b! z  n* u) a) y$ F- }1、新建STM32CubeMX基础工程

  _! M1 `; v7 W# |. U4 ](1)打开STM32CubeMX,点击“File”-->"New Project"2 e0 K) H" W. }9 b; m

# a& q6 R/ H+ z% ]
2399170347904e959c855fefd5877f84.png
( U4 d8 \* y, V1 ?
# B1 [# \" q, [; G9 H3 u, Z* P
(2)等待打开主芯片选项界面(大约1分钟时间)。3 @9 t  ?5 C1 f* [+ T9 u
" F* i7 B7 ]* I
d74d2fdc60c9440483e2b7cf8d928e7f.png . A6 d% ]9 k8 B- u2 Y, z8 s; H

6 C1 W# r+ l) |6 ~2 F7 }(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
- P0 C/ G8 ]* _- Z: G9 _+ `, t
. j3 U% p6 X; l, h) @
7b80345238d74bea82ce70e1a348f7b4.png 8 a* P1 s+ ~! `( o

- Y& v6 O/ m& N8 u3 K4 ~(4)选择时钟源。
3 {- z$ h0 e+ D& |' d) ~( W, m) I(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
: @- ?0 V# G. X6 z5 n3 G7 K  P: T* ^& Q) |( U% @2 ^1 @
3f65707eca104663a3dede6d25dfa961.png
. N8 F$ m5 ^  G
5 K7 Z, Q! g: u! R7 f
: U) _( |0 V! \: Y& m& ?
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。7 U/ Y: C+ W" F) ?

) ^( x- Q$ K: ^' w: W7 k, e  x# Q0 r$ q
72119b971f62410fa8344f7f9fb9f389.png
3 J+ E' f& i1 n" P* y' O) Y- w2 e/ n: k
2、配置GPIO控制LED6 N( Y) s8 w; i4 i7 w' c
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:% v* z; V7 j2 L- g, |2 R
LED1——PC0
4 ~; j* w) A; n6 lLED2——PC18 B, s4 O5 [! c% ]
LED3——PC2" K5 ]$ w( f' K( J1 b% n6 k% s
LED4——PC3( O6 V. \( D: }* |& K
0 r" m: b& N' V9 f% T, _
(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。
: C1 j$ ~8 _: B8 a% s4 F) p! ~鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
8 f' Z3 u: L) x, M鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
% t/ a: _! M' D& |- Y$ F鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。6 _: r  k' C8 M( g/ h2 d; e4 ^' y
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。) V2 x, H4 x- h
4 f5 i+ c% |9 {% L
492907c1e71149819adbaee4516a2af4.png % A9 H: m9 n& z6 u* p
, E. `/ D7 U1 ?/ `! V7 N
c75d3f10ba2e427d9c1a10fad9bf5471.png
- q4 P2 F2 C4 M$ o8 h) e# S5 [! Q2 p5 a6 K7 y' N; S$ p3 C
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
/ q" c" r  k  e$ C4 ^# U5 E! M' i/ z; k* K/ |
38ff4b80e1c5495ba3076a5158fd91fa.png
8 e- Z: `4 w) ^" m/ Q. g& _; V7 U+ h# w0 d7 ~
​​3、配置定时器TIM2; w. Y! z$ i% @2 W- {6 [
查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
$ \' {5 ^* K# W(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。
2 S1 q5 [9 l$ a; x! |) n
& N/ N% |+ \+ G, U6 P(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟  B3 j8 |7 W2 ^& r/ v6 Y& f
* k: x4 R) [; _$ }1 n7 k
6a0f2c39237b45b9adb61940c9805d3b.png
' y0 ~6 Z9 ]! g6 ~: Q8 k/ E4 _$ J# L  s4 g% w, o% u
(3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):
9 |$ f( x* E2 _  {' p! o- O; t1 r- F$ c
4b2d341e8da446ecacc3030b2f962f4c.png : }+ G& {1 W$ i8 a& M5 W1 z& S
& J8 h; {6 n: O$ s2 J8 V
(4)开启TIM2中断即可。
9 U5 h. f! T$ `6 R8 L: C% ^4 B9 k. f! A2 ?4 G3 K
8d40ecae57144183ba5f885b7c77ca1d.png ' X3 h2 t+ @; V. ^* q
* _) _) M( y  a
4、配置项目工程参数( e0 ^9 k- V+ t' L: K. r
(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。3 j& S! C$ S6 o& F
+ A, F* I2 \6 ?1 A1 b
f3ecedd9323f4463b69539906b3c1199.png ' g- U8 Y" s7 B  U1 j0 u' t5 N- q7 g& k
! p9 s/ @0 `- a
(2)完成配置工程。! q. B7 N  k9 W$ ?
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)
$ a5 L; [& C# r1 K6 I
' P& _: V# v+ P; q: K1 I
efdb616174f54925b6eac31109f227b5.png # p% Z: L6 N. d/ t0 P+ R
​​
; ]5 j- F$ q  ]; U6 p' q 41c3f2716e4e4eda8f62fa3a1d871322.png $ P- T$ a. W3 a# y$ \1 c( ~4 _% y
% O4 k4 R9 M' [# i
(3)生成代码。7 |$ \% ^' n$ S+ z  F
备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。. ]6 f/ L1 d& t. _( S$ d- t
4 ?# u/ j/ c7 r7 a0 A
8eaa7d0babea40ee93f158481a6ee471.png
" g: x! {( {" ?; x8 Y" w0 A​​
1 D' i0 x% I& x; o(4)工程代码生成成功。
3 m8 M+ w+ v3 _, D3 t0 O5 g% b( w# N* J; I% T1 t
e8f46d59a1fb4af589feb613fdff17b4.png
2 W7 Z( R3 n$ z$ {
- \5 \) R0 f# }1 _$ C3 Y) ] 三、在KEIL 5中编写代码! ?; v7 Q' g- w8 P0 D* h
1、使用KEIL 5(MDK)打开项目工程文件
, O1 E# ]+ B+ ~源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。7 O  f3 h  e5 l" X" v5 h; {9 u
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。  R- P+ B' y% r+ d9 N" c
' N+ }4 H) e$ @+ L5 f
357eeafd21f24dfc9c3f2009bb9e5464.png 5 Y7 V2 p( ]; G6 e* u
9 P6 k) K; w/ Y% B
2、添加Tim2验证程序
* I* H& s* y1 C(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。9 g) T8 M( n2 {/ I
# F" p6 e4 o$ d; D
备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。7 i2 v: c3 i& P/ J2 M* h4 x6 {

+ T3 e0 m' e1 ]$ p
c4fc03b80f9647648e69fd122742eeb5.png
. b8 A9 z: O( L1 P( [8 ~: b
# w4 v( s. X1 {# \: M7 d(2)在stm32l4xx_it.c 文件中添加每隔500ms反转LED1、LED2、LED3、LED4,如下所示:) s+ ]! y& Z6 u0 }4 I; k

, ]* {/ N7 b( I5 v# E* e: e
e8f15097960d49e0801a7892f819656c.png
" Y) \2 w# q' B3 q5 ^  v/ _8 |# |
) z" ?( H: j# ^7 _( N
  1. /* USER CODE BEGIN 1 */
    : \" ~4 ^* \0 s+ R
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle); A  {0 r/ W  T! [2 ~, i
  3. {6 v" ~1 v+ Q: V
  4.     if(tim_baseHandle->Instance == htim2.Instance), X$ A+ J& Z. E3 O& K
  5.     {& L- Q, f# X4 H7 I, v
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);                              //每隔500ms反转LED
      k( k( N' `/ [! n, R; c
  7.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);' K- ]) J) v8 {1 E7 `' v2 C
  8.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
    1 i: C0 B" _) H
  9.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_3);
    ) V  N  F) x& S1 I" Y9 P  Y
  10.     }
    4 h# ~) d' x* u3 `$ T

  11. 9 [( ]/ b7 n: T0 E
  12. }
    4 L8 s9 k1 h0 t- m; h2 k
  13. * O1 ]2 Q" n# h" ?% V. q2 g$ S
  14. /* USER CODE END 1 */
复制代码

$ |) j7 `( s6 W) {# ~3、设置编程仿真下载模式, @/ G/ Y9 _4 i$ O
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。- b% k. g6 O3 K7 o6 ^
1 z7 w  @/ P8 d8 i: m
edefb6b9a2a14be3b1221ad6d5c7a8a2.png 9 \, T; O) I: n1 P7 u- H# `
​​/ {* W: `9 i: N+ x7 w
(2)点击编译,完成后提示“0 error(s),0 warning(s)”。
* B; R$ U- K6 I1 D, ]0 x- T. }' V9 e1 F0 }
e0b7e3e353b345a7987fe5f821de2dda.png 8 ?. Z, K3 f8 W  r
​​
2 V6 J1 `- J, f7 p% z(3)点击Download(或者快捷键F8),即可下载程序。. `8 p: S. \! W# U* L9 K4 a

# ?/ y2 L. @8 b6 a& J( P9 U
eb3f250f19e44862a7df80c2492fcd01.png
% w) M+ n* T# q. i: p+ T, o​​2 v6 d8 a6 Q" d: y
(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。- ~4 g1 y3 a: Y2 v/ V, r

+ b  L! f, T0 r+ t5 a* _' L
9f8aa1a4e8f04041bcf5cb183facd100.png
% Y# z/ M; W! `
1 F6 ?- b. r. G, C% }

5 X, ^# E+ @1 P4 C( D: U4、Tim2实验效果展示
& C7 r' U. `" z; {/ x8 E6 D; ^        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次。( G- @2 Z0 {& g  B4 H
————————————————  \/ v8 n& m1 _$ _% p" a
版权声明:智能小屋ZYXC
; k) \0 f  D# m' m( X
! P- G6 R# ~/ E
# p+ D- u/ C) B7 I- u4 F7 v' i( j
收藏 评论0 发布时间:2023-1-13 19:00

举报

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