|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸
. F b' L8 c) F, V9 ?: A
& L( b) {# l' G6 z! ~7 i8 ]' k4 p1 i' ?3 E
, g7 g9 q% U: G% e/ p8 Q 1相关简介
$ n- d4 d* }1 K: A/ h6 O- G
8 X3 C, C/ e: Q: d 本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
/ _# R& U( z5 W! G5 ~' j: ?0 V DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请: `1 D1 ]2 ^: u+ u7 y: H
求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。, e1 S2 B- |" F* X/ ]* V) O
DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。% a; i- ]! b1 y1 S
2硬件设计
8 J! Y$ d2 o' n1 O2 M! {4 {4 @5 V" {& y
下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。8 e3 w/ U+ B" L, B
+ r4 v2 _, K; z4 i+ L
' g+ k! W- B( F1 s2 W 图 1
/ L* h+ q6 R2 j. p; `2 D2 o RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。/ ?4 o( e6 q9 a) W
3软件设计8 V1 h1 x, e: w [4 U6 h
( H% s: x0 K. A6 H# I
本次软件,将完触摸一次按键,打印一次累计按键次数的现象。
2 H1 y8 h1 ?. v. P) E$ j( [0 w3 [: D9 V s5 c8 x5 ^7 z
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
/ Z; }& w$ s( @ z5 m; k# X 要使用外部中断,就需要一下几个流程:
T/ a0 K, g. N* m$ ^, X( V+ S* F. B4 \7 V' ]
(1)配置要使用的 IO 口。. \+ S/ T; h; ?. F8 G* D0 o: Q! t
GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。
# f8 ?; S, j1 Q2 } (2)注册中断回调函数。
3 E5 a8 \6 ?6 Z0 U# D) N GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);
8 \ e8 u5 F8 k5 s9 ^ 这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
2 F/ U1 q4 K0 Y! \, D4 i (3)使能外部中断。
7 H" | v. }/ k& w4 d GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );$ Q8 E' ]) s! }1 L$ V; y
0 M; Y; O+ e( U" b: h- j 完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
! }. d9 L: k# ~6 F6 @+ a# n9 r/ O$ E R; b h, c. ~
button1_int_handler 之中。% K$ @' O& P; o- O6 ]! t% ^+ H
void button1_int_handler(void)( u& |6 |7 }" P8 G# v7 ~$ D, k( ]5 K
1 R0 L6 W: g" Z3 i7 K {
* Q, [8 g/ v& |" O' T- e static unsigned char button_count=0; button_count++;
- O. e3 k3 Q; N/ y5 v4 o; k% { printf_string("\r\n Number of key:"); printf_byte(button_count);
: W1 F$ g) ]2 F: J* ^9 i% C }( N+ M7 |+ }) J; l2 N
" Z; ?9 r; }1 @: ^# B! L' \
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量
9 d9 m/ S% i$ O5 {# E$ t, `7 @; }
button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。* |& i3 g- v0 v( h( E
4实验现象4 M# O% y& d9 ?- y9 i U
/ C. c) q! j$ Y, s: G
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。9 _& H! K' R: x: V6 ]4 |) z
" _6 [5 j- B/ A
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。: R1 z% Z4 K' N, J# J3 b) h
2 J; n* d$ p$ ]& d
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
& T4 B z" k2 t (3)点击打开串口。
. c: X& w3 f2 d
& X2 A" q4 t4 w, Y- N! p
: d# b! y& t& X. p( n6 S 图 2' k2 y3 p! C4 \6 [6 o7 D
配置完串口之后,打开我们提供的代码。
; l# r+ R' t1 Q9 M. K n( ?9 J3 {
5 e, Y7 d$ L7 q4 e' m8 s" d (1)点击仿真按键。+ I/ L/ u1 Q/ v0 h5 v) ^& s; c8 z
* k$ J' Y" [9 H# o4 }+ J
3 x4 }+ ?- ]- m9 L& Q
图 3* i% G7 q6 B. c( f$ m# H- Y
(2)点击运行代码。
3 H) A+ U* R4 T+ {, D" \9 w% `/ T# a; c) V
1 s( Y" t2 I) ?5 o$ V
图 4
( |: V! Q+ d" f 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。7 c* V' B8 S( D( }
2 H9 _: L' V& @7 M) Z9 R" C
0 X+ ~6 E' A' k x7 E) Z 图 5
( } \( f' W# i2 Q9 s6 Q- L$ c: z a# w9 B
# }! j1 ^( B. _9 G% m* u" p/ g+ H; n6 Z. g
文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
6 F2 a5 U& n+ B
9 O- A; ~- Y I! R |
|