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

STM32CUBEMX(1)--PWM

[复制链接]
STMCU小助手 发布时间:2022-8-19 15:45
概述
$ G9 X5 \; Q" W+ r- A本篇文章主要介绍如何使用STM32CubeMX输出PWM,并制作呼吸灯效果。
* l6 B3 `: T9 K* R( {* ^2 v( W" T+ H- ?$ N9 r  A. f; {
硬件准备
; F7 ]7 |+ b! K. b4 k& s; R7 H首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:* L) q) ?3 \3 Y7 E& |
; |8 e( n0 w( |5 h
20200604115410161.png
% h' G- e( a' W. b6 |" E2 V5 z# @! a9 k6 O
选择芯片型号5 G- _) W/ \9 K- h

1 v# v8 f& c4 H; k$ N, f6 f
2020060411552214.png
0 y: j# p+ F2 J. w& R6 F& X/ J' D) e- k
配置时钟源
) a$ G( F8 K' O- h' ]9 b4 G
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:) ~% E/ @. n1 @& H+ `
, y" e, _3 I% Q
2020060411565088.png + w1 h" ^7 i/ O9 O

7 C/ N' R" W2 r6 l9 l5 K. F配置时钟树
+ \# C6 E3 c- b
STM32F0的最高主频到48M,所以配置48即可:& N. S9 X* U0 }, d4 @
& V: C; P) e% i9 X* \
20200604115810619.png
" a; M, D$ l7 @: f3 @* \7 T# _8 ]; F& R6 l" ?. M
PWM配置! E+ A8 }& c0 l+ f
本次实验使用的是TIM3的通道1来输出PWM波,选择时钟,并且选择通道1的PWM模式。2 V- t+ C" J& y! b3 m9 T
20200604120225610.png 2 M5 d9 U' w5 n! d

7 q; h2 B. k' ^0 @0 s! o- J' A配置PWM波的参数
3 q) E& f: o# H9 i  m, d
7 \+ g0 ^9 y8 B 20200604120518563.png ; k# Z% `) J0 c% i9 G( I

# b4 M: k& h8 O' Q+ d" u. aPWM频率计算如下所示7 f: _6 M5 c7 M* w2 O( ^
; C; w% s4 {3 g$ O  }7 C( B
20200604121517190.png
& f3 y2 ^0 y) {, U4 C
  n( W: `: R/ S1 R& X在上面配置TIM3参数,预分频系数设置为48-1, 自动重载值设置为1000-1,那么PWM频率为48,000,000/((48-1+1)*(1000-1+1))=1000Hz,即1KHz。
3 P1 [/ A& q5 S0 ^  ]
' x# q& _& d7 U注意载芯片示意图上会看到下图PA6就是TIM3的通道1PWM波输出口。
) X* k) k: c( s9 W! y1 N6 W
) h- K; c. }% x" A 20200604141929338.png
& f( g7 ?5 A2 L# G5 B: J- _- L" ^/ E' {+ e- y! _; [6 D
生成工程设置, T5 ^; k6 p  ~# j4 J. Z/ h+ P
注意在生产工程设置中不能出现中文,不然会报错。- h$ j7 p1 E* \) Z3 l

9 T& Q6 i+ ?* @1 ~ 2020060414215398.png
% G3 q: R# S# W; j; `( d' \5 {  z6 T- W% Z7 Y
代码生成设置4 k+ A# d* `, Y+ W) k7 {+ T: \
最后设置生成独立的初始化文件:# P) [* u" w2 v+ h9 K

4 m0 Q7 G! s5 b6 E* E 20200604142313327.png
, A) C: k! j: h% z/ E- b( j
! g$ g( W' y% a/ z, K生成代码
. w6 Q# O7 B7 n0 K
2 W. B: S9 Z+ Y, I- x9 B
20200604142359253.png # q( b& e% Y/ T2 y& b* D: R3 \

4 [- ~1 x5 Z* o  |4 s0 z* V, N配置keil% \. V' T/ A9 J
/ y! k/ f8 O7 y8 z2 s
20200604142614479.png
7 r4 Y* X. V  _, s
4 `% {1 p- O2 \" `3 ]代码
: l: {- e9 L! h8 q2 |" c7 X
在main.c中,先定义两个变量存储设置的占空比和模式
  1.   /* USER CODE BEGIN 1 */
    2 n+ F) q" }: G; J$ H3 C
  2. uint16_t pwm_i =0;//占空比9 S$ J/ e4 M. h+ Y+ T
  3. uint16_t pwm_mode =0;//呼吸灯模式,1为增加,2为减少
    ) M2 H! o. N8 f  e1 f0 q
  4.   /* USER CODE END 1 */
复制代码
7 K1 {4 q+ @  y0 u4 ~& U, j: ~
使能TIM3的PWM Channel1 输出。% o  K& S$ P/ G( ]
4 |2 l. b5 D+ A4 B
  1.   /* USER CODE BEGIN 2 */
    - E* I! h2 Q+ n* \2 d2 X
  2.     //使能TIM3的PWM Channel1输出。1 I9 w4 ?2 t5 m9 n- O
  3.     HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
    / l+ I) S, z( F9 ]5 a5 V
  4.   /* USER CODE END 2 */
复制代码

. l3 Q7 L- k" R) s' |1 M' b然后在while(1)中改变pwm_i的值,来实现呼吸效果。+ L0 C# q; U4 d
0 e4 k( W0 Z, x7 g) N* _' s5 b
  1. ( w3 Q2 J9 _' o$ e- N
  2.   /* USER CODE BEGIN WHILE */
    , W5 P- _0 i, f$ n) @
  3.   while (1)
    : F& q0 n: U' P9 f& E
  4.   {
    & r2 M5 g+ R- u0 D
  5.         if(pwm_mode)+ W9 d$ l5 S* s6 j8 o! }- w2 {; s
  6.         {
    , C; u( p8 P5 W! I
  7.                 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwm_i--);
    ( M5 a5 R2 [3 U: R8 j8 g9 B3 x
  8.                 if(pwm_i==0)7 i2 G- z0 n5 b3 X/ O; S* u  V  V- L
  9.                 pwm_mode=0;- f0 M+ q; H- ^/ @% |# F9 ]
  10.         }
    & p5 ~9 {1 k4 U  \
  11.         else, J5 w2 f4 B* b6 q  u9 E  R6 _
  12.         {
    % p* U( ?: r5 b3 Q, A0 ~8 k
  13.                 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwm_i++);/ Y3 k* c! \6 o+ Q% |
  14.                 if(pwm_i==1000)1 m# {) e6 u% c2 j9 V5 p
  15.                 pwm_mode=1;
    & _: @9 p8 a6 l
  16.         }- E& @: @% D  s0 Z! T
  17.         HAL_Delay(1);               
    ' s7 ?2 u. ?- O* L9 w3 O+ T

  18. : E  ]+ ~$ |( Y7 v4 L8 G" O) C
  19.     /* USER CODE END WHILE */
    , k: N" j# |9 ?) w
  20.     /* USER CODE BEGIN 3 */- F! I3 o+ u4 C: ?0 l! ^
  21.   }
    ' c% {9 S0 p" b
  22.   /* USER CODE END 3 */
    . h) q/ y* k1 N3 y) `  G0 o9 ]
复制代码
演示效果
. V) W: O' D* Y* d: |9 q. ^
" ?' v4 m! Z- \  x, p) { 20200604142957273.gif 4 F8 N+ f+ }% x8 \

& q- U8 T5 h" C& n) i! g( `5 e+ q8 X- I+ z
赞 收藏 评论0 发布时间:2022-8-19 15:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

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