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

第七章:STM32CubeMx 普通PWM基本使用方法

[复制链接]
STMCU小助手 发布时间:2021-1-12 15:00
第七章:STM32CubeMx普通PWM基本使用方法
STM32CubeMx 普通PWM基本使用方法
本文实例说明:
这里是使用 TIM3_CH2输出 一个频率为50kHz;占空比为50% 的PWM信号。
1
先配置STM32CubeMX 参数,如图:

9 e; b( C, `7 A0 w7 J
4.1.png
重点说明:
PWM 频率 = APB1 Timerclocks (MHz) / [(Prescaler+1) * (Counter Period+1)]
APB1 Timer clocks (MHz) :64MHz
Counter Period : 20
Prescaler :设置为64-1 那么此时PWM时钟设置为:
          f = 64000000 / 64 /20 = 50KHz
Pulse :设置为10 ,也就是占比为:10/20 = 50%
Fast Mode:如果频率太高可以使能快速模式。可以大大提高PWM反应时间;同时将IO口输出速度调高。
2
代码分析:
  1. static void MX_TIM3_Init(void)# t" ?8 M: m; C2 h/ V
  2. {0 |+ e6 P6 e! v

  3. 9 S0 N4 ]/ {$ c0 u6 a
  4.   /* USER CODE BEGIN TIM3_Init 0 */& A9 Y) v1 @# I  @) S2 t; u0 @$ h
  5. : c+ s+ `$ p. ~* K- V" z6 o/ h
  6.   /* USER CODE END TIM3_Init 0 */
    5 m. a0 E& p5 d4 J4 y. ]

  7. 0 F7 m4 c5 ]4 I* p) u4 e
  8.   TIM_MasterConfigTypeDef sMasterConfig = {0};
    . O# q) O; a4 E; g2 }  R* O
  9.   TIM_OC_InitTypeDef sConfigOC = {0};5 P7 B/ q7 ]7 T3 F+ s( n% n

  10. & j$ K! a) \5 |  S, a
  11.   /* USER CODE BEGIN TIM3_Init 1 */# H. w+ z6 v4 V, K
  12. $ v3 W# j- W. K% i' U' ]$ n9 Y- p* z
  13.   /* USER CODE END TIM3_Init 1 */2 D: ?% N8 q* _6 {/ @
  14.   htim3.Instance = TIM3;
    ) X3 M; Y, P7 S: e% s7 `
  15.   htim3.Init.Prescaler = 64-1;
    # M1 W( z# {( f: u. m
  16.   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    , p. o0 B8 ?3 D- o
  17.   htim3.Init.Period = 20-1;
    4 ?; r$ C6 t. w, [; L7 C
  18.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    2 m3 `6 D5 g5 O0 O: {
  19.   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;9 y% |3 y8 H+ C: s6 P
  20.   if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)% ^, y+ e. \5 Z' X. f: k' }
  21.   {- g1 P2 ?7 Y* f2 V8 K
  22.     Error_Handler();3 M6 M. z: G4 e% |! v
  23.   }
    + i5 M7 R: W! g& K
  24.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;$ V& R$ h0 M" l1 ^. ~, t
  25.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;) D8 W& Z" c; _! }
  26.   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)4 [% Y7 N* D1 U# D
  27.   {
    * y2 k( Y3 D) J- H7 w$ s
  28.     Error_Handler();
    6 d* }! ^% I* }9 }
  29.   }6 L7 A2 b! [2 n! K* R2 N, B% F
  30.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
    9 ]2 e- p9 d' {! W) H) @; G
  31.   sConfigOC.Pulse = 10;
    " N' l8 A/ ]0 F7 Q! [0 @
  32.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    $ ~! P' c- {" y4 X6 R/ G
  33.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;  j& D) `# p2 V! }# e; j2 H* z
  34.   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
    1 v* d: P/ T4 J" c, S+ E/ O
  35.   {
    9 [7 k* V0 ~1 C
  36.     Error_Handler();
    4 b% ?, [! _  R3 ]
  37.   }
    : y: G& B$ f7 Z- a; t9 n( N
  38.   /* USER CODE BEGIN TIM3_Init 2 */
    5 @9 A2 p& d' b! B* P3 T3 [$ ?
  39.   HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); //启动PWM输出函数
    4 Q- Y8 ?! y0 z( l! ^
  40.   __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 10);//这个函数可以设置占空比
    ! H0 |4 u. Z7 v
  41.   /* USER CODE END TIM3_Init 2 */( S/ o% }  E& C- @) L3 R! g' {
  42.   HAL_TIM_MspPostInit(&htim3);/ m* E9 ]7 }0 X

  43. - }0 x4 j9 W( T' y' \8 {
  44. }
复制代码
5 g! z/ P* o' {* I- u' M9 c
3
实验现象:
4.2.jpg
文章出处: LinuxARM  电子爱好者
9 x( q3 R/ F8 M7 l. c
赞 收藏 评论0 发布时间:2021-1-12 15:00

举报

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