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

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

[复制链接]
STMCU小助手 发布时间:2023-1-13 19:00
   一、开发板平台简介:: p% k: h) l) i7 J4 Y; o. y
1、开发板资源简介

, w7 I/ ^& H, f4 w5 N+ }(1)开发板主芯片型号:STM32L431RCT61 [$ P8 F& I7 [( O
(2)开发板主芯片封装:LQFP-64_10x10x05P
: R- v9 V6 a; q0 d(3)开发板主芯片内核:ARM® Cortex®-M4, k5 a8 [$ M% J- s/ {0 ~  Y
(4)开发板主芯片主频:80MHz
# @2 q, E# q& \$ _(5)开发板主芯片Flash大小:256KB
1 p; A  _' m( f* W) O) B  r  s(6)开发板主芯片RAM大小:64KB" q# {5 ?. C3 Q5 u/ V
$ V! m! z, q. Y
bb91345227434ee7a43a34bf3fe366e6.png
1 s7 t" q( v" ~1 I% q5 m( H; y$ V5 y, l  h$ v) y5 g, F+ @. o
929c0cce04aa4115a8623703982bf3e1.png
7 L4 V0 Z4 a0 A* Z4 l; `- n/ y/ m' w/ V6 r+ k' [
2、LED灯资源; N& `. }$ @5 P4 y
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:
* n" \! e% c3 Z3 D% @* |9 n2 `. F4 z: K. ?
0f177691c5814f16a508bcfa747f87ac.png 4 D6 n: v9 E& s1 b* u$ Z+ ]: `" S: Y
; K' l9 D0 ]/ B1 \$ J. I
(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:
  Z- D; z% C6 R4 w* B
* i% G3 r$ s& Z- B
e923ad767b8448b7ac37c4ed693724bd.png
+ Q4 Z' P0 N$ `

) F* V# F& _9 t9 w$ V' f9 N' a2 k​3、TIMx定时器
2 D8 Z" ~: D) b. ?STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。
- t) F1 {! c: M# t4 z8 _& @+ n2 o% R) m
此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。1 u3 `7 y$ N- {- [8 P/ m& r
* a! Z6 h0 k6 S, n; d
( d% ]9 x  n3 l8 H
  二、Timer2定时器实验过程* V9 v* A, [/ h$ c% f9 n
1、新建STM32CubeMX基础工程
/ L  o: a+ U( `# j# G3 f
(1)打开STM32CubeMX,点击“File”-->"New Project"% N7 p$ |+ y6 b6 P8 e# ^

, r* U: X+ E0 {+ D9 V
2399170347904e959c855fefd5877f84.png 4 ?5 l. _& B8 i2 L, b
# e) @# _* T2 Y3 D6 ^
(2)等待打开主芯片选项界面(大约1分钟时间)。6 R  m* u' [3 e' g9 y$ t
+ o0 {" F  N) K8 F) X# r
d74d2fdc60c9440483e2b7cf8d928e7f.png 1 T2 q+ n8 F0 g  o# ?" o

: Q+ S& g- X4 Z& |+ K# o(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。/ V: X" p& m" _
6 m6 ]: W1 [! t6 c2 {" b, e
7b80345238d74bea82ce70e1a348f7b4.png
. G( G( m: w8 h; V, B7 E
* s4 M- m8 y- X5 {) c(4)选择时钟源。
' W' S3 m0 j& y1 U8 a(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
  \! D: |- m9 W& t7 E$ @+ a
' ]) u& t& a  }! Y
3f65707eca104663a3dede6d25dfa961.png 0 Y) ~: |3 A: R7 {2 d

1 j. s8 _0 y1 ~- v) f' u) [

' N* X4 w% H, B! G9 x(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。
- o, H" A* ]2 ^) a7 Y& O' g) j3 t0 z6 O  s
72119b971f62410fa8344f7f9fb9f389.png
4 E" G. q6 X" k) c
% s5 z. X6 t$ k! m7 x& X2、配置GPIO控制LED
( E7 ?) b6 w# a# D(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:
- S2 ^& v# Q/ Z+ U% Q6 w  s5 O6 ALED1——PC0) ?2 j: W4 g/ e7 ^% k
LED2——PC1
8 l- `- \; B& i! L2 C& fLED3——PC2( {1 Y- _- s# e4 c  A: [
LED4——PC3* w5 M; Y* w; M

# m! m+ E& J/ g6 d/ S" A( k2 q8 J+ }(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。; Q2 a4 ]$ s; t+ `! P3 d2 M4 K. `
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。; g( |& W9 n+ j8 i# C0 H
鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
% ?% m! M" i" w6 \鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。5 S( y4 X! v! m9 j1 f7 V6 s
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。0 L) Q! ^+ o: o' `
) I% a2 U1 h, }: c: c0 B) b; }
492907c1e71149819adbaee4516a2af4.png
* y* z! C; K. n; \3 e& F3 Y0 t7 _: S  G, k  W$ E! O
c75d3f10ba2e427d9c1a10fad9bf5471.png
0 V# y) H( x+ m4 g& W  i- C7 N* P4 P, X
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
8 x/ e# W3 g% o3 }* t7 \! w4 @  K  q/ A2 ^0 O
38ff4b80e1c5495ba3076a5158fd91fa.png
8 y- U; O9 y0 ?! b0 z1 v2 \* V: I$ z8 S# `  B$ B
​​3、配置定时器TIM2
( k/ W) q0 F1 l- L5 ]8 p+ H查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
2 A* H' e# d$ `6 N; k: Q; _(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。( w1 P: r1 P9 F5 g0 o
+ ~2 Z# I1 E1 v
(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟9 n1 ]) S& s- P' y+ g' C! v! G/ e7 @$ ]

: e# A8 j! u# p& a. s3 H; C
6a0f2c39237b45b9adb61940c9805d3b.png 3 }! k6 E: B: e# h  S- ~' ~% A' Z2 w

6 I9 z  E4 r0 b% P; ]& d (3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):' ~& d7 y& Q* f/ d/ S

  y# l8 F; i  }2 I7 T( X
4b2d341e8da446ecacc3030b2f962f4c.png * }$ E. I+ _" B9 h
" t) _  v! X$ l, I
(4)开启TIM2中断即可。2 Z- I4 e, @7 w6 l

% {6 i% ]) l3 `2 b% t
8d40ecae57144183ba5f885b7c77ca1d.png 8 v4 `. }6 y$ |0 S* o7 [9 \/ W
5 Y/ T; n. B' b' Z" k
4、配置项目工程参数
' r! T- w6 l4 \( E& L0 ]. k: @, p(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。' `. h& P  Y' X4 \5 S
- r1 s( S" l, D4 k& S
f3ecedd9323f4463b69539906b3c1199.png * X5 i0 p; h/ u$ c" T+ W5 @* z; @

- C* `; r( K: C# V2 \; p' Q9 }(2)完成配置工程。
& u0 ]0 ]( |0 c+ [4 K( |* u$ b备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)
* k1 T! ]& d; V0 s' s: P
7 }1 x0 e) w' V. g& i' S/ u6 V
efdb616174f54925b6eac31109f227b5.png . Z2 z9 L4 A! V# X5 b
​​
  F+ ~) m+ o# M8 @5 r0 O" p8 } 41c3f2716e4e4eda8f62fa3a1d871322.png
$ |: f* B* [! n" Z0 s/ V- y

* T- Y, w/ P7 D(3)生成代码。
$ @1 X. @+ N9 j3 Q# V% ?备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
( y! n3 \- j8 N8 N; }! `! @: Q  j5 W- R
8eaa7d0babea40ee93f158481a6ee471.png
  ?8 e' [- |0 \5 [​​6 G) j/ O- {; p8 P( Y
(4)工程代码生成成功。
) g( U, w8 ~1 {1 r
8 h: A+ }9 T; x" [) j
e8f46d59a1fb4af589feb613fdff17b4.png
( ?! d( F" O" E1 h) S& T* ~' P, F. O( y6 l) c7 q& e
三、在KEIL 5中编写代码* b1 x( m4 k8 g# b0 X
1、使用KEIL 5(MDK)打开项目工程文件  ]# I2 y. M2 e0 T/ z) P3 X4 B; H. C
源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。
/ D. U( Y' t/ [/ m( [(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。2 Z: d/ z; e) G1 k1 `! s# |

: x! W+ D0 F6 p: w0 {2 F! }
357eeafd21f24dfc9c3f2009bb9e5464.png
2 i6 W5 ^) \  j) o  y; ?$ b" e* z' g6 C# `- @
2、添加Tim2验证程序- G1 @" y. g3 Z8 ]( t, z1 A- H
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。
+ P! j. y7 {5 q

/ |. w) R# b4 }/ P7 ^% k& `备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。* J; S" Z; \, }8 P# Z* r1 R& V

3 I$ _# P, O) S4 T. L6 a2 N
c4fc03b80f9647648e69fd122742eeb5.png 3 E8 a+ f7 h, g0 `
8 d9 H7 d/ @- r' Y! A
(2)在stm32l4xx_it.c 文件中添加每隔500ms反转LED1、LED2、LED3、LED4,如下所示:
% w# {" I/ Q, l- i0 d9 \# ^# Y$ s% w3 g! F2 u$ P9 u
e8f15097960d49e0801a7892f819656c.png . T( w! p9 h; v. R( w
) j% \9 Y2 J2 u: r
  1. /* USER CODE BEGIN 1 */1 {( H7 R$ T+ Q" S2 }9 k
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)
    5 O5 U5 y4 N& _$ `* H
  3. {0 J7 z! A+ q0 k5 n
  4.     if(tim_baseHandle->Instance == htim2.Instance)% [8 I5 t+ P$ y+ i/ ]$ x; I& Q
  5.     {
    . E1 Z3 ^* m% H4 m( M$ d0 I
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);                              //每隔500ms反转LED
    4 N* S9 @( s9 X: V2 f3 k
  7.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);
    , l, l6 r" g+ s! [
  8.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
    9 b! _7 n6 o1 ^( C6 `: q; _
  9.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_3);; M! ~4 U! A% y8 O" r
  10.     }1 a# G) ]$ B7 A9 p: r+ a( \3 p) I

  11. , v7 s  U% n  |* L
  12. }
    - p$ |- J% L  f' G9 Y

  13. ) I! s. `9 c8 Y" x& a9 ^  {8 r
  14. /* USER CODE END 1 */
复制代码

7 v( L( r/ _% G% h" e4 Y5 P3、设置编程仿真下载模式
& e% d' G5 B0 Z: W+ z2 c9 K(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。' y& }; `% S7 w* D0 j" U: w7 J

4 ~4 x  j0 a( r+ g  _
edefb6b9a2a14be3b1221ad6d5c7a8a2.png , P( _4 C* E% C7 [
​​
5 D: \$ l( q  u(2)点击编译,完成后提示“0 error(s),0 warning(s)”。3 b9 y5 Y8 U3 P
0 `% N2 g+ @& \$ q3 Z& \
e0b7e3e353b345a7987fe5f821de2dda.png
9 @$ h$ y2 L9 @​​: W9 b5 }7 R3 A; ?' i+ i; A
(3)点击Download(或者快捷键F8),即可下载程序。; j# D& j3 W! }& u7 h+ c+ |

( F- I" U1 ^( k- Y
eb3f250f19e44862a7df80c2492fcd01.png 4 e. C" p0 O8 K$ {7 q
​​
3 P2 C; S9 c3 O! M, I; C& L(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
- w! {$ b8 \  G  M+ o2 i# b7 k# T9 k7 u
9f8aa1a4e8f04041bcf5cb183facd100.png
! P4 d$ b1 Y; g; u& \, D ​3 d4 w7 q3 b, }
! p$ ~. c4 m; j- s9 k+ b" I& \- R
4、Tim2实验效果展示
$ t# K% b: F) b$ d" l        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次。
* B, u: A- \* [————————————————
. k$ z6 {& O. k7 R! \% t% z版权声明:智能小屋ZYXC
: o. A$ v! i" V' x1 h5 Y7 q) b. E
/ @, x& I9 {: I/ ^4 Q7 u$ k, U+ F* v* n( u
赞 收藏 评论0 发布时间:2023-1-13 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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