继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。
5 f$ X! m2 @- K& H7 b7 P7 C- O
& l5 D* ?7 J! Q2 L5 n% \ B大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。
9 b% ^7 O h% a
1 L. D) m" _7 R0 p" k. @看原理图:9 P1 L- N9 `' I. P' }! O
& K/ g7 j8 D2 ]$ T9 m- @4 n. \: Z) o( f$ a8 p( O4 j5 o
" }# G3 n' }% }# A' ?4 W
# K0 h/ C3 {3 [1 v板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。6 C/ s: t# [; E
1 O' x. n& B# B0 C9 w- L
5 j. }( ^: `6 Z" H: E新建工程目录如图,并添加相应标准库文件
$ z7 d; Y/ t" v* r$ a0 ^- c( [
" B( L+ {( n, n: n4 e, G1 N1 n9 v
6 ]5 P* k2 [" }: i2 G1 q' L
! I w2 ~) b1 c) D% ]( V* l- }7 ]4 [* t4 I# k; ^
选择型号,建立工程
% k, C/ l: x- W2 n3 I% B$ S! i1 G } T" a- g+ P; `! `
编写初始化代码如下:
]! f: c5 F9 R
# [$ t8 e" ^, ?1 \0 m+ @( o, I$ l- void TIM_Init(void)& A1 @& t* y8 K, |9 G; m; B0 `! x
- {# p. m+ E/ w- i, @9 Z! K' z3 s
- GPIO_InitTypeDef GPIO_InitStructure;
9 _9 s! L$ ^; B) k - TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
6 j, |5 b$ W; f. b - TIM_OCInitTypeDef TIM_OCInitStructure;/ s5 y% }% }5 O1 j! V. n
-
; Q( R% z: g0 E& T* n - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
6 l6 f( H- i. |( b3 D: ]8 T - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
9 a3 A) v/ s9 S* Z -
2 w- Y _3 U: G4 V& N - GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
8 m% v4 [8 H% n: M' I - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;6 w. N% r! ?: k$ o! F b
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
. f8 C8 Q X/ D: g( x4 Q8 t - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
: K6 P+ w2 g6 O& U* w5 s - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
9 e9 ~% m6 ~9 R- {& {! J; ^! [ - GPIO_Init(GPIOB,&GPIO_InitStructure);) h- c l5 U4 I) H, L8 k# S. @8 M( k
- 4 C9 p: D0 l+ k+ Q( K7 R
- GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);' I4 N0 c3 a; Z1 k' w6 d! e
- 5 o0 D' s5 P) q8 ~1 w8 H
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;+ T: v9 J* A2 i$ r
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;
% r5 N) \+ [& Y8 Q7 @! W - TIM_TimeBaseInitStructure.TIM_Period = 1000-1;
$ f& X6 J, a0 ~1 D$ R6 e% W! u - TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;! ?% {8 R9 p7 G8 I& y/ l
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
6 w; _7 R, I- k, G - # g# [, M+ U+ }) k% X C' R4 h
- TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
/ E3 Z$ n& }1 d8 w9 D4 | - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
3 L+ ?7 d; `$ t, b - TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;" t0 N \% ?1 v( z+ }
- TIM_OCInitStructure.TIM_Pulse = 0; 6 }5 @2 S6 k( |2 Z- ~+ U
- TIM_OC2Init(TIM2,&TIM_OCInitStructure);
4 i, w9 h$ `8 @: m: Z0 V; C8 j9 M+ A
B2 A$ c0 {. g# m8 [2 o- TIM_CtrlPWMOutputs (TIM2,ENABLE);/ F2 y+ u/ w/ E5 P- k2 g
-
+ W, \4 x: p' A! d1 r, h" s. O - TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2
, R4 r9 ]% k* Z. H* N( P6 L( F - TIM_ARRPreloadConfig(TIM2, ENABLE); . U. [ q- M$ A) k' ^: z$ U
-
7 [3 h0 R7 t1 ?5 }# G! S - TIM_Cmd(TIM2,ENABLE);
( C: Y: @) y I5 m! s0 x& E6 D - }0 A p9 O4 a, G5 N2 H$ k1 t
复制代码 然后编写呼吸灯相关代码
. z3 |4 f/ m% ^) ~2 x+ S% F" }- ~7 q- i=0;/ s [0 ?2 A; L7 J/ a' m7 k! f9 F' t
- while(i+=5)
! M4 E* o4 D5 s1 G3 R - {) U, F/ A7 c3 B {. t
- TIM_SetCompare2(TIM2,i);
0 K! [" d& u/ @; U4 B0 v - delay_ms(10);
: p1 J- S, n0 l" L - if(i>=1000)" S# N! ]' f+ _& [8 W; m! c, i' x
- break;% G& V) z* Y/ ^8 V( _
- }
6 ?5 y n/ `! x% p7 j$ I+ X& ~# R - i=1000;
( f G6 M4 ^/ M% z - while(i-=5): @/ h# J5 z& m% a' o
- {( j9 r! y2 `. m9 n& @: x* N( X
- TIM_SetCompare2(TIM2,i);: V- U2 }! I5 n
- delay_ms(10);
9 c! T, w/ y& h5 }9 _7 ` t. G7 ^ - if(i<=0)/ x) |5 T* v) v. k8 ^
- break;( v0 v4 n; `4 ]: `1 _- }" d
- }
1 R4 x% y( z+ p) E1 |9 C# _6 n - delay_ms(1000);
2 y$ s+ e7 J5 f" M( c0 c - delay_ms(1000);
复制代码 % S& v, H+ v* B% Y6 C _: a1 x
* M. t& h2 Y+ @; ]+ q6 m写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。) M& E6 g- k: d, Q' `8 R
. B) o( I! }) s( ^% r
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:" |* J* o5 [* r/ g6 ]+ ?1 n
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下. _6 d% s3 z6 X7 t
是否是超出输出上限了?) u- P, C5 x4 e- ]$ l
系统时钟为48M,HCLK、PCLK均未分频,为48M Q) p9 e4 i$ n& B1 x* Q7 ?8 o( O+ P
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误
小白,勿喷
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg