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

使用CubMX和Proteus学习STM32单片机(六)------PWM波形产生

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:23
项目简介( w1 C/ D6 J9 |& C
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。" w# E7 E( [; x, I

; W. ]% X4 q/ M% i% T硬件模块
& k. D6 d# j* p* }6 ?        STM32F103R4
" I, K& m# _; L) u$ ]# X! d        示波器& S1 a! N7 g& n, Q* b
, r1 I( n9 ?+ p6 s1 ~. }7 j. P
软件工具
1 s" Q9 }/ I% w% J; x; ]        CubMX, N# o! U) r9 N+ E8 Y
        Proteus6 Y3 Z# `2 n8 T# b+ v+ [/ {' B2 G
        KEIL
! C8 J4 B- p. ~3 K0 W  M; W5 F6 ~8 T$ q! d
电路连接图9 T( R4 F6 Z% f3 U
        
, I. ^" C2 X* P  ]0 ?7 Q4 x (2MCQ7[4~K7O00MT9Q{8OT6.png ) q" e3 m, i% g, S) D5 h2 v, A5 ?
  X, P& O7 c$ }8 N1 |* Y- J
工作流程$ _" I5 d% A) c( y1 L
        首先,在CubMX种设置号一些参数,选择TIM1定时器,按下图设置好工作模式。输出PWM的引脚是PB15引脚。
: g8 P9 ~7 q1 }5 U' n/ T* O  l8 q) e: U; j! K( g0 ?& w
9R~GDH0(5_3J}KE~C$AN{`O.png ( l' ~) {5 U* T4 q
  f2 U3 a' p$ Z$ N9 _) j
然后再按下图设置好预分频和计数值
0 n% l  ]- F3 Q; @4 g! y2 ]3 s0 T6 T" Y8 B) v0 {/ Z
$JIALBXFA0Q@3OF6[XFSTHK.png
4 d. z9 m( K; f$ @" m: a% u& ^: J% R/ P
最好设置好占空比,占空比=Pulse/Per,比如想要设置占空比为20%,而上面设置了计数值为1000,那么按照这个占空比,就照下图设置好Pulse为200即可。3 d% s/ L0 o: J0 D. \7 H
, N* m& E" S( o) W; W0 K, v' Q
(%SAZ)TG8~{XGK6@N@CJM5U.png - \8 V1 P# }: r* W( M' |( ]  G% n
7 g6 q: I, _! @3 G# w  N) [
然后生成工程。
; q6 b, B3 y4 I, p0 d( v. Z+ `. B) r5 ~: |6 T) s; K6 Y% V
增加输出PWM的代码。
$ T1 H0 a; Z% {: ?( S& p, _/ m0 }; W
JLTKE[Y$FDLMZVQN$~Y8LIV.png & Z, \9 E' w3 ?8 i& T% @
9 f  ]5 b$ a8 {6 q0 G5 C
出现问题了,上网查了一下好像是超出了单片机内部的资源。网上推荐的方法是直接换一个型号的32单片机,但是我不想用这种方法,后来我删掉一行有浮点运算的Printf函数就可以了,可能是printf用的太多了,太占内存。可以运行了,但是一开始还是没有PWM波形输出,于是我换了个通道,如下图。
( S0 \) T  P. O# u% f9 f
& s- \% Z% k- o0 m& v& Z
NG98W5W9GX)62`H98(X@@NP.png
5 P& X$ w9 @' |5 V2 D; E; e. t1 a- y9 {0 E& ?4 R
H_O06W4S$Z}2S_Z(CAF4PLT.png
& F8 s; E3 P' o2 ~! J' ^
' v/ M2 Q5 A+ y. O
4 ^1 F. s& D7 `/ i8 V$ _7 D1 S+ U
Prescaler:分频值,可以设置为0
5 o% {$ O; W" H1 ICounter Mode:计数模式
) Q0 r* W9 [$ R/ P! b) |. b% C' O$ xCounter Period:自动装载值
( ]9 [/ |; }+ }Auto-reload preload:使能自动装载功能
8 S0 j5 O: R7 G. T, c* F# i2 g7 L+ O! h- I+ S* t4 K
`SMETA[YIZ6W)406(GG1Y0Q.png 5 }- L! l' }, W% ~1 O

& o$ ~4 j1 [" g- x" xMode:PWM波模式
% W. a# \0 u6 f# l: L& H3 F6 X
; I' [7 ^4 Y' n+ ?- S' H( \# hPulse:计数比较值
( m+ N* X2 l9 W/ M% H4 C' e2 o2 u

+ [: c9 W. S5 C0 a5 Q' P0 DCH Polarity:输出极性
6 z. O; x. W) u2 `. e: ]
* H2 o0 ^2 k* Y3 z
输出的结果如下图,这是20%的
4 c. d& t4 j0 W9 I( P$ ?& v) M: P# D
: ~4 T. I( T- c) y0 C5 W
1]WZ65]P4)QM@IQ)D}VXFX0.png 8 S, A% u- K+ y$ E+ T9 W

$ T; H9 {/ W. l8 ^7 d3 \然后改变占空比为50%( X: U$ [) q  c. y
$ {! k3 d0 V$ i; O( ^
TTF6484BS@M7LYUG7}M}6_0.png / G: k2 a- P( S+ L9 b. M: y' `$ {
' z* W% I# E/ j2 b9 O# t* ]8 n/ V
输出波形3 n" w6 z7 Z. X# {4 h

1 {+ j  O1 z5 w0 }
L28XBZG)J$@ZYMXE_@_JV0V.png + X$ Y* J% M& J& a
; I5 d5 k; i0 A3 e
至此,PWM模块完成。
- B% S. l" t9 ~/ T0 Z' D% K6 }6 h, ]0 `: j+ g: n% D
程序代码3 u! }& _4 M* N
        mian.c
' p! F2 h3 A3 U9 }
  1. int main(void)
    2 K" A! h6 R* p3 Q. f1 o
  2. {
    " }& T  B* T! c& \0 g! }3 `
  3.   /* MCU Configuration--------------------------------------------------------*/
    8 Z5 a8 I6 }3 U! \

  4. " [0 i2 o2 U  p' \
  5.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */6 G& s, {5 y# |% R
  6.   HAL_Init();
    6 o% u2 U: T& _% \/ l1 L" Q

  7. 9 [) W! c2 j* g0 F/ M, O
  8.   /* USER CODE BEGIN Init */3 _+ ^3 a, m5 c; |

  9. ; `- [% J9 t5 [2 ?$ @+ m- V
  10.   /* USER CODE END Init */) I( I$ C- j+ j/ ^
  11. / o: K# S* c/ w$ P0 x7 Q
  12.   /* Configure the system clock */
    # X: [  [- f8 t# w/ C
  13.   SystemClock_Config();) l6 Y3 o3 Q. W  Q
  14. . T. e0 l% I( M1 {
  15.   /* USER CODE BEGIN SysInit */
    , a$ p# b& X9 _9 X; q

  16. & b/ J' _/ q( j
  17.   /* USER CODE END SysInit */
    6 E) ?  t; p% T

  18. : D/ C. B" _( B& ^( q5 Z3 ?0 T
  19.   /* Initialize all configured peripherals */
    6 Y5 h+ l8 W8 ]# W8 K/ P6 }2 ~9 N+ w
  20.   MX_GPIO_Init();; V, I+ W3 v. w9 E
  21. //  MX_ADC1_Init();
    & A  |3 b7 o! [$ @% `% D" o3 \" m
  22. // MX_USART1_UART_Init();
    ( X( e- R( X3 H) ~' R
  23.   MX_TIM1_Init();
    / _, ^$ p; B! T5 |& ?
  24.   /* USER CODE BEGIN 2 */
    . Q& g8 i! [3 @0 y. [
  25. , r9 q8 t5 O5 p6 G) d( |; j: K
  26.   /* USER CODE END 2 */: ~9 D8 Z* F$ u" B4 ?7 @7 V* X

  27. 2 w0 q  G/ h2 v6 \# y8 b
  28.   /* Infinite loop */) C" R, h) a% x- {3 ]9 _
  29.   /* USER CODE BEGIN WHILE */;- x' |5 K! a- S9 g
  30.         HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启PWM波形输出
    3 M8 s. D8 p/ J( C& }  K: D
  31.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500); //改变占空比,500/1000=50%& K. X% m) Q* U% w8 Z5 g

  32. ' T, a' i/ ]/ t2 L+ y7 k5 }9 J' J
  33.   while(1)
    4 J; V8 }  q) Z7 o3 C9 |
  34.   {
    # x3 s0 X: }$ ~1 H: d
  35.     /* USER CODE END WHILE */
    ' d/ Z. y5 }8 Y" t# {

  36. $ `* P0 G( E4 ~0 c' L' i3 f, N; a
  37. ; m. x( G* E8 m" V  c2 W
  38.     /* USER CODE BEGIN 3 */' Z! k8 y+ H) ^9 I/ }& s* N
  39.   }
    , U4 S+ R; i7 |5 A1 S& p
  40.   /* USER CODE END 3 */7 w( Y# E8 s4 m1 u/ j
  41. }
复制代码

. s  N" H/ |8 A1 v 作者:jxjajl - H5 J* b1 t: I- H0 O

# E* P! g! l. K6 t8 G7 {7 P
赞 收藏 评论0 发布时间:2022-12-31 19:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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