STM32
直播中

张强

7年用户 1342经验值
私信 关注
[问答]

如何利用STM32F103RCT6Mini开发板去搭建一种指纹识别系统呢

如何利用STM32F103RCT6Mini开发板去搭建一种指纹识别系统呢?有哪些注意事项?

回帖(1)

李丽

2021-12-13 10:37:29
本文章主要是自己兴趣想学习和尝试玩一下指纹识别模块,也是帮没接触过指纹识别模块的同学踩一下坑,比较适合新手和需要作毕业设计的同学。网上买回来的模块即插即用,不用半天就可以实现功能,也可以做一些自己感兴趣的智能家居小用品。
模块和工具的准备

1、开发板:STM32F103RCT6Mini开发板
2、显示屏:某宝上购买的1.44寸TFT显示屏(这个显示屏看个人喜欢,可有可无,可以用自己已经有的显示屏作显示,没有的话就直接打印串口的方式看运行过程)
3、指纹识别模块:某宝上购买的AS608指纹识别
4、按键板:自己用面包板焊接的按键
接线

1.44寸液晶屏电源接线

VCC——————>接5V DC
GND——————> 接地
液晶屏数据线接线

CS——————>接 PC7 片选信号
CLK——————>接 PB13 SPI时钟信号
SDI(DIN)——————>接 PB15 SPI数据总线
液晶屏控制线接线

LED——————>接 PB9 背光控制线,高电平电亮
RS——————>接 PC6 寄存器选择信号 RS=0发送命令 RS = 1发送像素数据
RST——————>接 PB12 液晶屏复位信号线,低电平复位。
指纹识别模块AS608接线

VCC——————>接3.3V (切记不可以接5V,会烧坏)
GND——————>接地
RX——————>PB10
TX——————>PB11
实物图:

接线图:

杜邦线接的有点乱,IO口的接线看个人喜好,除了RX和TX需要接开发板上的RX和TX之外,其他线可以随意更改,只需要修改对应的IO口初始化函数即可。
移植代码和使用方法

程序段

主函数:


int main(void)
{
  delay_init();              //延时函数初始化
  SystemInit();                //系统初始化
  Uart_Init(115200);           //打印串口初始化
  usart3_init(57600);          //指纹识别模块初始化
  KEY_Init();                  //按键初始化
  Lcd_Init();                  //LCD屏初始化
  LCD_LED_SET;                 //通过IO控制背光亮
  Redraw_Mainmenu();           //绘制主菜单(部分内容由于分辨率超出物理值可能无法显示)
while(1)
{
       key_num = KEY_Scan();
       if(key_num == 1)
       {
        key_num = 0;
        Lcd_Clear(WHITE);
        Add_FR();
       }
       if(key_num == 3)
       {
        key_num = 0;
        Lcd_Clear(WHITE);
        Del_FR();
       }
       if(key_num == 5)
       {
        key_num=0;
        Lcd_Clear(WHITE);
        press_FR();
       }   
     }
     }


指纹添加函数Add_FR():
void Add_FR(void)
{
u8 i, ensure, processnum = 0;
u8 ID_NUM = 0;
char str[20];


while(1)
{
   switch (processnum)
   {
   case 0:
     i++;
   Gui_DrawFont_GBK16(35,15,RED,WHITE,"请按手指");
   showimage(gImage_Finger65,33,40,97,104,65,65);    //指纹图片显示示例
     ensure = PS_GetImage();
     if(ensure == 0x00)
     {
       ensure = PS_GenChar(CharBuffer1); //生成特征
       if(ensure == 0x00)
       {
    Gui_DrawFont_GBK16(35,15,GREEN,WHITE,"指纹正常");
    delay_ms(1500);
         i = 0;
         processnum = 1;                 //跳到第二步
       }
       else ShowErrMessage(ensure);
     }
     else
  {   
   ShowErrMessage(ensure);
  }
     break;
     .......
     .......
        //省略的部分后面摆放到网盘,自己下载查看


指纹删除函数Del_FR():
while(key_num != 3)
{
  key_num = KEY_Scan();
  if(key_num == 2)
  {
   key_num = 0;
   if(ID_NUM > 0)
    ID_NUM--;
  }
  if(key_num == 4)
  {
   key_num = 0;
   if(ID_NUM < 99)
    ID_NUM++;
  }
  if(key_num == 1)
   goto MENU ;             //返回主页面
  if(key_num == 5)
  {
   key_num = 0;
   ensure = PS_Empty();   //清空指纹库
   if(ensure == 0)
   {     
    Lcd_Clear(WHITE);
    Gui_DrawFont_GBK16(10,15,GREEN,WHITE,"清空指纹库成功");
    printf("清空指纹库成功 rn");
   }
   .........
   .........
   //省略的部分后面摆放到网盘,自己下载查看


指纹验证函数press_FR():
void press_FR(void)
{
SearchResult seach;
u8 ensure;
char str[20];
Gui_DrawFont_GBK16(35,15,RED,WHITE,"请按手指");
showimage(gImage_Finger65,33,40,97,104,65,65);    //指纹图片显示示例
while(key_num != 1)
{
key_num = KEY_Scan();
ensure = PS_GetImage();
if(ensure == 0x00)
{
printf("获取图像成功 rn");
   ensure = PS_GenChar(CharBuffer1);
   if(ensure == 0x00)
   {
printf("生成特征成功 rn");
     ensure = PS_HighSpeedSearch(CharBuffer1, 0, 99, &seach);
     if(ensure == 0x00)
     {
  printf("验证成功 rn");
  Lcd_Clear(WHITE);
       Gui_DrawFont_GBK16(16,15,GREEN,WHITE,"指纹验证成功");
       sprintf(str, " 指纹ID:%d  ", seach.pageID);
       Gui_DrawFont_GBK16(16,35,RED,WHITE,(u8*)str);
       delay_ms(1500);
       delay_ms(1500);
  break;
     }
     else
  .........
  .........
  //省略的部分后面摆放到网盘,自己下载查看


只需要移植一个按键C文件、串口初始化C文件、AS608C文件,文件路径和对应函数添加好,编译下载即可运行,方便快捷。
实验结果:

注意事项:

1、函数初始化切记不要漏掉
2、按键质量差的消抖需要注意
3、指纹识别模块电源不要接错,否则会烧坏。
心得总结

模块还是很方便使用的,接线简单,在学校参加项目或者初学C语言的人都可以埋来学习一下,兴趣之余可以创作一些类似智能的开关锁,指纹识别系统,签到系统等等,即学即用。如果需要交流请评论留言。显示函数和部分处理函数看你个人需要,可以优化得更好,处理逻辑可以看需要更改合适自己要求得,函数都是封装好的,直接调用就好。有更好玩的模块欢迎一起探讨学习。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分