想实现的功能是指纹传感器将采集到的指纹原始图像通过串口发送给单片机,单片机将收到到的图像在LCD屏幕上显示出来。现在的情况是指纹模块能够返回采集到的指纹图像,大约40KB,但是我不知道怎么才能把串口收到的数据保存下来。原来的一个想法是每接收到一个字节,就将该字节存放在外部flash(w25x16)中,多次尝试后无果。 void USART1_IRQHandler(void) { if(__HAL_USART_GET_IT(&huart1, USART_IT_RXNE) != RESET) { if(USART1_RX_COUNT == USART1_MAX_RECV_LEN) //缓冲区满 USART1_RX_COUNT=0; USART1_RX_BUF[USART1_RX_COUNT] = huart1.Instance->RDR; //串口收到一个字节 sFLASH_WriteBuffer(&USART1_RX_BUF[USART1_RX_COUNT],Adr,1);//写入flash USART1_RX_COUNT++; Adr++; } } 写入flash这个函数在主函数中调用正常,能够写入数据,也能够正确读出,放在中断服务函数里就不行,,debug模式全速运行就卡在中断里面了,,请各位给点思路。 |
不要在中断服务程序中处理占用时间太长的东西,放到外面来。
40K数据不算多,可能是你的MCU RAM太小,选个RAM稍微大的可以。
如果你非要先存入到SPI Flash,看一下速度够不够,如果够的话,你可以RAM模拟个FIFO,在中断中往FIFO中存数据。在主程序中从FIFO中取数,写到SPI Flash。
如果串口写数比SPI Flash存数快,那么建议串口通信加协议。SPI Flash的写肯定是整页或批量写,要比你一字节一字节的写效率高。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
这个建议很好;
串口收到数据(一组数据),马上传到LCD显示,直到全部传完;
写FLASH完全没有意义,速度又慢,保存此图像也没多大意义,又不是采集指纹,再说FLASH擦除写入是有次数限制的;
评分
查看全部评分