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

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

[复制链接]
STMCU小助手 发布时间:2023-1-13 19:00
   一、开发板平台简介:; V4 j) [% b( b' w$ o3 S2 S
1、开发板资源简介

4 b3 I5 i; t2 I(1)开发板主芯片型号:STM32L431RCT6
( }# {) [. N' e) K; u4 [. K: n: L1 x(2)开发板主芯片封装:LQFP-64_10x10x05P
$ s4 u. Q5 {: v$ w. \(3)开发板主芯片内核:ARM® Cortex®-M4
$ g( g. f1 ^9 f% j" h6 h5 e6 A/ V(4)开发板主芯片主频:80MHz
7 X& O7 T$ z. B& o3 o8 x(5)开发板主芯片Flash大小:256KB
- H) x( u4 Z9 o& o7 ^0 `! v(6)开发板主芯片RAM大小:64KB
# H4 c! {+ ~: w5 c6 h. |3 d, @, ^. y) w; J* e
bb91345227434ee7a43a34bf3fe366e6.png
- Q( I3 h& @  ]; p) y2 g1 S
0 s9 g! H# J2 B: E
929c0cce04aa4115a8623703982bf3e1.png
% {7 O: F# W/ m1 L1 L7 O
1 _5 X" W8 A, [2、LED灯资源4 b+ ]$ _# r1 B# |1 M& `
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:- {. n* N- S5 P/ k0 n# ^) T0 K" r+ i
, v. i9 k6 ~# p5 `5 d) F, z
0f177691c5814f16a508bcfa747f87ac.png
! p4 B$ i0 E) K2 `- P8 ^& q. A8 Q
0 B+ k, E1 [/ v! t, Z(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:
# R) a! F# {6 v$ o
: \' z( {$ ~6 D+ g4 l" ]8 ?, h- E
e923ad767b8448b7ac37c4ed693724bd.png ; u% y& p" U$ q2 b0 l5 F2 u
8 R! i% Z' ?& O/ E7 q3 x4 Y6 v( a
​3、TIMx定时器
$ [  F5 q- |1 |STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。+ ^" l9 `" I7 j4 X6 @$ P
( I- {, W- T* T8 J  _9 R
此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。/ c7 G, a% }5 e: b( A
+ D  n/ p8 I0 I: }

; G4 p& S3 M+ B$ y0 E% B3 c  二、Timer2定时器实验过程1 K. C/ r7 d1 C$ L- t
1、新建STM32CubeMX基础工程
+ l5 [2 z7 w) @  p
(1)打开STM32CubeMX,点击“File”-->"New Project"
6 }" m  U4 v8 p( q: n& |$ B
- ^, ]. q' G  J1 X3 x, G
2399170347904e959c855fefd5877f84.png . H* r8 S* A  ^, `# ?. w0 V& }

; S/ a- T. V: C- C2 a% W, ^) {(2)等待打开主芯片选项界面(大约1分钟时间)。5 [; L1 y1 A$ w4 Y1 z

- c% j6 _1 f7 b! [3 c9 n/ f
d74d2fdc60c9440483e2b7cf8d928e7f.png 6 s5 U6 ?2 d" F1 @( w
; N3 U+ j/ ^# s; G9 D1 e% W, ?
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。# b! D  l/ P$ S/ ?8 p
& p5 R$ [# n/ b1 i
7b80345238d74bea82ce70e1a348f7b4.png & ^$ V2 b3 O* n! g' r9 M
9 z, h1 L7 [* v# v2 Q
(4)选择时钟源。
, j/ U9 o1 K( R- s+ H(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
4 N+ _0 V* h$ E7 R" i+ X  J* k% W: A$ d) I
3f65707eca104663a3dede6d25dfa961.png . m, H2 o1 r1 _

) K1 \7 x# e: \1 ~( l

& M/ a) c( I4 ~  \# }6 e- L" l(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。8 p; H, \, f1 K8 k" t

/ i- G5 v: q, w5 K: M  @: D( y
72119b971f62410fa8344f7f9fb9f389.png
) m# j: m' p7 I! |% L- e( I& K- \
0 x9 j4 i( ?$ d2、配置GPIO控制LED* g4 R) `' I: x, \. k" e: C
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:( T1 U$ u% m# t# Q+ v2 o
LED1——PC0
/ J, |) I- S3 x  ^7 P( vLED2——PC17 C3 f% O" \8 i" i+ m
LED3——PC2
1 x$ I! M  M0 t" dLED4——PC3
+ J% W/ m# }4 E1 X. y! k

4 G/ i3 q; b1 c1 V: \3 `1 C7 t(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。$ g( g; y) P7 t0 A2 a
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
0 ]( O9 _' W: q  {7 k: W+ x' t鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
" ^( b6 P; x& y& }鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。) ]6 \$ r/ u0 F- J; d% P* ?+ Q
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。
/ [3 H% Q: r4 M3 v, r7 Y! T7 C# k+ L0 T. h% O% N- `' x" r
492907c1e71149819adbaee4516a2af4.png ! E, y) w; r, g% Y% m

. U2 @' y! C+ Z/ R* J- s
c75d3f10ba2e427d9c1a10fad9bf5471.png % y0 u. A& A' p5 x, m

8 H% v! u; C* H/ U8 s! B: [! {(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。8 K+ a6 t9 M5 v0 R9 K

. r8 D5 H  b! j. R6 j
38ff4b80e1c5495ba3076a5158fd91fa.png
: e( M7 u' D, P# @7 _4 x4 S& ~' M. ]2 C4 n. M! r+ o
​​3、配置定时器TIM2& a1 H# ?/ B' b: U% D  d
查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
# Q( h$ r, O- e" A" I: ]) v; ^" ]1 G(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。* o. }7 j# {, _$ E# n) w; C3 b
/ f9 g' {. U0 o. S) a
(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟' S! i3 W  L3 s! t6 Q% N
, p- W- U7 s. U1 E0 r) Q
6a0f2c39237b45b9adb61940c9805d3b.png ( ^6 }6 L' `/ t; Y# M. h  ?2 o) J

$ m; k; T- F' s; P$ q (3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):9 _. ^7 Z3 X$ [9 }( g* z# R
0 P# |4 \! h. t
4b2d341e8da446ecacc3030b2f962f4c.png 8 p$ l0 O# X" r/ y
1 S$ w' W$ R" I$ y4 {- Z, C
(4)开启TIM2中断即可。- {  a/ r# U9 M: N! V6 j% U+ E

1 p& H# p2 G  ~# g
8d40ecae57144183ba5f885b7c77ca1d.png
9 H; `& t" T% {, g
$ w; e) [8 H, Q2 ^& b4 D- s4、配置项目工程参数
9 R* {% ^# b* H3 e" L7 {. o6 o(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。, q, [' [$ e  z# O5 _
, \( @0 ~$ ?0 C
f3ecedd9323f4463b69539906b3c1199.png / R5 d% E+ P( ^
- i) i8 ]" H9 R6 x7 x' x
(2)完成配置工程。
  H) Z9 }8 @( ^备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)! y! c0 p1 N2 B; c1 ~- p

8 ~, I& M" y5 F* h9 F0 \
efdb616174f54925b6eac31109f227b5.png
, H1 f0 n. y! I& |​​
. [( [* u* ~& s' W 41c3f2716e4e4eda8f62fa3a1d871322.png
2 p% D0 Q" _. i( z
$ m  K! J0 v( S( N7 {' E( P! h1 q! V! u- W
(3)生成代码。
. \) `; G; E1 H$ ^+ O备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。3 o" Y' F# b) _

" }' X+ l7 q* h8 q0 L+ B6 M. ~
8eaa7d0babea40ee93f158481a6ee471.png
/ \& Q3 w6 a# h​​
" Z3 N0 t& d1 W. V- e* t(4)工程代码生成成功。
8 r6 A( L4 h" s1 I
8 I$ l1 x1 l* ~3 d% b- \
e8f46d59a1fb4af589feb613fdff17b4.png
" \) U; _% Z% e0 m4 U
6 _. C  h7 N# v# Z! C 三、在KEIL 5中编写代码
8 S* ^4 l. N$ `( m( Y1、使用KEIL 5(MDK)打开项目工程文件* F! s5 y6 n8 s; z& x
源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。8 _5 C7 z2 P" F8 ^6 [' S
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。+ a) q1 w5 c. D0 N0 S1 N5 y
% J9 R5 ?4 k3 k1 v- Y
357eeafd21f24dfc9c3f2009bb9e5464.png
4 O' U# m! d( c4 V* o3 E: @% S% J
2、添加Tim2验证程序/ U1 P/ x* d  O/ M7 R
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。) [! ]1 E- _2 D' ?3 {- l0 h1 G
9 H: O/ {8 \9 J/ N* s2 _( d+ V
备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。0 u1 t$ e6 v0 H! h6 b

8 D" A5 |& ?3 w
c4fc03b80f9647648e69fd122742eeb5.png
. |* d( U( x5 g, `8 b  h9 M7 x8 a/ C* a5 K
(2)在stm32l4xx_it.c 文件中添加每隔500ms反转LED1、LED2、LED3、LED4,如下所示:
# J' s0 M' ^1 Q( V3 y, w7 T% F! ~  M$ |, t" b
e8f15097960d49e0801a7892f819656c.png
. z# n9 k0 S6 q0 e3 s( H& C, F9 N) t# j+ j& U
  1. /* USER CODE BEGIN 1 */
    1 V  T* F( ~: w% y# w; l& w
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)
    : L; {9 u8 T4 F9 Y% m8 y: n
  3. {
    " n. G9 ~( v9 L  M$ x
  4.     if(tim_baseHandle->Instance == htim2.Instance)6 ?' S1 @1 {0 Q% g1 x# K" ?
  5.     {8 C& E6 V. u3 v* d: J/ ]; f, q
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);                              //每隔500ms反转LED/ l' P6 s- p+ z0 l0 j
  7.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);
    ( J  P! A2 x! S- c8 H# K$ D
  8.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);7 l3 ^3 w: T/ N6 K: I' [) N
  9.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_3);
    2 Q/ ]/ ]5 @( e, d# M1 G
  10.     }
    # M9 P+ j! C; ^7 v

  11. , l2 u  {" c9 V/ w
  12. }$ `6 a1 c( I" @/ c

  13. ; _1 G2 y! ~' P
  14. /* USER CODE END 1 */
复制代码

" y% ~: T( n* u; ]& ]3、设置编程仿真下载模式
6 d7 ~6 B* h- o2 I" `(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
0 x9 M$ J( h2 X6 \6 Y  D7 _% @6 I/ Q/ y8 b' |' h
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
1 d% N) J" N; C3 n​​
, ~! n9 S. |, z(2)点击编译,完成后提示“0 error(s),0 warning(s)”。  G/ f' w: a* C, h, X: j
& }3 Q6 k4 ^' r# U9 @$ ^3 A0 n. \
e0b7e3e353b345a7987fe5f821de2dda.png
1 l6 Z3 I" S1 p7 \​​
5 s* T7 \1 h1 F/ U(3)点击Download(或者快捷键F8),即可下载程序。* w1 Y- S" W1 {  p9 Z
2 v; t# T, Q, B1 K/ p) @
eb3f250f19e44862a7df80c2492fcd01.png
0 D4 y% h" h9 F8 S​​  i  d/ p2 F9 f8 g- s
(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
& Z7 g; I3 R, k7 m3 m4 m3 }( }+ i6 Y% ]* I) {7 o
9f8aa1a4e8f04041bcf5cb183facd100.png - \( j! n6 b. o; z" \% Y4 t* X- x
: l) W) M$ y$ x5 L

) p( t5 B" g8 @# m( {5 N4、Tim2实验效果展示
. ?" D6 k7 @* p        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次。- ^3 j6 ~1 t6 B1 f1 R
————————————————
0 A8 W' i$ ^9 m2 k) g版权声明:智能小屋ZYXC, q/ G7 N. I0 N4 t/ ~1 m
5 b. w; k7 A6 J5 ]2 j3 [

) C' g5 h# G, D
收藏 评论0 发布时间:2023-1-13 19:00

举报

0个回答

所属标签

相似分享

官网相关资源

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