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

【经验分享】【HAL】stm32F0之PWM输出

[复制链接]
STMCU小助手 发布时间:2021-11-23 20:45
平台:# F! v$ K/ z0 V2 G+ B
' ~# Q- y3 p! \6 {' o
20190731090150291.png

2 Y$ Q5 W- x& g. z+ O: A
/ n+ U* j7 _$ n1 u! F3 RCubeMX配置:! }5 c9 u, i. r' {, N
1、RCC8 S, F; H- N( l- p! q
20190731090344124.png

# h! Z+ `2 ]( R2 n# S
: Y) ~4 y$ i1 u$ e8 _0 E$ R5 {. L2、TIM14配置
& Q- j: _& U( s/ D0 v
8 P2 J6 ~% }- x5 D( x
2019073109045036.png
7 n9 \, l" y- C( O/ ~8 r
20190731091304623.png

5 O; m# n5 a6 }7 R0 f1 [. h
20190731090614494.png

5 w* `9 n9 {8 a+ V: M- X9 J. I6 M/ J$ r+ c$ G8 h
Prescaler和Period决定PWM的频率, f=48M/(Pre+1)/(Priod+1)
3 ~' ^6 V( F4 {) mPulse决定PWM的占空比+ f: ?, @" B5 H0 ^
占空比Duty=Pulse/(Period+1);! C8 ?" [3 H3 e$ u
- k3 W8 d1 `" z
生成代码
5 H1 B( ^( ?& u% x2 x) X! o1、tim.c
/ H: t: w! O! P. o( @; O
6 M0 s+ z' ]3 z
2019073109173988.png
- L: O* Q4 G  H9 Z

( a: Q5 o9 m$ Z9 e+ _$ {修改Pulse为30;则占空比Duty=30/(199+1)=15%# {& @" k) L" r6 ~& d% f

: {" @5 Q4 I6 `( V) I* A
  1. /* USER CODE BEGIN 2 */+ y2 m# b, K- T% a* Q9 x' N% T5 q5 O
  2. HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);     //输出PWM' L( m  {: c: c
  3. /* USER CODE END 2 */
复制代码
- i0 ~" N7 i4 I, U
在main()函数中添加PWM输出代码,即可产生频率为5kHz,占空比为15%的PWM# Y9 v6 X/ W  C* g& c
示波器观察
; B- k1 R& I* I' f) J0 J( h. x" e$ D3 |# E- }8 E- m
20190731092339387.png
0 X- p9 [. V0 p9 f3 h
3 K' W2 Q6 [) @
若如下修改Pulse的值,则生成占空比为30%的PWM" Z2 v5 w$ H/ h' ?
4 ?' r* R8 H. U: L0 P: A# q# I
20190731092515144.png
' ^: |8 P) M: f7 [! F& a; F

* B( B% W! {* N8 k) m' |1 e示波器观察
- S1 D+ @7 G2 Q# H4 q4 C( S( o6 s  r, `# p( n# }8 y8 j
20190731092644843.png

# n! t. O3 X  p7 T) J+ q# k. V! B* H" K
同样,若定义变量n8 i' f3 w  N  L0 i8 X
main.c中+ @! h1 _! E( D1 _
  1. /* USER CODE BEGIN 0 */, `, x, ?; f2 P1 ?: S! [0 t# m' G
  2. extern uint16_t n;
      D, c/ `2 `) g, l  W! H% o
  3. /* USER CODE END 0 */
复制代码

- V" K* J& l7 ?2 f$ w9 |8 G! J" E6 n( Ztim.c中) D* z( C+ ]% `4 a1 @+ A0 t2 {4 {
  1. /* USER CODE BEGIN 0 */
    5 s. l/ |0 x: u! Y
  2. uint16_t n;
      c) d% e" o7 _% |# s0 ~+ _2 _: ~
  3. /* USER CODE END 0 */
复制代码
Pulse的修改
0 J/ G1 ?( K8 J! q6 C! n" R4 v$ r0 [5 ]8 D: W! l$ k) T" d
  1. sConfigOC.Pulse = n*htim14.Init.Period/100;
复制代码
则n为多少,占空比即为多少(n%)。这样使占空比的变化和Period脱离开,不受Period的影响,可以独立改变。
2 N# n: x) k8 @6 ^, _5 }% J( a& S! e
- @- P' J9 Z$ r6 `
20190731091534976.png
收藏 评论0 发布时间:2021-11-23 20:45

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版