|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸 , R# M$ [5 G- J: _" U- g) Z
7 o5 M4 U- T- L2 \2 Q0 K# K9 P1 I; H# L: P# ~% F. n( M3 h
3 ?7 v$ ^4 h0 ^
1相关简介
% V3 Y% F m% S) `7 w0 n9 o9 e) ?9 b9 \; [' y
本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。! ^+ H) A) n6 K. `9 R
DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请
1 G6 F' b5 \6 u' Y* R 求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。( e; O. E, }3 W4 p: Z) M
DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。9 {( D+ h6 O* T
2硬件设计) _7 U+ S; M' w7 n, \+ V6 u
( y3 P4 \3 N1 X
下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。
+ O8 F$ L/ R0 L5 `
. s% P8 D" w! J, C; ^
0 `- M) L+ U9 G& \! n' \7 R0 n
图 1+ \) f+ ]2 I! p
RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。, t7 w% ~- x2 i+ `
3软件设计& _5 e' b. q$ u& M: T4 L
' z1 }5 e( k# `. T 本次软件,将完触摸一次按键,打印一次累计按键次数的现象。; X% p, f# Y% c v1 ]
) q' P0 ?$ `3 U9 ?5 A5 y( n
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
6 F4 K/ w7 g N* F, C 要使用外部中断,就需要一下几个流程:6 l- T* z: E( N5 A/ O
! i9 u. i2 ]; E
(1)配置要使用的 IO 口。) m' H' s2 r* g% ^
GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。
( n% H8 d1 ~6 f (2)注册中断回调函数。( i4 ]" G" b [
GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);
/ b& O1 ~0 \* s" H$ s6 | 这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
3 h* G8 _) C; Q7 [! v& x5 V7 B, d (3)使能外部中断。4 ]6 `7 ]( \4 D* G+ b2 P& u C
GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );
; Y6 h: Y8 I9 S1 H: X1 l2 ] g! v6 }1 v1 x' _
完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数5 n9 H% [3 w$ ]) d! N; W" P
3 M/ s1 g: y0 R6 |6 G button1_int_handler 之中。
# i/ [. ^* i4 }* h( O: }/ O void button1_int_handler(void)
3 h+ F$ `) A% F# ]& o1 P% O
4 M2 ]% z4 [- x5 |/ R7 P {
+ T- f f/ h- @ v2 i' y1 R static unsigned char button_count=0; button_count++;' ~( C# p& X! B9 S
printf_string("\r\n Number of key:"); printf_byte(button_count);: L, y- b' R* e/ e* S) }! l: V* ^
}
0 H4 K0 Y7 l7 v
- Q0 P( E+ s1 P7 E 在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量% G- s E1 }' |. G
5 B# S3 D6 v4 E7 h2 M4 s, k. k button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。; z: x: F: k3 n; {4 D
4实验现象
) f0 g% r$ R' i$ K. q9 {& e* ~+ c: a s1 J) h+ J. P3 U' ]4 @
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
j% r7 n! k1 D5 j* D
& e! x7 J% C) N+ I* z: `+ A8 J$ @6 S (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。2 T7 o: k/ g' u5 B" P/ s- [
8 C/ g$ D" a6 D; P- ?6 a( G8 E (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。( v2 U ~2 a' Y1 x5 D# ~/ e
(3)点击打开串口。, u f. Z5 m% R
6 j4 a/ a* m8 U6 r0 N" ~* Q. y5 W- A
" ]5 I. @! Y# m9 h2 u% z
图 2
0 h- N' d8 s; V1 p) ?6 c& w 配置完串口之后,打开我们提供的代码。) A2 @& I5 I0 a$ n7 M1 x: L( d
( x" b T! E6 g6 E& m (1)点击仿真按键。6 @6 c/ u7 W# v$ D c5 d$ G
* {' G7 F7 l" R7 w7 I% a
& M& B1 C5 a2 L* k 图 3
* k' R# |& m* F# B* I( X r (2)点击运行代码。; p, t% z' z" G. n9 b3 [- s2 b
" A. w _% r+ L5 _
+ u9 K& N; @+ t0 a) |9 ~! h5 e5 k 图 41 c* W2 g8 G6 ~# F2 ?* y% u0 U; C$ H
完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。
6 L# ~5 ~$ p1 z' M% y; d
h$ A3 ~8 g% u& a( D6 P$ O
3 v$ G5 U) m* K6 ]
图 5
9 @6 R2 d$ v- r
- L: }3 h) m+ S a0 E
8 P0 I( `* E) P) I! Y7 ~
1 {* p4 g$ I) G7 P: A+ d文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
) ]' l9 Y2 C8 p/ [' _/ I
) J9 X8 n) l: P& L7 t
|
|