|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸
( N+ [! U( D7 P I+ n7 U8 P, I2 y& S& C% i' J
' p& f% ]) z5 j2 W& i5 L( P
$ u% Z- D9 o) t: s 1相关简介' i6 L; s4 B8 o$ l X
/ N# M, h# u7 C' |8 X
本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
5 k5 Y ~9 z0 i# D6 R DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请9 P* Z1 p' l0 V, d1 v
求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。1 _, ], P8 o/ P7 e
DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。
1 t5 ~$ O `' g4 ?- I 2硬件设计
- ~ K+ o) b7 Y; e9 V6 J1 c/ d _3 e& W U/ d3 c: s
下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。3 t: R& } b9 ~. c8 H5 T$ ]2 Y
! e0 u+ `0 i U
3 u4 ?1 q6 R4 [) @ 图 1
, J: C" `) H, N3 W9 | RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。" q7 V' D8 z H1 O
3软件设计# I. E8 l8 p# T% l6 A
% M! l' T- Q: K) p7 I7 R 本次软件,将完触摸一次按键,打印一次累计按键次数的现象。7 u% y. G- L- K; I4 R, R3 E
5 R0 u' y8 w' e! ?
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
5 n) J& a( U" k0 J9 j0 j4 @4 \8 \# k 要使用外部中断,就需要一下几个流程:* U7 A2 j9 `, s# G! L
7 D$ y+ W5 e% l0 R) c
(1)配置要使用的 IO 口。# v3 V6 V+ Q2 u$ ?! D9 i
GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。8 ?6 Y4 [/ z9 G/ v) F5 G
(2)注册中断回调函数。
5 a: H( @% Y2 B& b6 q* ~3 I& g1 w GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);6 }* Z) J l/ R$ d
这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。3 v4 y9 X! ~0 a' m6 g5 I
(3)使能外部中断。/ ` a% }" S' r: ~$ p3 y
GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );
7 H8 ^/ ?7 H5 T- K8 b9 w
/ e: p& A; e" I* p7 }7 ^ 完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
/ k. V& m+ }4 b2 n: }
4 g: f. F0 Z3 h* p$ v; O+ ?# w button1_int_handler 之中。
2 M1 B6 _" H. x void button1_int_handler(void); i% v i' J9 D) ]
; ^ Z+ R- n. M( N A3 ?) c) \& n
{
% a6 t8 O; A; d1 ? Y3 C static unsigned char button_count=0; button_count++;
% J6 K# J6 p! r" V6 O! D printf_string("\r\n Number of key:"); printf_byte(button_count);7 `0 z3 U4 t# N& S
}
) Z( l/ Y0 X/ P4 H! ^6 Z) ?; J+ t4 o0 D4 Z5 o! p/ h% q, L
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量
! }; h' _9 H x2 |, k+ b
: N' o/ @2 z8 m. L# w, S" [ button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。3 {% F1 ]9 S$ ]$ T
4实验现象0 r; j! ?4 V+ G, Y ^
- f: y' g$ g7 E: m s
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。* c p9 ~; r$ h S$ z, A7 G
& A$ @; B7 |# y. k
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。9 `9 n2 o+ v6 `- |: |
% s9 R4 o# V) U5 b) I S
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。; s& L) d, c& o0 G
(3)点击打开串口。
* r. M0 P V3 f* T& b
' n' X1 [1 V" X- Z
" T' D. q! q& g3 o% M
图 2
! P, E$ t. M0 v& [3 d2 [8 t0 s 配置完串口之后,打开我们提供的代码。 B* B9 j4 f& Q0 M4 b" D
O1 v: V& M6 q. k! T, a (1)点击仿真按键。
' J& H; W; y8 {/ `2 }7 d
; _8 f0 @7 B" J U
0 h8 |9 E( h+ U6 Q' D6 M8 o+ c# t% A
图 3' }* R. z/ e+ D- J+ W; ]7 t
(2)点击运行代码。
- Z" a4 _$ u: c/ l; a) N5 ?8 i# `' A/ a# d7 E% n! d6 l
$ {( h4 s4 o$ A0 ~% }" W
图 4
; g, b* @( h& X4 Q 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。3 m( a4 j4 L- D9 k7 }
. x6 }9 P- C" n) d+ {
$ ?' ?; l- X3 O, o8 ~* P
图 5
2 `, q$ ^% c8 Y- w/ f3 _$ s1 x9 w) w5 P
9 f7 b+ ~% ]) G8 t3 B2 S* t; @6 j$ [
, x7 p4 U, f7 I& q文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
! m7 B: M6 c# b+ ~* }) s+ Y" w, O/ y& b
|
|