继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。
! @2 S# O8 }1 B2 F/ T+ q0 y% Z$ L6 \
大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。6 U4 S( q( x. J8 x: ~4 M
) d) v& a6 c! J" F- B: e
看原理图:
) R7 r G+ k+ ^6 n! q
7 v( f8 ~ y& Q% m% v
! q x/ O& m/ g" |( V0 j
* g; {+ u: J' A; Q( Y3 v- Z$ n: N; z6 n
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。
+ X% C: q) n3 w5 Z1 _. @4 b
5 ]/ H5 @% _. T) j5 { A
: r7 q T% l" x% f M# }! r新建工程目录如图,并添加相应标准库文件
0 a u! _- _: ?4 ^+ o$ C. k5 m7 S, e4 M
) m9 I) l1 S2 T; |
! t3 E7 S' D% K' {
! o m) ]$ x8 c: w0 [选择型号,建立工程6 C+ F7 E$ \5 r
: a) r% \7 o' {8 r0 s, P: }编写初始化代码如下:
0 u3 }" p* W- u
3 a7 X: ?6 Y# D/ [1 K# E: u7 |- void TIM_Init(void)( r( e0 R5 l, Y$ o* Q' ~/ O
- {* Z- j" Z, x2 r4 ~6 h- r/ X
- GPIO_InitTypeDef GPIO_InitStructure;! `/ @6 m% c) z8 o5 ~+ g( {! {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;7 i; d% [ n6 z1 N8 m
- TIM_OCInitTypeDef TIM_OCInitStructure;3 a3 p$ c+ K- G. d6 s! x
- 3 D v3 U+ b; a! r
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);4 C0 P6 C) \7 z( W
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);, S* V" ~( X& E) e0 J! M
-
4 H8 {& \4 C) \ - GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
6 x% ]# r) \' L* g: w6 R6 M) T) S1 S; t - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
. c# w2 Z. C4 y6 z - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
* W0 e1 a( e( w1 j% k& c) Q - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;" F' T4 X8 ?* C
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;/ d* L8 e: n" [6 x' c- ^3 E% G
- GPIO_Init(GPIOB,&GPIO_InitStructure);
% t9 _$ [4 d6 f* V' f -
3 y! f$ D2 T1 o& p/ Q# M) @ - GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);- Y, F7 q1 s1 n6 l8 f* s
- / L3 P8 l( E3 F% I) `) o8 e, X' |
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;' d+ v- F! p9 t' p
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;! `$ h* @0 b. \9 ?- S' a6 B
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;, u( |/ G0 F i
- TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;, B9 S) f9 E9 k4 m. }
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);5 M' Z2 |, A- K9 U/ h
- 3 A) x/ {' D9 O5 l
- TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
4 X" M$ }6 T5 d3 g$ U3 A. {2 f- ] - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;7 d/ @9 i6 h7 O+ Q$ G
- TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
% }4 z1 Q R' x' |! P% r$ n7 q$ m$ r - TIM_OCInitStructure.TIM_Pulse = 0;
* _/ M2 [0 k$ _& x9 S/ R7 P( G - TIM_OC2Init(TIM2,&TIM_OCInitStructure);8 q- I! E8 g$ T& x8 S
: s3 d& z! J) G4 X" I" o5 M# n- TIM_CtrlPWMOutputs (TIM2,ENABLE);
) I* z8 P% d. E - w, P2 F- M1 h& a: s. a; B
- TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2
2 k! W+ N9 [8 _" H - TIM_ARRPreloadConfig(TIM2, ENABLE);
7 v& J' g8 \* n% b( f& s -
. d6 t- L. e$ B! \( j+ T - TIM_Cmd(TIM2,ENABLE);* Z3 [7 m" G4 a( E
- }' X$ m! B" h6 g3 r& ^# ?
复制代码 然后编写呼吸灯相关代码
2 d. D( X' n( ?1 r- i=0;: s5 K. p: Q @# x
- while(i+=5)
4 K$ z8 E. w" ^: H/ {8 E8 ]0 G# {4 [ - {' k3 Z& i% O |* _! u
- TIM_SetCompare2(TIM2,i);
' w- m* T; B" j; h - delay_ms(10);
- v( A6 \' i' f- b1 }' T - if(i>=1000)$ k+ b' n# C# o- F6 i
- break;: @) t$ S. ?; q
- }
6 N! a p6 a+ b5 q0 a$ t - i=1000;
! f0 ^+ n2 A6 G- E; N - while(i-=5)+ }+ S# n/ \3 t
- {' R$ [$ N; L! k+ X; `4 b
- TIM_SetCompare2(TIM2,i);
* _6 U4 U8 ?) ^6 \7 {' U: X. [ - delay_ms(10);
( \2 c8 f; c L$ p* N1 y - if(i<=0)8 t: Q6 Y2 h$ E6 ^3 s7 M* e
- break;
9 y6 i1 M$ U m/ [ - }/ f* d1 P2 S1 Z' r0 k
- delay_ms(1000);! D; i9 E" i& i( i2 M
- delay_ms(1000);
复制代码
( m3 T3 w' _- _; q/ o8 R
! F: W/ b5 p/ W+ H# z1 [/ H ?# b( M
写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。
+ F7 O1 a2 W0 m" r* N9 `( z- q6 O
, N( l3 {5 B& q' ^3 F6 v- ^" d8 G
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:; w& a- R# Q* a0 |2 \5 i. O
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%" e1 a! b ]( Z# N
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下
是否是超出输出上限了?
系统时钟为48M,HCLK、PCLK均未分频,为48M
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误
小白,勿喷
5 X6 _) V# {6 Q3 N3 ^4 b
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg