继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。" y, y$ s# q- i+ z6 v: c' d
& C6 a* q, A" c
大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。* e, v- u/ U: L# y3 C% e* |3 u @
: x; d% T& |, b
看原理图:
" _& w" t a4 e6 k! p! V
0 U: @/ A+ \! L5 x# \/ a- V
% F' m. ^ N. J4 P8 N
3 ]! A, ~) ~& S# S* {8 ~
* p8 a2 P# s) p; J4 K) |$ b
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。
$ T7 }' _$ ^: x5 f/ o
3 f& A* j' M& Z: A ^
- K& i9 i! L% H新建工程目录如图,并添加相应标准库文件 g; c5 t. a, O7 e1 j
5 c/ n% `) }. q) T3 \! ?- _
/ k3 ]4 ?* R4 J# s0 o
) }3 x1 N4 Q8 ~5 ~! h( _. q; C; _+ Q4 u7 K' v/ K: V8 F
选择型号,建立工程: U! J' W% a ^4 f
6 J5 J0 i/ N: q K
编写初始化代码如下:
1 d2 h) v( s4 d. R3 I5 S; _
, i, H$ `% K$ D- void TIM_Init(void)1 r& j# ^- [2 L1 k2 v
- {
, v1 @+ F3 O; D. n8 y% m& ` - GPIO_InitTypeDef GPIO_InitStructure;
3 F8 R( O' ]% P! ?7 T- ~1 j - TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
' m5 }. o U$ S" Q( ?* q& Y - TIM_OCInitTypeDef TIM_OCInitStructure; r7 z e, J. X) h9 l
-
2 D/ k: v/ o% X! r, U - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);0 \% i2 U- ? y! x
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);) u; ~; q: N: N0 a l: r" y8 r/ S
- s2 X8 ], t0 k" w/ f+ @1 E$ w
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
! Y+ h/ I' z$ q* [& D4 b - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;4 H5 S. I" X I8 ]% P Z& J5 L/ y8 p2 A
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
' O4 z1 S) z/ {2 O: _. u - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
) M& i9 j0 {5 T - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;. O+ @- u7 e" Y2 ] M. v
- GPIO_Init(GPIOB,&GPIO_InitStructure);
$ z _9 d& R: q+ L -
$ z3 O0 P( O5 M# e9 r - GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);5 t$ _0 a! `' H; d+ z" i9 g
- 8 Q( o8 K, B! I' l( j- n4 F
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
q* f+ ^+ |7 }1 A- b% C# X8 u; i7 Q' F - TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;' r& V0 z0 h `/ U: j) e0 C8 ~
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;2 u4 i* S: f7 ^' L
- TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;
1 }! ^; m0 h9 u6 b - TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);5 Y: d% c+ c. `* S" V; B! | o
-
( k% v K+ O: y& x5 ] - TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
; g7 V( g2 G0 r3 \" v3 n2 t6 u3 J - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
! V' S; H5 H- r/ h - TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
& e) i1 X4 ]7 S. k, k8 d' M* u - TIM_OCInitStructure.TIM_Pulse = 0; ; Q4 h4 r5 z: h1 G# K4 a
- TIM_OC2Init(TIM2,&TIM_OCInitStructure);
: x, w8 W+ w7 ]2 m4 [ - # g- V0 `3 n7 x3 h7 }; A( U& A/ ~
- TIM_CtrlPWMOutputs (TIM2,ENABLE);( Q9 q& f/ s4 H0 w
-
8 L' C/ b, E7 t, E - TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2: a4 n* U6 Z# G* y
- TIM_ARRPreloadConfig(TIM2, ENABLE);
" T5 n# p$ h8 P: z -
8 J+ r2 W8 j3 g; G- o; t- E - TIM_Cmd(TIM2,ENABLE);1 ]3 @+ ]" s, [) G: {5 `
- }" a% X, z$ f1 H
复制代码 然后编写呼吸灯相关代码5 M. V( W) ]3 ^3 {9 T
- i=0;. ~7 U7 V# D# J$ x# p
- while(i+=5)0 A: }/ K! ~# ]0 j
- {
) G1 Z* q3 W: Q& y m - TIM_SetCompare2(TIM2,i);
4 f: ^/ q5 d7 U1 d, C) G% | - delay_ms(10);# B3 E" W* @. u0 S2 V3 N: h
- if(i>=1000)- R6 q! o& k6 f! E7 W! d3 [* w9 d
- break;. j" `( N; L0 M" T4 E, f
- }
' w( m9 W( K8 h4 W' B5 f" m - i=1000;1 b& N# y% Z5 P% x
- while(i-=5)) T, @/ ]& L) ~& ^& u) `* _
- {
% {) U6 g* s, s O4 [& ~ - TIM_SetCompare2(TIM2,i);4 u0 ~$ P C4 V2 j
- delay_ms(10);
! X! P* `+ g5 _; b! v - if(i<=0)
9 f: ~* w: t6 A- h. @/ S, l3 h5 N - break;
4 _0 S l) J, b0 E - }
# l# d9 s, r9 } - delay_ms(1000);6 l& c6 n3 x0 C! {
- delay_ms(1000);
复制代码
& D* [6 @. N% K8 y& m
3 Z4 r+ E4 I% y* M8 Y写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。
! Y1 R6 U; D" ^( I/ R1 I
2 M$ d# [" V3 V" R
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:( H( q3 x c& \" F
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下
是否是超出输出上限了?
系统时钟为48M,HCLK、PCLK均未分频,为48M) d- k5 F: p) b
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误& A. e( }+ I( U1 ] Q
小白,勿喷
( t8 T* X9 r U' X
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg