继上一次对Nucleo32-f042做了简单的介绍之后,这次,让我们来看看这款芯片的内部资源。( X5 l; g6 C+ B+ J; m& k
8 } o' D& }% j+ G3 X大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。
% J8 @; s6 }5 ]! h& ?: ?, c. h( k
% r1 l; z2 ]8 M/ F" ^5 {看原理图:
% m8 {0 b! m! \3 Z" }; O, \0 b
7 t+ t3 ]0 H" p8 y
+ e, O7 j; K, R' g% b$ R
! q3 A2 I7 `' ^# B; F8 m8 E0 W! Q
/ K& s. I3 m U# d
板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。" }/ V+ i2 r' K4 X' {6 @
# Q( U& J+ @1 a3 ]
. N* s% o2 Y( j' d2 c& N7 B. o新建工程目录如图,并添加相应标准库文件
3 K3 r; A8 \9 C( J3 @: [# d* a( i: i9 w) V: L- l$ l( j' v
* N: ^; a' A( `8 n
/ q7 _6 Z% Q+ K4 n* o
; D4 t/ j: Y$ L* P3 h6 a选择型号,建立工程 q1 B5 a# O2 V* p, F8 R7 N
\& Q4 a4 M7 [ K0 a
编写初始化代码如下: a: _$ E6 B& A- _; _: [2 n% f' z
! r3 |9 }- K% ?& ^) j P3 `- void TIM_Init(void)
# \% C( e' D" ^' a - {$ T# N: D) F) w2 v( n! \
- GPIO_InitTypeDef GPIO_InitStructure;, z. U$ X3 @2 C3 J( b; p
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
' ?+ W2 ^4 r+ D2 ]9 C( \ - TIM_OCInitTypeDef TIM_OCInitStructure;
" F6 z1 F3 v# ]3 l9 D$ ?2 C* R2 c9 K6 `; M -
: A6 b7 J1 ^% c' y - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);. ~! |; v/ Q, Z, R. t1 ~! U" ^* b
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
9 B* [8 E" P3 F+ U# q. O6 s - + S2 ? k8 S1 n% G6 G5 M
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
% i- U2 M% k, J$ ~( T - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
0 i8 p0 D5 Y0 _% t+ S - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;- b1 \) u _. i% i. R
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
* W" o5 Y! F! Y - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;1 t a0 w7 h* ~0 O! M9 `
- GPIO_Init(GPIOB,&GPIO_InitStructure);4 K" U: R! v5 ?+ a
-
a2 Q, P" V9 z5 x3 {3 r, A - GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);0 ?: _' c! y4 ~: h
-
% L, ]6 W+ T7 s6 r( p - TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;/ Z: N" g0 Q" |" i! ]
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down; _8 p3 [: G/ I! _; i
- TIM_TimeBaseInitStructure.TIM_Period = 1000-1;' V6 w; w5 p: t/ ^
- TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;: Y1 u3 I( u1 |! D) b/ }
- TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
# A4 U& c. P1 ` - 4 w5 K/ W$ z) y% B! d$ N
- TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
$ `( p1 @5 {/ w2 D: J - TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;& f J' F7 E4 o) D' q& r c6 s
- TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;' R; X2 v! H2 j# k4 C
- TIM_OCInitStructure.TIM_Pulse = 0;
' A/ }8 W9 f- X+ ]8 m' R- z - TIM_OC2Init(TIM2,&TIM_OCInitStructure);3 s& I8 w0 A: _( t9 b
- ; Y/ i! V9 i+ ? V- H+ |; M% O3 Z* F
- TIM_CtrlPWMOutputs (TIM2,ENABLE);
0 x- {' u* S# N; F, E4 @: n" w0 @ -
$ ^6 t6 k9 _; C9 K - TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //CH28 S$ p- t& c& v8 e: U
- TIM_ARRPreloadConfig(TIM2, ENABLE);
" O/ D3 g& f P, ^) o6 m( P - 7 u1 p0 M* b6 ]9 C1 i( ^! \& g
- TIM_Cmd(TIM2,ENABLE);
4 O) c. k5 P. K7 x% y& O/ u4 T c - }4 f# g5 z* k H. N; l
复制代码 然后编写呼吸灯相关代码
' e( r- t h) y# S C/ C5 t9 \- Q- i=0;6 B8 }0 ]9 L5 L: q0 ], u4 L: I: ?0 V
- while(i+=5)5 J) b- _0 T0 E/ @
- {
7 R4 O x, x! Q; ~6 L4 x9 Y+ G - TIM_SetCompare2(TIM2,i);" ?1 h# t: a5 a" k7 F" F* }/ Z8 t- }% t
- delay_ms(10);& J) ?& f# I$ K, ?
- if(i>=1000)
$ k1 N- ^+ b2 V) w6 [, R, l; T - break;
`: B6 V7 r9 K) R3 b - }0 `! T: D' Y8 o
- i=1000;
/ c1 z" d7 g8 m( F& p, |7 x - while(i-=5) h L( H' z" S2 R9 G' p( }. b
- {; e- P7 l" A0 B$ Q
- TIM_SetCompare2(TIM2,i);
' k; p6 D, i6 _4 E - delay_ms(10);" W" K3 k# j! l- K; S+ b
- if(i<=0) w" a' G4 L4 o+ P1 |
- break;1 p- ]" {7 }' X; V3 |7 Q
- }
3 N0 y% D# m+ }5 l% G8 T( g$ B' D - delay_ms(1000);- Q& U& X$ {6 j- B7 m( F
- delay_ms(1000);
复制代码
- a/ O6 Q# @4 Q
9 }) x$ `, l& r: p* \2 n$ O B& R! {
写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。. f- |" Z6 U9 H- Y
: _3 G1 ^0 p3 z& Z- `
å¼å¸ç¯.rar
(4.1 MB, 下载次数: 87)
|
麻烦问下我现在在使用STM32F042的板子,使用定制器TIM17 CH1输出5Mhz的PWM波,发现输出的波形为5.3MHZ,占空比为33%,但是输出1kHZ的就是正确的,麻烦帮忙分析下,附配置代码:
我在做使用STM32F042 定时器17通道1 输出5MHZ方波,占空比为50%时,输出的波形为5.336MHZ,占空比约为33%0 }$ {' _$ Y' G" h+ K+ y
但是输出较小频率是稳定,如2MHZ,示波器测量就正确,麻烦解答下
是否是超出输出上限了?% [0 n/ Q9 F3 i( |7 R9 ]! c
系统时钟为48M,HCLK、PCLK均未分频,为48M: k7 A* N. J* V6 g: k
附配置代码:
楼主,我下载了您的压缩包,但是编译的时候提示有27个错误
小白,勿喷
file:///C:/Users/Bling/AppData/Roaming/Tencent/QQ/Temp/H0Z@HXCF1$4A1J16%7BYL1Q1G.jpg