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

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

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:23
项目简介* S# K* P& u" _
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。) v% u8 \$ Y+ ]" G

' l8 C' w9 O( [1 w1 g硬件模块) ^. p$ C6 U9 w8 @( y: b
        STM32F103R4
% V  ?4 q/ j: [        示波器
9 }1 A$ A+ q1 _/ _4 Q2 ?" Z8 r% K4 r5 Z9 [/ n: V
软件工具
3 r/ `6 [2 Z3 @0 B/ ~        CubMX
8 M1 e8 @& U! }0 t        Proteus, n4 e4 C7 P! }. |. U' m" V% _
        KEIL6 l8 }, B! \0 Z

9 _- A0 D- d- n9 {电路连接图
+ I) }( ]' N& U- p; F! a2 i        ( u) S6 P/ N3 r
(2MCQ7[4~K7O00MT9Q{8OT6.png 9 g) S" L1 m% P$ F

3 f8 X+ `2 I# y1 f5 a: o; p4 t1 r工作流程
/ Q6 a+ z* K) N- e' |9 H        首先,在CubMX种设置号一些参数,选择TIM1定时器,按下图设置好工作模式。输出PWM的引脚是PB15引脚。
6 Q/ O; Z/ }8 J, ?! @6 ^- \3 b
- y- m/ [9 G& a# h
9R~GDH0(5_3J}KE~C$AN{`O.png
* V! L, c- w' _* b' j8 o
3 |2 h5 f/ N, b! X
然后再按下图设置好预分频和计数值
( ]( O: u2 [" r9 r* s5 Q) N2 n- h' z  F; U0 t+ b1 O5 U
$JIALBXFA0Q@3OF6[XFSTHK.png 2 B3 Q! x: v" S% H) g7 o6 K$ Q
& w# F; d+ a* V( d
最好设置好占空比,占空比=Pulse/Per,比如想要设置占空比为20%,而上面设置了计数值为1000,那么按照这个占空比,就照下图设置好Pulse为200即可。1 |8 M! ~% h: c8 k
7 q' D' m( n/ ?+ U% d) ~. p
(%SAZ)TG8~{XGK6@N@CJM5U.png
. U/ O: n; J: ]  A/ O. h, }: i: n$ ~" Q$ X, A
然后生成工程。
  n$ c+ C- }9 |: f
  a+ I) B) j( f增加输出PWM的代码。& w2 a% P8 M, p  ^  S3 Y
" v' D3 I% \9 o5 ^! j; G- f
JLTKE[Y$FDLMZVQN$~Y8LIV.png . \6 a- e) l, N
$ N  g/ U' a: h; K$ i  g
出现问题了,上网查了一下好像是超出了单片机内部的资源。网上推荐的方法是直接换一个型号的32单片机,但是我不想用这种方法,后来我删掉一行有浮点运算的Printf函数就可以了,可能是printf用的太多了,太占内存。可以运行了,但是一开始还是没有PWM波形输出,于是我换了个通道,如下图。
9 ]; ?1 T2 P$ \. `* f$ s; ~* N2 e+ P6 u- K
NG98W5W9GX)62`H98(X@@NP.png
5 J. o8 w/ z& d: J" K
( \# O/ ?" o+ |# J' {0 j( T
H_O06W4S$Z}2S_Z(CAF4PLT.png
- c7 V8 v# g% Q; g
7 k3 b& ^* z8 Q" ?- t7 X# d

. b- C6 w+ Z1 Z( V4 oPrescaler:分频值,可以设置为0
+ ]& M) h) ]: }$ F2 ?) M- T" dCounter Mode:计数模式& ?! @& C3 R9 X3 g- C
Counter Period:自动装载值
0 w& D8 ^4 d7 w8 y+ e( eAuto-reload preload:使能自动装载功能
" q6 O" c( a. T& W
8 F  d# D- K0 M- \7 I5 `7 X
`SMETA[YIZ6W)406(GG1Y0Q.png 9 k/ T% f$ ~3 V3 _& F

+ l$ p+ v8 }1 `6 Q* _/ h* |5 oMode:PWM波模式' j( O6 S4 j; e6 v8 X
  {5 ?9 W8 Q2 r+ {8 c
Pulse:计数比较值, @# r) [, _/ N5 X  S& }/ M) i
6 I/ M5 I9 v+ m, L" Y3 @
CH Polarity:输出极性: ^0 }! e% }! A  Y* _/ g
. L  p2 U$ p7 @, M' r
输出的结果如下图,这是20%的6 @  X! N8 N5 j2 v
$ I' U- v& C  I# v
1]WZ65]P4)QM@IQ)D}VXFX0.png - L5 `: q& Y3 h- c
5 P9 u4 u' c! ~1 s. @  H
然后改变占空比为50%4 ~; x, q4 m4 P6 C3 ?" D8 b

( [  x" [# Q" a  C" \
TTF6484BS@M7LYUG7}M}6_0.png
2 V) Y( W) W5 P. u) n

+ I7 h1 v- [2 t0 D! f输出波形
: u0 N6 W4 s9 }: k5 f
: Y7 m: x: c/ T5 P3 B( |
L28XBZG)J$@ZYMXE_@_JV0V.png 3 |: D% w+ s2 n; T) K5 I$ [3 j! a

5 O$ m8 Q+ ~" q9 E4 l至此,PWM模块完成。  X8 R- G! Q# O9 A$ k

  }; G/ w, i$ Q  d6 a5 V4 i: p程序代码
! H+ o" M* J1 D2 v        mian.c* I, L  ?" F+ p) D6 r( [
  1. int main(void)  S# @# [3 w( r1 {  a# p
  2. {4 F& Z/ w) X9 o& i1 K9 ]
  3.   /* MCU Configuration--------------------------------------------------------*/
    ( R" S* o% f) h* c4 J& x+ W
  4. . R# U4 A$ {' B6 v2 q$ H! }" k, ^8 D
  5.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    ) c. s) U( j( Z7 E% v; c: u/ o
  6.   HAL_Init();+ T/ J9 G' I3 Z9 N% e
  7. + l6 A: e( @3 @# `( j- Z' I& |
  8.   /* USER CODE BEGIN Init */! L( s1 A* N8 G

  9. 5 V" Q4 l! Q4 W' P$ h
  10.   /* USER CODE END Init */
    8 U( C$ x  H, N$ v/ B' u
  11. - j& ~% m2 Y. o1 c! a, @! I. w9 n
  12.   /* Configure the system clock */5 f  H; V, \/ _4 ~
  13.   SystemClock_Config();3 u' `4 _6 ~& \, N- E* g/ M

  14. . M$ W5 b" F. Q: @1 l' X( {
  15.   /* USER CODE BEGIN SysInit */
    4 N8 p  d4 C4 ], N* t
  16. 5 a9 Y9 O. f$ @$ M6 c
  17.   /* USER CODE END SysInit */6 Y+ j# u* t! r& w" _9 f' F
  18.   u$ Y9 a. t4 {
  19.   /* Initialize all configured peripherals */# T: @' e! m' q  H" o% ]
  20.   MX_GPIO_Init();
    " a5 i, g# }5 W
  21. //  MX_ADC1_Init();7 z# R  f* P* m/ e8 R! }- W# {: X
  22. // MX_USART1_UART_Init();
    % U, Y5 c1 p, M& d* z/ p
  23.   MX_TIM1_Init();
    1 Z1 \+ I9 k0 S( `( p
  24.   /* USER CODE BEGIN 2 */; R4 g' I6 N$ P
  25. ' |  h7 g, X5 {. r) V' h! u
  26.   /* USER CODE END 2 */" o6 g2 v; o1 X* ^( W  n

  27. 1 Y5 ~' j& d; c  I" M- ~
  28.   /* Infinite loop */* X- T! K4 w' h* G: `' q
  29.   /* USER CODE BEGIN WHILE */;
    8 Q, G  Z4 I) Q1 c: _, M
  30.         HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//开启PWM波形输出9 |, @9 Z& B) E3 n
  31.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500); //改变占空比,500/1000=50%. ]9 p6 s& V+ ]) E
  32. 8 r$ i4 P. D/ T( |  p' C
  33.   while(1)8 }( ], b3 k) ~9 }8 n+ p
  34.   {
    ' z) B2 h" E. i* h
  35.     /* USER CODE END WHILE */
    7 @6 w, c- e$ v7 c5 I
  36. " b. ?# w2 p7 C. @  b# c
  37. & P* M+ `& R& s% v2 R- w/ S
  38.     /* USER CODE BEGIN 3 */: L$ f+ f6 Z* N  d: e
  39.   }: g& k) x. @8 m8 d
  40.   /* USER CODE END 3 */  \7 g# R' W! W" \: q* `, ^
  41. }
复制代码
1 E% c$ u6 B/ n/ v
作者:jxjajl
' e9 u3 g8 U. S) h' v7 m8 l) n  q* E' F: ?) o% o
收藏 评论0 发布时间:2022-12-31 19:23

举报

0个回答

所属标签

相似分享

官网相关资源

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