继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。
, z5 r% c; R5 o9 Y( G* U. |) K5 S! _' l7 d: z3 [+ G6 m
大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。1 H0 k3 M9 |1 b; ]( H: [ a \
$ j% K8 t/ h" ?' h( w& n) x看原理图:
8 q* f5 B$ J) p
, E! f& e. b; ]8 J5 N k& y. }) p6 c0 y& ~
9 A& a2 h1 p! n9 ] Z2 M" D) n$ {$ D `
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。
# H5 @( Q0 w4 a6 P5 d0 P9 O2 x B* ~5 P E2 ?& C
6 l9 k9 y7 S: h' y5 E
新建工程目录如图,并添加相应标准库文件
( D$ v3 h" T) v6 H7 t$ `$ L9 p
6 J: X0 F+ e* C5 b- J) C* V. u
. b, r# C8 k. T
" \5 }+ G" Q0 z
6 h4 A$ E: J) Z B- N' b选择型号,建立工程( z7 [! e, u5 H9 R6 F; |
& s/ E, \) ~; P. t$ h/ ?* w* @
编写初始化代码如下:
9 f, F+ G& \8 @& B" p
, w- G S" \" u# M' d- void TIM_Init(void)* J, c, B/ p& i" ~
- {
' z" x) Z( M- |/ d! q2 m - GPIO_InitTypeDef GPIO_InitStructure;* P/ ~( e+ Z( y- u6 z* e
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; C* T3 T5 J8 o3 W6 J. n
- TIM_OCInitTypeDef TIM_OCInitStructure;
, G6 @1 y: b0 p" z; ^ - * a: ~0 j7 z: T
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
' L7 x) Q: q% B8 r. p0 R& i - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
7 K, }' Y- u% c1 E8 E -
1 V2 ?* K# R: }3 h" x; y - GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;7 q* [6 y9 a, |) g1 P
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
# c$ S. R) X& q8 U - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5 X1 b* {& _6 ] - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;9 o6 H) E9 I" r* d& O6 ^* ?
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;) `3 I$ y" M- O* ]3 ^6 Q
- GPIO_Init(GPIOB,&GPIO_InitStructure);
8 c2 z8 W3 v+ Q& F - & [8 {' i7 [" k3 G( b% }
- GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);
& B5 c- d, N6 g1 e - 5 {& v. [ \5 U3 ^8 t3 U' p
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;* r4 h7 \8 U+ p: k: L
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;) U' z( ]5 O; j) I$ n3 m
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;$ C: b. R) N$ g( a
- TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;5 D0 o$ J5 m: @- D/ T
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);+ N7 j, t1 {- ^; _
-
$ r" d; P$ c; f - TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
* V/ J7 ]0 B) [. S! O( b9 L - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;$ `; N$ T2 p$ T! H
- TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
4 b, _ }/ [7 J! C - TIM_OCInitStructure.TIM_Pulse = 0;
: ]2 ~- _3 O. `2 W- \1 |+ B8 y - TIM_OC2Init(TIM2,&TIM_OCInitStructure);
- ?% H5 E5 a( B0 e
/ T1 N) ?) Q: w4 q- TIM_CtrlPWMOutputs (TIM2,ENABLE);* D% ^. N, }+ `
- $ U7 A @1 e. A: O7 }
- TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH2
+ X% c& Z) X7 b$ B8 r! j - TIM_ARRPreloadConfig(TIM2, ENABLE);
1 V3 T' J) q0 u* L& b6 H# ] - 4 X& f) |8 G6 S2 B7 F8 Q
- TIM_Cmd(TIM2,ENABLE);
0 G! Z7 K9 _: H3 D - }& h7 ~/ X* k/ p- Y2 w
复制代码 然后编写呼吸灯相关代码
8 ?4 l/ v0 [7 F0 @7 I- i=0;
7 n/ X5 z4 f; D/ o( ^3 J- o - while(i+=5)
8 {) \$ l" F; F- ` - {4 h" X" X: Q; Y: u4 w
- TIM_SetCompare2(TIM2,i);
6 j+ y& h6 I$ o* v k/ k& D4 ?7 _ - delay_ms(10);8 T4 ?, c; v& q7 J' Q6 ?6 f
- if(i>=1000)- }+ ~ B; N" P* d! U, Q. Y& h3 K
- break;% R0 a- E) G$ g& |& N" m
- }
" x! g& S" B& u9 v) k6 Y - i=1000; [; z. A4 e0 v$ ]: ?' p9 ^
- while(i-=5)
# W9 r& h" s& o7 Q7 W$ [: ^ - {
! M3 z( V7 M* S) d9 F3 V# R0 D - TIM_SetCompare2(TIM2,i);
, E O5 ^( @0 z3 J - delay_ms(10);' x7 ?, d0 i3 [. G# x, m
- if(i<=0)
# e6 i# X' G6 a4 o# _ - break;& }6 | N' |% O$ \
- }
* P5 b7 c. p5 |/ y8 ~ - delay_ms(1000);
. }! V" E- c6 [ - delay_ms(1000);
复制代码
# K: x: s4 {/ [2 m) m8 P0 {
{( |4 X$ r0 ~% F( T8 O. @1 u; W
写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。# {& v3 `6 C7 Z; T
: u: G2 _% e9 v4 I& u' p+ u
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:- `3 J0 z5 Y, h9 m" S
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下( X* s/ f" k$ n& O% t8 ]# Z9 L
是否是超出输出上限了?" r. g+ F6 e# u) V6 J
系统时钟为48M,HCLK、PCLK均未分频,为48M, g' l6 o/ V0 P# Y" N& K: v! w% y' b7 L
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误+ w ~ x+ f0 z6 X" x* K6 W
小白,勿喷
) P9 w8 r% D. Y8 D* j
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg