|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸 ' E4 b* h V1 _! c' s
6 l7 r' J( y# W0 X9 [0 }# e8 O! J; x; g* I8 U% M' E6 j' {
5 V/ U) J; j& m8 W! D7 g6 M! S 1相关简介
' l3 t# A( ^8 L( \
$ J6 @- Z7 h& {, Z 本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
5 c: a; [( [$ l' J+ H# G/ W DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请: ?( O: M: X/ M; [
求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。
7 j8 L5 o* v" f. l DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。6 Q+ x- i+ G5 w9 Q; _
2硬件设计
: A1 H0 ]( E5 n4 N0 ^) R
, b" R- b c; a6 c 下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。' g+ B# m" \/ E
! A( Y4 g; V- G! B% k
# h8 q' S$ Z) q" R" m 图 1
+ P1 N/ L9 L/ ^: I' y% @4 V$ B RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。0 b" D* ~ b9 n! O
3软件设计
( Y' w" U: W3 x4 p3 G1 P* K3 l' w
本次软件,将完触摸一次按键,打印一次累计按键次数的现象。
, S! ?, u* I: R' t& F8 ^1 q7 B4 ]' {" s `
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
) L& }/ N% |1 E, v+ I0 r! G 要使用外部中断,就需要一下几个流程:
4 e" t- C1 a. w( M( R' W7 T' a$ a
" } F' i2 @3 P$ V% a. S% k (1)配置要使用的 IO 口。
0 s+ A* t9 y8 R, v' o- C: L% y GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。
2 v0 L/ n* T3 e, ]: A) x) z (2)注册中断回调函数。
: b- K3 l, Z) D/ r4 X, A) V" l2 S GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);
2 L3 S( i; E# l! I2 V1 Q9 {/ U 这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
: O7 V% ~2 F$ O* Z% }( [- K- @ (3)使能外部中断。
# f* S1 o) O3 ~% _3 w4 ^2 \ GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );4 A& [$ c* ^% H
& U9 {+ }" s/ \ 完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数; J& i- R |- f# W$ e
W( W0 K+ q$ Q9 F; V: n& H* f; Y
button1_int_handler 之中。
* Z a7 l' |: M* q0 B5 u3 R void button1_int_handler(void)
7 j5 ~/ @& Q. {( {6 U+ [+ w# I( @; n0 B$ K7 \) M5 ]$ j
{
6 d" ^/ J0 R6 g1 e% x static unsigned char button_count=0; button_count++;5 M2 w: k' e1 Z: x C- l9 Q+ }1 G
printf_string("\r\n Number of key:"); printf_byte(button_count);
9 F5 _: N) ]* O }8 n8 A0 {3 ]9 S, @* ]% D
% @# [/ t* O. s+ `* a 在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量
) O9 Z3 F/ P" r- a9 C; n# h4 i% J& e7 s( o, ?% U7 X, d; D: i0 C" t+ T
button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。
! D/ ~! V3 ~: g 4实验现象
" v" g8 X) m" p& S5 G0 E1 M# \$ s0 Q" u6 f" Y$ G( _
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。- ^1 k; P5 E" b8 `$ `$ Z N
* r( ]& O1 t6 k) X
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
) I/ H8 a7 O" I& [4 x& Y5 O
- }: O' a0 H/ z (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
) S# x3 g- g' Z' T0 f7 R (3)点击打开串口。
7 J1 f1 t# J* b8 j
$ L/ A) L' l m3 R$ w
* v+ z9 F8 r) J- C" W
图 2: X$ \4 X: K/ r+ D
配置完串口之后,打开我们提供的代码。
3 |" y0 F7 `) V" D! R
( c4 n8 F/ k0 ^+ V# W) O (1)点击仿真按键。
" y8 h+ c. R. j8 }3 c, v
6 m) d' D, N/ H' U5 S/ r
) ]3 H6 R* A* `* F7 i
图 3
# A& K% q. y# c (2)点击运行代码。% y( J6 C5 a# `* T* j
* C1 X: x) s+ Z: }
% F; h% B6 T1 B0 E! `: J+ S 图 4& z. F: _, o* R* z
完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。
9 y8 J: j- P8 O- c: x( c. M% }
, d3 E% p8 [ v
% ^1 `$ Q! q* s# y o; V% t
图 5
9 r0 P! T3 n9 H0 t, g0 q: i
' e; H7 I6 P( z, R. Y l
4 N: l9 U4 T! f+ a0 ^; R1 f; w Q w) F; k$ U
文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
- K. f( X- n8 J$ |
7 j( e h. t$ V7 d$ v% c |
|