版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于STM32單片機(jī)開發(fā)光學(xué)指紋識(shí)別模塊(FPM10A)全教程收藏人:共同成長8882014-05-08 | 閱:25 轉(zhuǎn):0 | 來源 | 分享 基于STM32單片機(jī)開發(fā)光學(xué)指紋識(shí)別模塊(FPM10A)全教程· · 1.平臺(tái)首先我使用的是 奮斗 STM32 開發(fā)板 MINI板光學(xué)指紋識(shí)別模塊(FPM10A)2.購買指紋模塊,可以獲得三份資料1.簡要使用說明 2.使用指紋模塊的功能函數(shù) 3
2、.FPM10A用戶手冊.3.硬件搭建根據(jù)使用說明:FPM 10A使用標(biāo)準(zhǔn)的串口與外界通信,默認(rèn)的波特率為57600,可以與任何單片機(jī),ARM,DSP等帶串口的設(shè)備進(jìn)行連接,請注意電平轉(zhuǎn)換,連接電腦需要進(jìn)行電平轉(zhuǎn)換,比如MAX232電路。FPM10A光學(xué)指紋模塊共有5個(gè)管腳1 為 VCC 電源的正極接 3.6V 5.5V的電壓均可。2 為 GND 電源的負(fù)極 接地。3 為 TXD 串口的發(fā)送。4 為 RXD 串口的接收。5 為 NC 懸空
3、不需要使用。奮斗板上已經(jīng)有5V的管腳,可以直接供給指紋模塊,這里需要注意的是,指紋模塊主要通過串口進(jìn)行控制,模塊和STM32單片機(jī)連接的時(shí)候,需要進(jìn)行電平轉(zhuǎn)換, 這樣只要把這個(gè)轉(zhuǎn)接板插入STM32,接上5V的電,就可以工作了,將模塊的發(fā)送端接轉(zhuǎn)接板的接收端,接收端接轉(zhuǎn)接板的發(fā)送端。這樣,我們的硬件平臺(tái)就搭建好了!4.模塊的測試工作模塊成功上電后,指紋采集窗口會(huì)閃一下,表示自檢正常,如果不閃,請仔細(xì)檢查電源,是否接反,接錯(cuò)等。指紋模塊使用120MHZ的DSP全速工作,工作時(shí)芯片有一些熱,經(jīng)過嚴(yán)格的測試,這是沒有問題的可以放心使用,在不使用的時(shí)候可以關(guān)閉電源,以降低功耗。5.現(xiàn)在我們要進(jìn)
4、入編程環(huán)節(jié)了指紋模塊主要是通過串口進(jìn)行控制,所以這里我們需要用到單片機(jī)的串口模塊。我們需要用到兩個(gè)關(guān)鍵函數(shù)1.使用串口發(fā)送一個(gè)字節(jié)的數(shù)據(jù)2.使用串口接收一個(gè)字節(jié)的數(shù)據(jù)這里我使用的STM32單片,所以這兩個(gè)程序如下:view sourceprint?01./ 從 USART1 發(fā)送一個(gè)字節(jié)02.void USART1_SendByte(unsigned char temp)03.04. USART_SendData(USART1, temp);05. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE
5、) = RESET);06.07.08./ 從 USART1 讀取一個(gè)字節(jié)09.unsigned char USART1_ReceivByte()10.11. unsigned char recev;12. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) = RESET);13. recev = USART_ReceiveData(USART1);14. return recev;15.6.查看FPM10A用戶手冊 我們來實(shí)現(xiàn)比對一個(gè)指紋(我們這里假設(shè)
6、指紋模塊中已經(jīng)存在指紋模板)首先我們需要讓指紋模塊檢測是否有指紋輸入(也就是是否有手指放在指紋模塊上檢測)我們來看手冊上給的操作說明:我們需要發(fā)送給定的數(shù)據(jù)包給模塊,發(fā)送的數(shù)據(jù)已經(jīng)給我們了,現(xiàn)在我們參看給我們的C例程view sourceprint?01./應(yīng)答包數(shù)組02.unsigned char dat18;03.04./獲得指紋圖像05.06.unsigned char FP_Get_Img6 =0x01,0x00,0x03,0x01,0x0,0x05;07.08./協(xié)議包頭09.10.unsigned char FP_Pack
7、_Head6 = 0xEF,0x01,0xFF,0xFF,0xFF,0xFF;11.12./FINGERPRINT_獲得指紋圖像命令13.void FINGERPRINT_Cmd_Get_Img(void)14.15. unsigned char i;16.17. for(i=0;i<6;i+) /發(fā)送包頭18. USART1_SendByte(FP_Pack_Headi);19.20. for(i=0;i<6;i+) /發(fā)送命令 0x1d21. USART1_SendByte(FP
8、_Get_Imgi);22.23. for(i=0;i<12;i+)/讀回應(yīng)答信息24. dati=USART1_ReceivByte();25.說明:這個(gè)函數(shù)就是檢測是否有指紋輸入的信息,根據(jù)用戶手冊,當(dāng)確認(rèn)碼返回值為0時(shí),表示成功錄入,所以,我們可以有下面的函數(shù):view sourceprint?01./檢測指紋模塊錄入指紋情況,返回00表示錄入成功;02無手指;03錄入失敗02.unsigned char test_fig()03.04. unsigned char fig_dat;05. FINGER
9、PRINT_Cmd_Get_Img();06. Delay_ms1(20);07. fig_dat=dat9;08. return(fig_dat);09.10.11.因此,我們在主函數(shù)中可以這樣調(diào)用:12.void main13.14. if(test_fig()=0)15. 16. /do something17. 18.7.如何錄入一個(gè)新的指紋信息呢?步驟如下1.獲得指紋圖像2.檢測是否成功的按了指紋 3.將圖像轉(zhuǎn)換成特征碼存放在Buffer1中4.再次獲得指紋圖像5.將圖像轉(zhuǎn)換成特征碼存放在Buf
10、fer2中6.轉(zhuǎn)換成特征碼7.存儲(chǔ)到指定地址上同樣的,根據(jù)用戶手冊,我們可以得到以下這樣的模塊:當(dāng)調(diào)用的時(shí)候,你只要給這個(gè)函數(shù)附上兩個(gè)值就可以了,例如:unsigned char FP_add_new_user(00,01);如果你下次再次寫入這個(gè)地址,以前存儲(chǔ)的指紋模板信息將被覆蓋view sourceprint?01./添加一個(gè)新的指紋02.unsigned char FP_add_new_user(unsigned char ucH_user,unsigned char ucL_user)03.04. do05.
11、60;06. FINGERPRINT_Cmd_Get_Img(); /獲得指紋圖像07. while ( dat9!=0x0 ); /檢測是否成功的按了指紋08.09. FINGERPRINT_Cmd_Img_To_Buffer1(); /將圖像轉(zhuǎn)換成特征碼存放在Buffer1中10.11. do12. 13. FINGERPRINT_Cmd_Get_Img(); /獲得指紋圖像14. while( dat9!=0x0 );15.16. FI
12、NGERPRINT_Cmd_Img_To_Buffer2(); /將圖像轉(zhuǎn)換成特征碼存放在Buffer2中17.18. FINGERPRINT_Cmd_Reg_Model(); /轉(zhuǎn)換成特征碼19.20. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);21.22. return 0;23.24.25./存儲(chǔ)模版到特定地址26.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned&
13、#160;char ucL_Char)27.28. unsigned long temp = 0;29. unsigned char i;30.31. FP_Save_Finger5 = ucH_Char;32. FP_Save_Finger6 = ucL_Char;33.34. for(i=0;i<7;i+) /計(jì)算校驗(yàn)和35. temp = temp + FP_Save_Fingeri;36.37. FP_Save_Finger7=(temp &
14、0x00FF00) >> 8; /存放校驗(yàn)數(shù)據(jù)38. FP_Save_Finger8= temp & 0x0000FF;39.40.41. for(i=0;i<6;i+)42. USART1_SendByte(FP_Pack_Headi); /發(fā)送包頭43.44. for(i=0;i<9;i+)45. USART1_SendByte(FP_Save_Fingeri) ;/發(fā)送命令將圖像轉(zhuǎn)換成特征碼存放CHAR_buffer146.47. for(i=0;i<12;i+)48.&
15、#160;dati=USART1_ReceivByte();49.8.如何刪除一個(gè)模板?view sourceprint?01./刪除所有指紋模版02.void FINGERPRINT_Cmd_Delete_All_Model(void)03.04. unsigned char i;05.06. for(i=0;i<6;i+) /發(fā)送包頭07. USART1_SendByte(FP_Pack_Headi);08.09. for(i=0;i<6;i+) /發(fā)送命令 0x1d10. US
16、ART1_SendByte(FP_Delet_All_Modeli);11.12. for(i=0;i<12;i+)/讀回應(yīng)答信息13. dati=USART1_ReceivByte();14.9.如何獲取已經(jīng)存取的指紋模板信息?這個(gè)模塊一共可以存儲(chǔ)0999枚指紋信息view sourceprint?01./搜索全部用戶999枚02.void FINGERPRINT_Cmd_Search_Finger(void)03.04. unsigned char i;05. /發(fā)送命令搜索指紋庫06. for(i=0;
17、i<6;i+)07. 08. USART1_SendByte(FP_Pack_Headi);09. 10.11. for(i=0;i<11;i+)12. 13. USART1_SendByte(FP_Searchi);14. 15.16. for(i=0;i<16;i+)17. 18. dati=USART1_ReceivByte();19. 20.根據(jù)用戶手冊,我們可以從應(yīng)答包中得出模塊中已經(jīng)存在指紋數(shù)量的大小這樣,我們就輕松把指紋模塊搞定!下面我附上基于STM32
18、單片機(jī)光學(xué)指紋識(shí)別模塊(FPM10A)打包好的函數(shù)庫第一個(gè)是 FPM10A.cview sourceprint?001.#include "stm32f10x.h"002.#include "stm32f10x_usart.h"003.#include "misc.h"004.unsigned char dat18;005.006./FINGERPRINT通信協(xié)議定義007.unsigned char FP_Pack_Head6 = 0xEF,0x01,0xFF,0xFF,0xFF,0
19、xFF; /協(xié)議包頭008.unsigned char FP_Get_Img6 = 0x01,0x00,0x03,0x01,0x0,0x05; /獲得指紋圖像009.unsigned char FP_Templete_Num6 =0x01,0x00,0x03,0x1D,0x00,0x21 ; /獲得模版總數(shù)010.unsigned char FP_Search11=0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xA1,0x0,0xB2; /搜索指紋搜索范圍0 - 9
20、29011.unsigned char FP_Search_0_911=0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x0,0x13,0x0,0x21;/搜索0-9號(hào)指紋012.unsigned char FP_Img_To_Buffer17=0x01,0x0,0x04,0x02,0x01,0x0,0x08; /將圖像放入到BUFFER1013.unsigned char FP_Img_To_Buffer27=0x01,0x0,0x04,0x02,0x02,0x0,0x09; /將圖像放入到BU
21、FFER2014.unsigned char FP_Reg_Model6=0x01,0x0,0x03,0x05,0x0,0x09; /將BUFFER1跟BUFFER2合成特征模版015.unsigned char FP_Delet_All_Model6=0x01,0x0,0x03,0x0d,0x00,0x11; /刪除指紋模塊里所有的模版016.unsigned char FP_Save_Finger9=0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19;/將BUFFER1中的
22、特征碼存放到指定的位置017.unsigned char FP_Delete_Model10=0x01,0x00,0x07,0x0C,0x0,0x0,0x0,0x1,0x0,0x0; /刪除指定的模版018.019.020./從 USART1 發(fā)送一個(gè)字節(jié)021.void USART1_SendByte(unsigned char temp)022.023. USART_SendData(USART1, temp);024. while(USART_GetFlagStatus(USART1, USART_FLAG_
23、TXE) = RESET);025.026.027./從 USART1 讀取一個(gè)字節(jié)028.unsigned char USART1_ReceivByte()029.030. unsigned char recev;031. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) = RESET);032. recev = USART_ReceiveData(USART1);033. return recev;034.035./FINGERPRINT命令字03
24、6./FINGERPRINT_獲得指紋圖像命令037.void FINGERPRINT_Cmd_Get_Img(void)038.039. unsigned char i;040.041. for(i=0;i<6;i+) /發(fā)送包頭042. USART1_SendByte(FP_Pack_Headi);043.044. for(i=0;i<6;i+) /發(fā)送命令 0x1d045. USART1_SendByte(FP_Get_Imgi);046.047. for(i=0;i
25、<12;i+)/讀回應(yīng)答信息048. dati=USART1_ReceivByte();049.050.051./刪除所有指紋模版052.void FINGERPRINT_Cmd_Delete_All_Model(void)053.054. unsigned char i;055.056. for(i=0;i<6;i+) /發(fā)送包頭057. USART1_SendByte(FP_Pack_Headi);058.059. for(i=0;i<6;i+) /發(fā)送命令 0x1d060
26、. USART1_SendByte(FP_Delet_All_Modeli);061.062. for(i=0;i<12;i+)/讀回應(yīng)答信息063. dati=USART1_ReceivByte();064.065.066./講圖像轉(zhuǎn)換成特征碼存放在Buffer1中067.void FINGERPRINT_Cmd_Img_To_Buffer1(void)068.069. unsigned char i;070. for(i=0;i<6;i+) /發(fā)送包頭071. 072.
27、;USART1_SendByte(FP_Pack_Headi);073. 074. for(i=0;i<7;i+) /發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer1075. 076. USART1_SendByte(FP_Img_To_Buffer1i);077. 078. for(i=0;i<12;i+)/讀應(yīng)答信息079. 080. dati=USART1_ReceivByte();/把應(yīng)答數(shù)據(jù)存放到緩沖區(qū)081. 082.083.084./將圖像轉(zhuǎn)換成特征碼存
28、放在Buffer2中085.void FINGERPRINT_Cmd_Img_To_Buffer2(void)086.087. unsigned char i;088. for(i=0;i<6;i+) /發(fā)送包頭089. 090. USART1_SendByte(FP_Pack_Headi);091. 092.093. for(i=0;i<7;i+) /發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer1094. 095. USART1_Se
29、ndByte(FP_Img_To_Buffer2i);096. 097. for(i=0;i<12;i+)098. 099. dati=USART1_ReceivByte();/讀回應(yīng)答信息100. 101.102.103./將BUFFER1 跟 BUFFER2 中的特征碼合并成指紋模版104.void FINGERPRINT_Cmd_Reg_Model(void)105.106. unsigned char i;107.108. for(i=0;i<6;i+) /包頭10
30、9. 110. USART1_SendByte(FP_Pack_Headi);111. 112.113. for(i=0;i<6;i+) /命令合并指紋模版114. 115. USART1_SendByte(FP_Reg_Modeli);116. 117.118. for(i=0;i<12;i+)119. 120. dati=USART1_ReceivByte();121. 122.123.124./存儲(chǔ)模版到特定地址125.void FINGERPRI
31、NT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned charucL_Char)126.127. unsigned long temp = 0;128. unsigned char i;129.130. FP_Save_Finger5 = ucH_Char;131. FP_Save_Finger6 = ucL_Char;132.133.134. for(i=0;i<7;i+) /計(jì)算校驗(yàn)和135.
32、temp = temp + FP_Save_Fingeri;136.137. FP_Save_Finger7=(temp & 0x00FF00) >> 8; /存放校驗(yàn)數(shù)據(jù)138. FP_Save_Finger8= temp & 0x0000FF;139.140.141. for(i=0;i<6;i+)142. USART1_SendByte(FP_Pack_Headi); /發(fā)送包頭143.144. for(i=0;i<9;i+)145. USART1_SendByte(F
33、P_Save_Fingeri); /發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer1146.147. for(i=0;i<12;i+)148. dati=USART1_ReceivByte();149.150.151./獲得指紋模板數(shù)量152.void FINGERPRINT_Cmd_Get_Templete_Num(void)153.154. unsigned int i;155.156. for(i=0;i<6;i+) /包頭157. USART1_SendByt
34、e(FP_Pack_Headi);158.159. /發(fā)送命令 0x1d160. for(i=0;i<6;i+)161. USART1_SendByte(FP_Templete_Numi);162.163. for(i=0;i<12;i+)164. dati=USART1_ReceivByte();165.166.167./搜索全部用戶999枚168.void FINGERPRINT_Cmd_Search_Finger(void)169.170. unsigned char i;171.
35、60;/發(fā)送命令搜索指紋庫172. for(i=0;i<6;i+)173. 174. USART1_SendByte(FP_Pack_Headi);175. 176.177. for(i=0;i<11;i+)178. 179. USART1_SendByte(FP_Searchi);180. 181.182. for(i=0;i<16;i+)183. 184. dati=USART1_ReceivByte();185. 186.187.188./搜索用戶09
36、枚189.void FINGERPRINT_Cmd_Search_Finger_Admin(void)190.191. unsigned char i;192. for(i=0;i<6;i+) /發(fā)送命令搜索指紋庫193. 194. USART1_SendByte(FP_Pack_Headi);195. 196.197. for(i=0;i<11;i+)198. 199. USART1_SendByte(FP_Search_0_9i);200. 201.
37、202. for(i=0;i<12;i+)203. dati=USART1_ReceivByte();204.205.206./添加一個(gè)新的指紋207.unsigned char FP_add_new_user(unsigned char ucH_user,unsigned char ucL_user)208.209. do210. 211. FINGERPRINT_Cmd_Get_Img(); /獲得指紋圖像212. while ( d
38、at9!=0x0 ); /檢測是否成功的按了指紋213.214. FINGERPRINT_Cmd_Img_To_Buffer1(); /將圖像轉(zhuǎn)換成特征碼存放在Buffer1中215.216. do217. 218. FINGERPRINT_Cmd_Get_Img(); /獲得指紋圖像219. while( dat9!=0x0 );220.221. FINGERPRINT_Cmd_Img_To_Buffer2(); /將圖像轉(zhuǎn)換成特征碼存放在Buffer2中222.223.
39、;FINGERPRINT_Cmd_Reg_Model(); /轉(zhuǎn)換成特征碼224.225. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);226.227. return 0;228.第2個(gè) FPM10A.hview sourceprint?01.#ifndef _FPM10A_H02.#define _FPM10A_H03.#include <stdint.h>04.05.extern unsigned char dat18;06.07.extern void FINGERPRINT_Cmd_Get_Img();08.extern void FINGERPRINT_Cmd_Img_T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度石英砂信用保證與銷售合同
- 二零二五年度農(nóng)村自建房買賣定金合同范本3篇
- 二零二五年度房屋抵押貸款再擔(dān)保服務(wù)合同3篇
- 二零二五年度家政服務(wù)人員權(quán)益保障三方合同范本3篇
- 二零二五年度教師職務(wù)晉升勞動(dòng)合同范本3篇
- 二零二五年度文化創(chuàng)意門面租賃與藝術(shù)展覽合作合同3篇
- 2025年度海上油輪保險(xiǎn)合同范本發(fā)布3篇
- 海南衛(wèi)生健康職業(yè)學(xué)院《西醫(yī)外科學(xué)醫(yī)學(xué)免疫學(xué)與病原生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 螃蟹涂鴉課程設(shè)計(jì)
- 二零二五年度二手房購置糾紛調(diào)解服務(wù)合同
- 淺談如何提高小學(xué)生計(jì)算能力講座課件
- 配電網(wǎng)技術(shù)標(biāo)準(zhǔn)(施工驗(yàn)收分冊)
- 生育服務(wù)證辦理承諾書
- IQC進(jìn)料檢驗(yàn)報(bào)表
- 《零基礎(chǔ)學(xué)前端(HTML+CSS+JS)課件》
- 紀(jì)檢監(jiān)察知識(shí)題庫―案例分析(20題)
- 機(jī)械通氣治療流程
- 【薦】八旗制度-課件(精心整理)
- 器樂專業(yè)課教學(xué)大綱(古箏)
- (完整版)EORTC生命質(zhì)量測定量表QLQ-C30(V3.0)
- 超級充電綜合站及配套設(shè)施建設(shè)項(xiàng)目可行性研究報(bào)告
評論
0/150
提交評論