|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸 : K2 o+ K" }' ]* L, x
5 Q' \ f8 F* ?) I) p7 }
' H" t* s4 s% q$ B
' R# S$ @) V' Z( ?! G6 {! j 1相关简介
8 v4 ]0 S" \# A0 i1 D+ O/ T; a- X/ a; ? Y8 ~4 t/ X4 _: M
本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。" j {8 n$ T) O+ p( ~5 v' Q( T
DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请+ b7 N. d. {% N4 y/ f. j
求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。
7 d: t: {3 P8 x6 p DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。
' P( v/ u, [; }3 ~ 2硬件设计' ]; R" y: }: G$ [
' b& a( r3 T: p, c' q7 B3 C5 p 下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。
P1 g; s' U2 D% a7 C
2 v, C" f: s6 z# W3 w( s6 k% o/ l- P
6 U- w1 [- \8 ?' v9 r 图 1% t. I, Y0 ]' x: g- ~$ W f4 d
RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。
2 c/ L3 h% @1 e" g( O1 o2 s 3软件设计7 L; V9 d, ^2 Z: W: j5 J6 C' W0 w
( w, p- V* l5 J8 S) K% w
本次软件,将完触摸一次按键,打印一次累计按键次数的现象。
5 U( n, I+ f& o. t0 H. Z
( C+ p8 T K7 `3 Q2 Z$ G 整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
4 F1 n H! {& k6 s+ k 要使用外部中断,就需要一下几个流程:
, p/ A2 j) k. j8 H$ V; b9 z" {! N' ~: N' z0 I0 Y0 k/ D( q
(1)配置要使用的 IO 口。
3 V* i J' ^* f1 E W Z GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。7 ]5 }) z+ m# J% e$ q$ [& T9 t
(2)注册中断回调函数。
# [+ a; Q' @0 i: u2 G; l GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);
5 w1 u+ u/ g2 X1 H) c6 ] R, K 这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
" h: B+ |5 H% [6 } (3)使能外部中断。2 v i: |. `9 x8 V0 G6 J; ?
GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );
8 \6 @" w6 |. [+ ]
2 t9 ]! k9 ~0 j2 s5 Z- v' P 完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
0 L) g; q5 I+ T" V* i' X
7 W7 q4 a R/ P1 e button1_int_handler 之中。
$ l N/ [7 s. a* B. c6 ?; e$ K void button1_int_handler(void)" d/ z9 ]- w; w9 q1 S
x l4 b- ?0 h' w: |6 R# V {# t3 J% G0 Z. c" \2 Y6 V
static unsigned char button_count=0; button_count++;
; y2 N; i) T( @, ]* P H/ `# K* s printf_string("\r\n Number of key:"); printf_byte(button_count);% v1 u a% I. }: w; N
}
( V, i! p. s' j% K, v& a) k$ w/ \# K* t7 u @: w! Y
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量
k& ~+ l# k$ i" H1 o. g6 m% F5 G9 m0 K0 K2 {+ f0 A p/ D
button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。& W. M: A8 u# @: Y
4实验现象
; C* t' |, y5 u( H1 ^+ z
1 F2 \! V4 d0 d8 w7 q. z$ ~7 { 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。2 ]0 X6 V) r7 L' Y, {/ K+ P
8 a" |5 k b9 d' ?+ g3 C' K2 u. d& W (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。2 G. o2 l8 v+ @" D. B! h& A: g
0 W$ h2 d2 g! z$ ]0 u# q' O
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
. [# T( w+ w& |( {9 R3 E (3)点击打开串口。
2 k8 S* b% F, W' R( ]& Y& _
% R5 r/ V1 F1 h5 D+ q B
+ _& a" h1 U! e
图 2" M; I. R: Z- e) n: t
配置完串口之后,打开我们提供的代码。
* n& S( r: f* E) @" H9 h9 q# G
+ C1 U. d6 ~% b4 e (1)点击仿真按键。
) `8 t1 b( ^" d$ \
# y$ w- D* W" w( b; P
( v& [/ a2 [. ~# t: L n 图 33 ~3 C/ T g0 @% L. S
(2)点击运行代码。
2 q |# \& ]* e" a `& H" Q2 t/ b7 c6 l% T6 E! E- H+ g+ q }: m8 s
! s/ Z2 f4 u* i& ?5 U7 [" M 图 4
' p( G* w) o9 |+ @ 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。
- L: f: z) s; g ]+ @6 n" j; H$ P* S$ M4 A
0 [8 N9 G' b3 _! `9 J 图 5
7 O) i+ p) Z% i/ x5 Q) A3 @5 Q. [' F6 F/ j! l! G' J# ?
# E& p4 g% ` K8 w( R0 b
$ k+ G) x* `5 o0 q0 M文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
4 ]. z4 V( S6 x: v
: a% }7 y) t) n) R) C+ D1 U |
|