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

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

[复制链接]
STMCU小助手 发布时间:2023-1-13 19:00
   一、开发板平台简介:; o  d& H) h* @
1、开发板资源简介

! t- R4 [, w/ t2 w$ Q(1)开发板主芯片型号:STM32L431RCT6, Y9 Z: s* q! N0 |
(2)开发板主芯片封装:LQFP-64_10x10x05P
: o% ~# T. O+ r& j9 M(3)开发板主芯片内核:ARM® Cortex®-M46 A+ w' O7 P" g& [3 C
(4)开发板主芯片主频:80MHz! z/ I2 c9 R, N2 T3 ]8 m, @
(5)开发板主芯片Flash大小:256KB
! q5 x2 m; a  [/ t( Q" p. J) p) ](6)开发板主芯片RAM大小:64KB
" }  a* H. ~0 z* W5 @. A5 G7 T# i! H
: r9 @  g- W3 X6 L! [- R
bb91345227434ee7a43a34bf3fe366e6.png
) G. h' l7 [' n8 w4 N4 P
# a$ L6 s; |- e+ S/ b+ a( i
929c0cce04aa4115a8623703982bf3e1.png + g# q( V$ k4 j" j
- `; O  x0 \+ ~/ X; g# P4 ~: T
2、LED灯资源$ ?4 i# d2 O/ v* m6 }' ^1 d  b
(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:, S9 U0 d& d' K0 e* o7 `

! E7 E2 ?! O0 H# E
0f177691c5814f16a508bcfa747f87ac.png
# z# r2 E: K3 S* o
  {/ M0 N/ _& s0 P% Q3 U6 p) u+ {0 N1 g(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:
6 _/ y4 A8 y/ n8 Z
8 E7 B# T% Z: ^' b' G
e923ad767b8448b7ac37c4ed693724bd.png ) z& k& a/ p+ Q. f  S7 T0 K  T+ B

9 d6 |+ }5 b+ S( R7 `, V1 d5 v* {​3、TIMx定时器
, K  G6 j! P# ~% wSTM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。
# d5 q6 P8 ~9 ]( X
/ w' {: o% {6 c" P此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟。' i# t  Q( p. m
9 o, Z) K( n0 m- s0 d( t" ~
3 n" a( O/ Z/ Q' C; M4 y
  二、Timer2定时器实验过程
+ x3 \2 t0 G' }1、新建STM32CubeMX基础工程
& \0 w- z5 F& w# B3 s6 Z! Q9 h
(1)打开STM32CubeMX,点击“File”-->"New Project"
' B" S0 a+ q+ s: ~* J1 H+ f: S
/ J3 c( X1 q7 G
2399170347904e959c855fefd5877f84.png & U: k6 D& l. X8 S- Z' J

; H% v  A0 r2 _+ a% e. k$ `(2)等待打开主芯片选项界面(大约1分钟时间)。) K/ T# N+ O+ w& Y

! ]4 g! H7 K) i6 G& R
d74d2fdc60c9440483e2b7cf8d928e7f.png
5 K2 G# N+ T: A) q/ O
7 I& q1 [' R- }5 x(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。' v5 n7 I8 `; X" l$ Z
0 r7 \- C  y# v  F5 k
7b80345238d74bea82ce70e1a348f7b4.png
! Z# s8 C# _: c, H* t' Q! I. E$ G2 w: O6 {6 F
(4)选择时钟源。
8 R8 M+ ~& E1 g1 @+ j: z2 i(1)因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。
1 }5 b! b, \2 L  w3 h
3 p, z) g" R6 \8 d5 q9 m, t
3f65707eca104663a3dede6d25dfa961.png
" v; Y& @; \5 Y" F8 W% V& W/ g  @8 w; G8 Z
% g% D* J2 E" m
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。
. \( ^& `8 T! I; v1 [* [+ d& p# G( J9 M! X
8 ?5 F, i+ ~- \* H: W
72119b971f62410fa8344f7f9fb9f389.png
! I+ N7 K9 z6 ^: D! s; N
4 U; X4 J8 V/ Y1 ?2、配置GPIO控制LED# i1 P: Z# S, ?* |4 R4 F& J7 @
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:& {. U9 Q% Y3 z, i2 X& `# h
LED1——PC0' z0 `) G" P6 {6 k! }  i3 c+ w0 U/ U: `
LED2——PC1) r) y& q: M8 ~" H2 B8 }
LED3——PC23 w2 Q8 j; W" B8 D
LED4——PC3% E+ t8 o$ m$ U3 |2 R7 f
* N: v4 N- Y4 O" p
(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。
; p  p5 E' l- q, L鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
  y0 k- j% j/ l: ]/ B. h$ ~鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。# W4 g* E- y" b1 `
鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。  d# L! F( Z  M- j/ f
鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。8 M; `4 Q5 b* e0 J
# V3 P# O; j, y4 l* ]
492907c1e71149819adbaee4516a2af4.png 4 v5 g! h, c) w! G0 U
7 @& j' {0 ]% S. v- T
c75d3f10ba2e427d9c1a10fad9bf5471.png
  O4 s! D: h# T0 k( D$ {
0 y! P2 ~- |9 g) K4 _" {! V(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
& E! v4 |6 X9 [6 W5 J. r' ?7 G
% Y7 d/ d0 I2 F" W
38ff4b80e1c5495ba3076a5158fd91fa.png
  l1 ]! a' b0 Z& a$ L: }
' R! @" l& m, X, s/ _4 T/ j( Q, M! M​​3、配置定时器TIM2
$ w! }$ R+ Q# J8 m查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:6 c. p" i7 U* D/ H, R/ {
(1)STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。
9 ]% N! i+ |. k/ q
1 m0 p* s4 @; V0 m5 s(2)此处只使用了TIM2的定时计数的功能,首先选择TIM2,并且时钟源设置为内部时钟
3 [- P5 X$ ~( h
/ P# X9 f9 v  e  ~. |% P5 L6 H
6a0f2c39237b45b9adb61940c9805d3b.png
$ r1 I! ?0 Y+ x& D, s$ X1 `- A( I- O7 H, N$ o  L; D" X" a" ]
(3)接下来是对TIM2的参数设置,参照数据手册中的RCC时钟树,TIM2内部时钟来源是PCLK1 = 80Mhz,我们的目的是每秒钟产生2次中断,所以预分频系数设置为40000-1,自动重载值为1000-1,得到的计时器更新中断频率即为80000000/40000/1000=2Hz(2Hz即0.5s):1 O+ H% \; H' d& O- g

; k9 M; L$ j8 u
4b2d341e8da446ecacc3030b2f962f4c.png
9 K$ v  o2 |/ ^$ b, a3 ~0 t& f
5 `8 U$ T1 l  y9 y5 \" o(4)开启TIM2中断即可。
4 z2 E. L- K& q) A" T8 L- f3 s; W9 [% ]  A' j+ a' N, I, E
8d40ecae57144183ba5f885b7c77ca1d.png
) ^- t0 s" ?" z& A4 S  z0 A1 p% r) S$ j9 ^* b; Y
4、配置项目工程参数8 z6 b0 N' b3 s6 d& K/ R
(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。( X: r% v8 g) ~/ N  s! i* S

- W# g2 n7 F3 V" L4 F  T9 G2 S
f3ecedd9323f4463b69539906b3c1199.png ' N7 H8 g0 v# c- T  I3 t$ X
0 l  [. j3 n- j. C
(2)完成配置工程。  `" V6 ?1 v* A5 J
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)
  T! i: b& y8 m; p
0 T- Q. G0 @$ v- O" f0 c# @
efdb616174f54925b6eac31109f227b5.png
: U# v0 l$ {: w7 J5 C2 M​​! U+ ]5 N& M, y- x( C7 C
41c3f2716e4e4eda8f62fa3a1d871322.png ! b$ k: l3 Y; C0 |2 E* W
; O1 j2 |) S# \& g. k) z
(3)生成代码。
! d6 Y# O( p. c, `备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
! W8 S( k5 l/ |5 z4 j$ Q7 `4 Q: E$ C
8eaa7d0babea40ee93f158481a6ee471.png
4 Y" Z( P: k1 w% m- v​​. k) |$ x  d& E& s9 D
(4)工程代码生成成功。4 p% X( {& \7 {' y- h
4 |# ~) B8 e9 o" v3 G! f2 t
e8f46d59a1fb4af589feb613fdff17b4.png 1 x3 `) V* `: {& W6 s

4 R" a6 z0 H* X 三、在KEIL 5中编写代码
  W9 o& t+ F) b, ^( f1、使用KEIL 5(MDK)打开项目工程文件
7 m7 L+ Y5 G9 T, I源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。
, H: J  s$ S# `6 [8 W5 Z' Q(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。- _; A# ^& |; B+ u# w. d& ]6 w) X
  ^2 t( \  w+ k+ O
357eeafd21f24dfc9c3f2009bb9e5464.png
9 Z: @* q; _" ]$ R# N) N$ K4 @7 `" B3 e! T  z6 H5 [2 b
2、添加Tim2验证程序+ o# H/ w. H8 k& W
(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。5 K' ?/ l( M8 I, r

6 ?8 D- ]. s) Q) ~! q2 |备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。
/ d2 n! H3 a( m) q: ~+ E8 J* p2 A) ]0 s
c4fc03b80f9647648e69fd122742eeb5.png ! x- ]# a. w$ D* C( o5 H% i* M* T
- f, f* S7 S. P' F) j
(2)在stm32l4xx_it.c 文件中添加每隔500ms反转LED1、LED2、LED3、LED4,如下所示:
6 x! b' E  h( z2 z2 x. ~
1 j' w+ W) S% I4 S# _5 H7 R
e8f15097960d49e0801a7892f819656c.png
- [& O  G* S" D8 E" @( `- w) w4 X* C
  1. /* USER CODE BEGIN 1 */3 I) L8 r. H, t
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)7 z* h  ^+ y2 Y9 U
  3. {6 m& Q$ e' @: D* J5 P6 L
  4.     if(tim_baseHandle->Instance == htim2.Instance)
    * [6 t0 H7 b9 e  Q
  5.     {
    ! l, Q& u3 `+ h7 p
  6.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);                              //每隔500ms反转LED1 s) g8 D$ g) V) R% I+ Y6 ^* k! w0 R% u
  7.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);2 @9 O7 `7 k: w
  8.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
    7 y( G0 n! h6 v' s
  9.         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_3);, i2 E" `1 u1 @
  10.     }
    ! l) t6 H6 P3 m. }9 m* L7 f- C0 ~
  11. ; z" D# P7 j) b! L
  12. }
    % N8 Y( ?& [: v) P8 l  i

  13. ' m& D0 K; U8 F2 `9 B/ o8 a
  14. /* USER CODE END 1 */
复制代码

- Y7 P' j# z! Q5 C4 j  u3、设置编程仿真下载模式" `6 Q# z& j) Z: \3 ^+ p! j  G
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
7 O6 O/ s9 U# u7 n! a7 ]/ B: z0 X! v. L2 l5 g. K+ }$ P
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
0 |* K% H6 z  C/ U, [7 o- B) k/ _​​
- _% R4 o. |2 s% l7 U" y, O(2)点击编译,完成后提示“0 error(s),0 warning(s)”。
2 W/ r# [  S- d3 R* _" p& x0 k2 q8 A) Z6 E: _3 |4 t" O6 Q- C0 G) t
e0b7e3e353b345a7987fe5f821de2dda.png / k1 a  a* \2 ]8 d1 O
​​! p* M* u: \, I6 D2 K  s9 I
(3)点击Download(或者快捷键F8),即可下载程序。. |5 F7 `, m: s7 x" u4 g5 J

0 d2 I3 y2 O2 x
eb3f250f19e44862a7df80c2492fcd01.png
6 {) {' i4 E1 Q+ S' S​​
7 C! V+ p: a& P1 s# ~9 T4 N( I(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。' t  o+ g5 k: t4 @
+ X$ @4 k) W2 h6 T2 D, H
9f8aa1a4e8f04041bcf5cb183facd100.png 5 t5 [* h2 b% l. T! f# Q2 f2 S
​& p3 Z) k  L; w! g1 X; Y

7 T& ~/ o# F% n3 J4、Tim2实验效果展示0 x9 u  K( f- Z+ ^- E' i2 b! q
        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次。2 L$ ]& c6 _  q9 E" ^
————————————————
/ |0 L+ D3 Q% e0 F* s: o! U  x版权声明:智能小屋ZYXC
" O. i4 @: j8 l! B, e, Q$ F/ l6 [3 v1 q! i: D) P
8 {/ i; d+ F* x" z$ x
赞 收藏 评论0 发布时间:2023-1-13 19:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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