|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸
/ e% u% W. b- G7 d# G4 ^6 w! M8 g n* l o
# e& e# o, O# w j& p: t# N8 K, L4 I' m: ^! K" {# a
1相关简介
$ M K" j4 w7 B- { j! n6 x8 k2 W( Y
3 K+ T6 [! P0 ?6 ^6 j! K! C 本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。- b9 X7 [( s! m% z# c J
DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请
e, L8 p9 E2 [6 Q 求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。
$ i5 I0 N8 X2 f, |0 z8 \7 _ DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。
% ?8 R' G& u* `; y3 f 2硬件设计/ K3 E6 b- K" ]8 l
( u5 [" Y9 r/ ?
下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。
# u, j8 n; A7 k* I
8 l- [& p( h, D& j2 V
3 z- _2 D) Q* K 图 1/ l, S2 ^ Y9 g* |2 }5 l+ Q& L" e# J
RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。
$ W. y/ `/ z) }; d7 z 3软件设计
, X, ]0 e5 _" f% \: } }" l) g9 M Z+ |4 n- b- U# t: e: w' i, x8 I' p' t) Q
本次软件,将完触摸一次按键,打印一次累计按键次数的现象。
0 ?$ e! H! ?/ t U4 Q3 H# S; \1 E$ Y* W d
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
' s2 f+ B* P2 q+ _& `+ r% C2 D 要使用外部中断,就需要一下几个流程:
$ i: U+ X$ q9 n' N" R& V- `. O! A/ j
(1)配置要使用的 IO 口。8 Y' r. A1 @ x v# Q
GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。0 X3 w0 u i4 D2 A
(2)注册中断回调函数。
4 H/ n, X: \$ s* U4 ^2 _ GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);$ p* ^$ ~* S0 n/ M
这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
. {8 c# Z$ {# X' s, H (3)使能外部中断。
/ N" R: V6 ?. ?) ~ GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );: x7 P7 \( A5 P, V3 Y* H
( p$ a6 r; x5 b6 d 完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
/ i, [) `" N+ P/ I" _1 x }6 l& w+ K, e7 C- \+ Y- `( x& h0 v
button1_int_handler 之中。) ^% @0 M3 e, F6 x3 y" g3 c$ R# y9 ^0 }
void button1_int_handler(void). m T& W; d6 m! w& p
1 O1 f/ z+ |$ u* `: @ S {
' f3 o0 \* Y' w# e5 g8 e static unsigned char button_count=0; button_count++;
& r) o, J, G/ e$ D printf_string("\r\n Number of key:"); printf_byte(button_count);
7 d& g6 Z2 y0 b8 Y O" c# @ }3 b* S4 @3 k3 X! }
8 I8 x4 {' k' x% J
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量" k! I7 K; s: t- ~( m$ B+ M9 a2 r
9 o4 t9 e j) W button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。) W H0 i; t' R9 \) N: n2 u
4实验现象$ f; Q z w! ]6 Q, q
/ m, w: r4 ?5 p' j& H1 b6 L0 A/ A
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。8 d1 ] | P% X$ F9 h: L# p
5 b+ r8 U% v7 n1 g7 m (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
8 D1 }1 F7 C2 e8 `' ^
' e; g9 b* ~5 `8 B( g9 @ (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。2 `, u0 o; I3 g8 t$ S3 y
(3)点击打开串口。
& C6 \7 ] q2 p
/ w8 J- Q3 q/ m* `% ~
) F: X# N) O% @* u% _3 D
图 2 D8 c. x1 E. G9 A1 N$ Z+ E7 S8 {/ t
配置完串口之后,打开我们提供的代码。
! b& x1 I' P% O4 P& S1 b+ m. Y/ \& w" s/ g' P
(1)点击仿真按键。
' X) O, w! D% x1 O
1 r2 X' T& ^: b9 ~: J5 h
4 R! ?; |. o- L% L+ {2 v* z4 L7 D3 A 图 3 I; m2 [) E% c9 j4 O
(2)点击运行代码。# f: G# l- H' I( G: ?0 s* |& W
2 S% B7 p3 m* Y( e4 i* `
. o9 `1 B; s1 m
图 4
3 M7 d& u3 h, t( |# L$ ]6 b 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。2 y/ e, v0 V F% C- j
) `6 T. _. l+ a* w
: D5 _0 L8 H0 B$ o/ o9 Q
图 5
5 g+ @; v5 L* ?* w8 Q$ M& ^8 a8 w; _+ ^1 U
X4 h$ L/ }0 c4 L9 Z Q- t, h% b
0 n: j7 e" l! r
文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
1 w" m0 c5 u3 n7 ~% A: ]
) O% d1 T' e: d# R
|
|