|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
——疯壳·开发板系列 定时器实验教程
2 |9 L8 b9 s5 _2 R; a$ b& K8 V( I" K
- Z9 _7 N+ j( z: k. G8 S) S
. J4 z7 c# [4 b% N# t L* B; p
. B" I) w# i: w$ o
图18 G: ~$ j" I3 S
( r5 N9 z7 T' J! o1 _# Z1 t& M8 x9 p2 E- h) t( [: j
8LED硬件电路5 U) {+ w9 y' y+ [
8 a$ [) g. S+ j3 s' h. S 板子中有一个可控LED,接在DA14580的P24引脚,LED串联1K的限流电阻,如下图所示:, I( c1 e R& l! }* |
' x0 m8 p/ Z7 q. e2 t: F
9 d# z* }8 C: x I( g! r
图2
' @; f$ r. P# s9 J. ~+ R
7 J$ b- a3 o5 G5 V" n4 }: h 第二节 Timer寄存器
* W! n4 F- f4 L
5 e0 A" d# t( Q( w 2.1 Timer介绍
8 M7 r, a% c2 S. Y+ H. f1 w1 ^7 ~; z" H
软件定时器模块包含两个定时器模块,它们可以通过软件控制、编程并用于各种任务。
2 _, i7 ^5 t* p. G/ H3 l 2.1.1 Timer0+ R+ }7 p: J+ }3 V5 P* o
9 @2 b% D: M) C5 d 定时器0有16位的通用定时器;可以产生两路脉宽调制信号;可编程的输出频率;可编程的占空比;可编程的软件中断。3 `: n& e" E @) |
2.1.2 Timer2" `2 I9 E+ q- s" _
7 w4 ^' v* ?- L/ F 定时器2有14位的通用定时器;可以产生3路脉宽调制信号;输入时钟频率为16MHz;可编程的输入频率;占空比可调;用于白色LED的亮度控制。
% T1 Q" ]% U" E/ D/ @
* z4 | q* a) R5 ^1 U& B 2.2 寄存器介绍
4 [+ a& c8 q1 i* d 2.2.1 定时器0控制寄存器5 } b4 |+ u7 a6 \" O+ Z; Q
' e$ a9 p+ j( L6 K2 x- h( |6 W
( l- t! O$ x& E6 a) S6 |
图3! I O8 i( d" Z2 k( l
15:4位:保留不使用;
p% u0 F' z; d# ]: b* x- t 3位:PWM模式选择,’0’表示PWM信号为高时输出’1’,’1’表示PWM信号为高时输出快时钟信号的二分频,则输出频率范围为1~8MHz;. @4 Y( U# B0 X! e& ^
2位:定时器0的时钟分频,为’1’使用选择的时钟源频率,为’0’使用选择的时钟源进行10分频,注意这个值适用于计数寄存器;
, z( ?' d+ `2 M+ z8 N 1位:时钟源选择,’1’使用快时钟(16、8、4、2MHz),’0’使用慢时钟(32KHz);
% t' h. `$ p9 [0 @ 0位:定时器0控制位,’0’表示定时器0关闭并处于复位状态,’1’定时器0运行。1 l/ O4 g [! Z
2 K5 @( g5 ?' H9 I8 ^# O- ]8 [
2.2.2 定时器0计数控制寄存器
* ]. _* W' b. P2 a2 d7 V5 @0 E9 i% a- o% X$ f( \- @
4 ]2 b# E# q, c& P* t
图4
1 k7 }0 g! f8 _* | 定时器0计数重新装载值,如果读取该寄存器则返回当前计数器的值。) p6 G. |( x" \' k j# ^8 a
2.2.3 定时器0高电平重新装载值
; j" K" c+ E& J7 D; a- A# `+ k+ w9 K1 u% i. L
: H6 y8 G! g- n- R 图5
, h/ y) ]4 k% H: M, t 定时器0高电平重新装载值,如果读取该寄存器则返回定时器0的计数值。
/ I" X: l/ m8 ^* k' V. D ? 2.2.4 定时器0低电平重新装载值
9 F0 t" T6 `) m8 o5 n& z& P2 @" `/ v
; l. \* D7 x& Q Q H9 H" A7 Y 图6
- |1 @; d" _+ L 定时器0低电平重新装载值,如果读取该寄存器则返回定时器0的计数值。" [* B9 a; m7 g$ n( k
2.2.5 PWM2占空比: R( h; D1 s! q9 w+ H, k- d" e
3 V' z. _5 F9 Z- s+ L: {
) c% c2 ?) J# z5 O) ?6 F 图7
7 x# f8 w" G& n( W- f9 p: L PWM2信号的占空比。( `% o, [. l4 i8 f
2.2.6 PWM3占空比/ W& |( H$ k) n$ u R3 l7 I+ D
; Z' l7 x! r+ `: A V1 K
' `: P% i* ~% |6 @/ a
图84 A \2 a% X# W4 E. S
PWM3信号的占空比。9 G7 R8 R; N9 y
2.2.7 PWM4占空比
0 ?% Y: M# L0 L3 Z& n0 {* V$ a2 L" ^$ c5 @8 m- g: G8 e! m
2 q$ @9 b' q0 w+ r 图98 h' s4 s' o' F1 e: K1 ?! t, X
PWM4信号的占空比。
1 S/ H# B4 h& i# o8 G! } 2.2.8 PWM2,3,4的频率
) x1 v1 `5 T8 V% u+ X6 w4 `1 b2 p' g4 j0 q( E
: x, ^$ ~* m0 R4 M, e7 m* Z9 c8 T6 i
图10
1 U; j9 c( i6 e0 N9 N' {$ A0 q PWM2、3、4信号的频率,三个信号频率相同。3 j" Q% p9 [- P# y
8 g1 Y0 ]; s. c, ~
2.2.9 PWM2,3,4控制寄存器+ L! {; a3 f% S/ }+ y3 `5 B
# G1 `; I; `, S& w
5 }# ~! t p) [ 图11
9 B9 ^* ~. G8 S' f 2位:硬件暂停使能,为’1’则硬件可以停止PWM2、3、4。
; Q. H0 h3 X& J( U6 V0 m L 1位:软件暂停使能,为’1’则PWM2、3、4暂停。
" Y- b. Y6 q t 0位:PWM信号使能,为’1’则PWM2、3、4使能。1 J* O, v" G7 ?/ e) j
1 M+ J' z' p4 s* N2 y 2.3 寄存器配置讲解
, U9 A0 n; e( M1 G$ c1 v- p #define CLK_PER_REG (* ( volatile uint16*)0x50000004)
5 ^7 b' [, M; R) d #define TIMER0_CTRL_REG (* ( volatile uint16*)0x50003400)
7 i' N5 K, v/ v; z #define TIMER0_ON_REG (* ( volatile uint16*)0x50003402)
, Z1 R( }- t( O$ f #define TIMER0_RELOAD_M_REG (* ( volatile uint16*)0x50003404)$ Z7 L8 Z$ j, f9 K, r/ _
#define TIMER0_RELOAD_N_REG (* ( volatile uint16*)0x50003406)
6 ], \! p" Q( H1 q" t; W #define PWM2_DUTY_CYCLE (* ( volatile uint16*)0x50003408)
4 l1 f& }+ i: ^7 r: T/ m2 s7 F #define PWM3_DUTY_CYCLE (* ( volatile uint16*)0x5000340A)$ q' d5 }& }" `! p, y
#define PWM4_DUTY_CYCLE (* ( volatile uint16*)0x5000340C)( U2 F; o7 t& `9 x* t1 a/ T
#define TRIPLE_PWM_FREQUENCY (* ( volatile uint16*)0x5000340E)7 M' Q* U4 s# L$ E
#define TRIPLE_PWM_CTRL_REG (* ( volatile uint16*)0x50003410)
: H4 S2 q* y$ c6 e8 G/ D6 R 启动Timer0模块的时钟:CLK_PER_REG |= 0x0008;
# U% H( b. ^4 V 定时器0初始化,选择高频时钟,正常PWM模式,无分频,则TIMER0_CTRL_REG = 0X0E;
3 d0 ]/ X' E N. f- s9 ~$ q 设置计数值为1000,高电平为500,低电平为200,则TIMER0_ON_REG=1000; TIMER0_RELOAD_M_REG=500; TIMER0_RELOAD_N_REG=200;
4 C: p0 [; M/ _( ^$ _2 S* m4 Y" Q! Z 开定时器中断NVIC_SetPriority (SWTIM_IRQn, 254); NVIC_EnableIRQ(SWTIM_IRQn);
3 V- p: H% s. K2 \2 j* `2 x 启动定时器TIMER0_CTRL_REG = (TIMER0_CTRL_REG|0x01);
0 a" G1 S% w" X% J: @
/ w% W; K% z! g( G7 t" Z! X& |
* O, U: B* M3 {
+ b5 a! `3 B- h! A4 N1 R! v# Y! ?6 V 第三节 定时器实验
) I0 @6 i9 H* k% t9 W! p z- Y, c8 y2 E! F8 Z5 K9 w8 D
实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。
" x8 A8 `5 V7 k 使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:* O4 |& V8 ? \" m
(1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:; [% V# v: @4 W- `
+ R7 ~3 H( J7 ]+ O, D, S
& r6 U" F- ^) U! p
图12
* F* J# [& E; T5 y' v5 j (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
1 e n9 q/ D% W- w$ e9 n9 y1 s4 z1 f: P. P% n
- _! L% w1 |2 A& R 图13 e: @, s2 b# W5 Z+ O: Z
将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
( j3 m% G# ?1 c( f7 }. x" E9 G 打开定时器实验的Keil工程timer0_general.uvproj,位于目录:0 F! n" S- ]9 b3 H" n' A
..\WT_Mobile\1.初级教程\DA14580\3_初级_定时器\projects\target_apps\peripheral_examples\timer0\timer0_general\Keil_5。如下图所示:
" \4 `! r) S+ O3 j7 N' d& c1 V
, e+ ~' u4 |; g+ \. m( J% {
* r6 a8 D4 ~1 N/ b% M" w6 \
图14: m# Z/ R; K1 F: l( A) c
使用手环调试下载线连接好Jlink,编译,点击DEBUG,然后点击全速运行,则可以看到蓝色LED闪烁,如下图所示:' s" X; J0 T, e$ X. Y# j% r( L
( W/ _8 X: K' r- ^+ R! y
! F* a# U! D! h$ S/ _9 a) y
# f/ F5 ^+ x, |, q T5 W y/ l) V/ E
+ f8 @6 y7 T5 d$ L( n0 I. Y* E 图15$ |- J7 c9 T' F
% t3 q* F; Q& h+ t3 f
- `6 r6 N" {# [9 j4 v, X3 B6 c. R+ m, B* d) G4 A5 |1 |
% ]7 {" D, B0 g0 z3 ?
文件下载请点击:
Timer教程.pdf
(750.77 KB, 下载次数: 0)
$ o3 A0 Q" @9 R; d' E
% h8 p8 c) n4 K1 t. X( I
# n' t; q) f: C* t& Q1 Y! X1 ?. C |
|