view source
print?
001.
#include "stm32f10x.h"
002.
#include "stm32f10x_usart.h"
003.
#include "misc.h"
004.
unsigned
char
dat[18];
005.
006.
//FINGERPRINT通信协议定义
007.
unsigned
char
FP_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};
//协议包头
008.
unsigned
char
FP_Get_Img[6] = {0x01,0x00,0x03,0x01,0x0,0x05};
//获得指纹图像
009.
unsigned
char
FP_Templete_Num[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 };
//获得模版总数
010.
unsigned
char
FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xA1,0x0,0xB2};
//搜索指纹搜索范围0 - 929
011.
unsigned
char
FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x0,0x13,0x0,0x21};
//搜索0-9号指纹
012.
unsigned
char
FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x01,0x0,0x08};
//将图像放入到BUFFER1
013.
unsigned
char
FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x02,0x0,0x09};
//将图像放入到BUFFER2
014.
unsigned
char
FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09};
//将BUFFER1跟BUFFER2合成特征模版
015.
unsigned
char
FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d,0x00,0x11};
//删除指纹模块里所有的模版
016.
unsigned
char
FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};
//将BUFFER1中的特征码存放到指定的位置
017.
unsigned
char
FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0x0,0x0,0x0,0x1,0x0,0x0};
//删除指定的模版
018.
019.
020.
//从 USART1 发送一个字节
021.
void
USART1_SendByte(unsigned
char
temp)
022.
{
023.
USART_SendData(USART1, temp);
024.
while
(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
025.
}
026.
027.
//从 USART1 读取一个字节
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命令字
036.
//FINGERPRINT_获得指纹图像命令
037.
void
FINGERPRINT_Cmd_Get_Img(
void
)
038.
{
039.
unsigned
char
i;
040.
041.
for
(i=0;i<6;i++)
//发送包头
042.
USART1_SendByte(FP_Pack_Head[i]);
043.
044.
for
(i=0;i<6;i++)
//发送命令 0x1d
045.
USART1_SendByte(FP_Get_Img[i]);
046.
047.
for
(i=0;i<12;i++)
//读回应答信息
048.
dat[i]=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++)
//发送包头
057.
USART1_SendByte(FP_Pack_Head[i]);
058.
059.
for
(i=0;i<6;i++)
//发送命令 0x1d
060.
USART1_SendByte(FP_Delet_All_Model[i]);
061.
062.
for
(i=0;i<12;i++)
//读回应答信息
063.
dat[i]=USART1_ReceivByte();
064.
}
065.
066.
//讲图像转换成特征码存放在Buffer1中
067.
void
FINGERPRINT_Cmd_Img_To_Buffer1(
void
)
068.
{
069.
unsigned
char
i;
070.
for
(i=0;i<6;i++)
//发送包头
071.
{
072.
USART1_SendByte(FP_Pack_Head[i]);
073.
}
074.
for
(i=0;i<7;i++)
//发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
075.
{
076.
USART1_SendByte(FP_Img_To_Buffer1[i]);
077.
}
078.
for
(i=0;i<12;i++)
//读应答信息
079.
{
080.
dat[i]=USART1_ReceivByte();
//把应答数据存放到缓冲区
081.
}
082.
}
083.
084.
//将图像转换成特征码存放在Buffer2中
085.
void
FINGERPRINT_Cmd_Img_To_Buffer2(
void
)
086.
{
087.
unsigned
char
i;
088.
for
(i=0;i<6;i++)
//发送包头
089.
{
090.
USART1_SendByte(FP_Pack_Head[i]);
091.
}
092.
093.
for
(i=0;i<7;i++)
//发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
094.
{
095.
USART1_SendByte(FP_Img_To_Buffer2[i]);
096.
}
097.
for
(i=0;i<12;i++)
098.
{
099.
dat[i]=USART1_ReceivByte();
//读回应答信息
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++)
//包头
109.
{
110.
USART1_SendByte(FP_Pack_Head[i]);
111.
}
112.
113.
for
(i=0;i<6;i++)
//命令合并指纹模版
114.
{
115.
USART1_SendByte(FP_Reg_Model[i]);
116.
}
117.
118.
for
(i=0;i<12;i++)
119.
{
120.
dat[i]=USART1_ReceivByte();
121.
}
122.
}
123.
124.
//存储模版到特定地址
125.
void
FINGERPRINT_Cmd_Save_Finger( unsigned
char
ucH_Char, unsigned
char
ucL_Char)
126.
{
127.
unsigned
long
temp = 0;
128.
unsigned
char
i;
129.
130.
FP_Save_Finger[5] = ucH_Char;
131.
FP_Save_Finger[6] = ucL_Char;
132.
133.
134.
for
(i=0;i<7;i++)
//计算校验和
135.
temp = temp + FP_Save_Finger[i];
136.
137.
FP_Save_Finger[7]=(temp & 0x00FF00) >> 8;
//存放校验数据
138.
FP_Save_Finger[8]= temp & 0x0000FF;
139.
140.
141.
for
(i=0;i<6;i++)
142.
USART1_SendByte(FP_Pack_Head[i]);
//发送包头
143.
144.
for
(i=0;i<9;i++)
145.
USART1_SendByte(FP_Save_Finger[i]);
//发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
146.
147.
for
(i=0;i<12;i++)
148.
dat[i]=USART1_ReceivByte();
149.
}
150.
151.
//获得指纹模板数量
152.
void
FINGERPRINT_Cmd_Get_Templete_Num(
void
)
153.
{
154.
unsigned
int
i;
155.
156.
for
(i=0;i<6;i++)
//包头
157.
USART1_SendByte(FP_Pack_Head[i]);
158.
159.
//发送命令 0x1d
160.
for
(i=0;i<6;i++)
161.
USART1_SendByte(FP_Templete_Num[i]);
162.
163.
for
(i=0;i<12;i++)
164.
dat[i]=USART1_ReceivByte();
165.
}
166.
167.
//搜索全部用户999枚
168.
void
FINGERPRINT_Cmd_Search_Finger(
void
)
169.
{
170.
unsigned
char
i;
171.
//发送命令搜索指纹库
172.
for
(i=0;i<6;i++)
173.
{
174.
USART1_SendByte(FP_Pack_Head[i]);
175.
}
176.
177.
for
(i=0;i<11;i++)
178.
{
179.
USART1_SendByte(FP_Search[i]);
180.
}
181.
182.
for
(i=0;i<16;i++)
183.
{
184.
dat[i]=USART1_ReceivByte();
185.
}
186.
}
187.
188.
//搜索用户0~9枚
189.
void
FINGERPRINT_Cmd_Search_Finger_Admin(
void
)
190.
{
191.
unsigned
char
i;
192.
for
(i=0;i<6;i++)
//发送命令搜索指纹库
193.
{
194.
USART1_SendByte(FP_Pack_Head[i]);
195.
}
196.
197.
for
(i=0;i<11;i++)
198.
{
199.
USART1_SendByte(FP_Search_0_9[i]);
200.
}
201.
202.
for
(i=0;i<12;i++)
203.
dat[i]=USART1_ReceivByte();
204.
}
205.
206.
//添加一个新的指纹
207.
unsigned
char
FP_add_new_user(unsigned
char
ucH_user,unsigned
char
ucL_user)
208.
{
209.
do
210.
{
211.
FINGERPRINT_Cmd_Get_Img();
//获得指纹图像
212.
}
while
( dat[9]!=0x0 );
//检测是否成功的按了指纹
213.
214.
FINGERPRINT_Cmd_Img_To_Buffer1();
//将图像转换成特征码存放在Buffer1中
215.
216.
do
217.
{
218.
FINGERPRINT_Cmd_Get_Img();
//获得指纹图像
219.
}
while
( dat[9]!=0x0 );
220.
221.
FINGERPRINT_Cmd_Img_To_Buffer2();
//将图像转换成特征码存放在Buffer2中
222.
223.
FINGERPRINT_Cmd_Reg_Model();
//转换成特征码
224.
225.
FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);
226.
227.
return
0;
228.
}