本帖最后由 xinmeng_wit 于 2021-9-27 07:30 编辑
#申请原创#
【RISC-V MCU创新应用比赛】基于CH32V103的指纹管理系统作者:xinmeng_wit
演示视频链接:https://b23.tv/NAMWTO 功能描述本系统使用沁恒RISC-V内核MCUCH32V103作为主控芯片实现对用户指纹数据的采集和管理。主要实现用户的指纹增加,删除,批量删除和识别检测等功能。同时支持两种使用方式:①本地控制;②PC端控制。其中,对指纹的采集使用了AS608光学指纹传感器模块。该模块具有接口简单,使用方便的特点,同时支持UART和USB两种通讯方式。本方案采用简单的UART方式与传感器进行通讯。另外,使用了240*320的LCD及五向按键进行人机交互,提升用户体验。PC与MCU之间可以用多种方式进行通讯,例如:UART,USB,wireless等。本方案先使用UART进行验证,后期会扩展到USB和wireless方式。 硬件框架
1. 主控采用沁恒开发板CH32V103,CH32V103是基于RISC-V内核的MCU,最高80MHz系统主频,64KB的flash和20KB的SRAM,虽然主频和存储容量都不是特别突出,但是实现一些常规应用也足够了。 2. LCD的接口有16bit和8bit方式可选,为了节省IO引脚资源,本方案采用8bit方式进行通讯。 3. 五向按键用来配合LCD进行人机交互。(主要使用上键、下键和确认键)。 4. MCU与PC间通过板载的虚拟串口进行通讯,PC端会通过自己做的一个小工具进行与MCU交互。 5. LED则使用板载的LED灯,主要功能是指示程序的运行状态。
接口定义
软件模块说明软件上没有太多要进行说明的,主要是USART1和USART2为了减少中断次数和接收不定长数据,在接收的时候使用了DMA+idle中断,也就是说只有在一帧数据接收完成后会产生一次idle中断。然后在中断里面去计算接收数据的长度。 中断函数如下:
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET) //idle interrupt
{
USART_ReceiveData(USART2); //clear idle interrupt bit
DMA_Cmd(DMA1_Channel6,DISABLE);
DMA_ClearITPendingBit(DMA1_IT_TC6); // Clear Transfer Complete flag
DMA_ClearITPendingBit(DMA1_IT_TE6); // Clear Transfer error flag
Usart2RecLen = DMA_REC_LEN-DMA_GetCurrDataCounter(DMA1_Channel6);
DMA_SetCurrDataCounter(DMA1_Channel6, DMA_REC_LEN);
DMA_Cmd(DMA1_Channel6, ENABLE);/* USART2 Rx */
memcpy(usart_rec_pro_buf,usart_rec_buf,Usart2RecLen);
rec_comp_flag = 1;
}
}
演示效果
|