继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。
; X2 z- C5 b1 a9 B' |
, K3 Y4 }* d1 ?$ w大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。
* j4 B* o; _0 c% t' t; m3 f' a, s
看原理图:2 L+ Y$ o* \& ~8 V: i) a2 a" [
8 m# }- S3 v! }! h, a- a( z
9 {; c+ J: x3 \" J
" ^6 L. Z% @1 ^1 J8 Q8 A# Y0 f7 N Q1 h1 n7 k+ X* @
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。/ R6 b1 e% N, X# b$ C* ?
# x" M. O* Y0 a. N
, e. j+ i( w9 z E6 u6 m1 K新建工程目录如图,并添加相应标准库文件3 R. |) {* G1 X8 w* B
3 B: o' e2 W- u6 k- v/ l7 Q
" ^$ D& t6 g* ?' S _ }) ~
z* Z7 G, y( K* B; \. K( v
2 t* L3 K7 C& x选择型号,建立工程2 l, {! s. a1 z: u$ o
; S' p M" V' [3 _
编写初始化代码如下:" f. M: [- m+ G+ x" n( V
+ r: ?$ b' @4 p) j! [# {7 P
- void TIM_Init(void)
: [, e* q% t |5 ^# X- N - {
. t- b/ n4 T1 B% P0 ^3 S - GPIO_InitTypeDef GPIO_InitStructure; M1 l. k' H. i4 u
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
$ J& N8 j0 ?8 G! O( v* P - TIM_OCInitTypeDef TIM_OCInitStructure;
& A& d& d v* A+ G" S. M) M - 0 \+ h+ y8 m* P; g0 L: P
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);# j0 W/ D& d! M/ C
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);/ Y# }: \4 C: a5 V2 C' Z
-
3 J" I6 O+ |9 U" M- f - GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
7 M, ]% K) y9 y - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
- c) W5 L2 m6 o - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
x4 q; c. Y; ]" J6 \) Z - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;5 W( y' ^' @ ~7 {' t t; I
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
2 R9 i9 x# v' {) O" \; s! K9 Z6 N% h+ | - GPIO_Init(GPIOB,&GPIO_InitStructure);
% o2 E t* i2 F0 K9 v - 7 m8 m: ]: r7 I! P+ U# X8 u4 b! e
- GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);
- @# ]7 W0 u2 ~- R0 ] - ( z1 q# L2 k, Q, n4 q d- X! f- K4 G
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; a* ~) ]& h/ \, j$ U
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;' u* _4 p, z7 w
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;
7 r4 @! E6 k( ~% r u - TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;& Z4 f% I% {* {
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);8 h+ h. N( c. @3 x2 p7 y R
-
" g- I" Z$ B* T* x' ?7 d- p - TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
& H, [+ `8 x: {6 b - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
" y! y: U! i' ~ - TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;7 T+ i, ~- @& ~7 v- _6 h% K# Z
- TIM_OCInitStructure.TIM_Pulse = 0; # Z* d( j& h) Y8 V5 s: m
- TIM_OC2Init(TIM2,&TIM_OCInitStructure);. b5 n* N; B7 X: S. z6 u8 J
- 6 `$ r& q: ~* Q+ l4 C
- TIM_CtrlPWMOutputs (TIM2,ENABLE);( F, [- R* r( p, a* p( c
- 7 L8 n6 ]: j8 k$ l+ {5 q+ z; \, s
- TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2
& D, ^1 z) q( e. T3 w& J - TIM_ARRPreloadConfig(TIM2, ENABLE);
6 O; q" J8 W) }3 G0 k l5 r7 @ -
1 a0 e+ D7 l ?4 t - TIM_Cmd(TIM2,ENABLE);
, _6 N2 U" R7 ^ - }& v$ R% K: b3 g# ^- a. H' u# C
复制代码 然后编写呼吸灯相关代码9 Q# O4 v, r4 u& j) `7 e, ]
- i=0;
- t# F) N! }+ P ]0 y* F - while(i+=5)* d) Z0 J J# {3 b: J
- {+ a2 X# N, l& j0 {* O
- TIM_SetCompare2(TIM2,i);: e; v; l- {* V9 z" e8 p! N$ W
- delay_ms(10);* o$ U% Y8 ]4 j# D+ S) O
- if(i>=1000)
0 c5 }0 Z. ^2 |$ \8 S, E, i. x) X: z - break;& Z9 P; L, U6 X1 C/ `: p
- }7 i: C2 y& v" g) U
- i=1000;/ T. }9 s- `1 C& _
- while(i-=5)
; L" p6 i2 O! b: M - {8 |. F$ u+ E; f: L+ U
- TIM_SetCompare2(TIM2,i);
3 i2 _* d0 X, t- F! W - delay_ms(10);
0 d) m) c9 l' N2 P& ]& | - if(i<=0)
& r9 o; [7 v) }! ^8 r - break;
4 U7 Q, p1 y/ q! v1 o: Y - }& B3 v5 Q5 y% a! k1 N: _3 F5 U! f
- delay_ms(1000);- ~3 G( j2 p+ M+ `
- delay_ms(1000);
复制代码
$ x: H4 b" a4 e
. T" I8 y# N, g写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。
) Q! b& U# Y3 t% S! b4 _8 c, p
. c- r1 `* R) ]4 s( C! v( h4 f5 r% N
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:6 k& F. C* }! u' ^& x
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下
是否是超出输出上限了?
系统时钟为48M,HCLK、PCLK均未分频,为48M7 _' o) |! f% H; X) T2 p2 i! Z1 _. o4 z k
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误
小白,勿喷
& M, b9 l# g g! ~% C
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg