完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想实现的功能是指纹传感器将采集到的指纹原始图像通过串口发送给单片机,单片机将收到到的图像在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模式全速运行就卡在中断里面了,,请各位给点思路。 |
|
相关推荐
10个回答
|
|
本帖最后由 toofree 于 2018-4-19 12:58 编辑
不要在中断服务程序中处理占用时间太长的东西,放到外面来。 40K数据不算多,可能是你的MCU RAM太小,选个RAM稍微大的可以。 如果你非要先存入到SPI Flash,看一下速度够不够,如果够的话,你可以RAM模拟个FIFO,在中断中往FIFO中存数据。在主程序中从FIFO中取数,写到SPI Flash。 如果串口写数比SPI Flash存数快,那么建议串口通信加协议。SPI Flash的写肯定是整页或批量写,要比你一字节一字节的写效率高。 |
|
|
|
收到一定数量的数据再写入flash,flash的写操作不要放在终端中。
|
|
|
|
写外部flash肯定不能放在中断中执行的,很费时,而且你从串口接收数据并写入到flash中肯定要增加应答机制,有些类似于STM32的uart iap例程,你可以参考下
|
|
|
|
MCU选用RAM大一些的,最少64K,最好96K的,比如STM32F103RF之类的,有了充足的RAM后接收完所有数据后一次性按页写入Flash,一个字节一个字节的写效率太低。
|
|
|
|
个人建议不要操作保存到flash。据我了解,串口的速度一般比LCD接口的慢,所以建议你每收到一个数据或几个数据就往LCD里发送显示。或者收到一段数据一起发送(比如100字节?)
|
|
|
|
STM32的uart iap例程
|
|
|
|
写FLASH操作不要放到中断里面,中断里面就只是设置标志,接收到一定数据后再写FLASH
|
|
|
|
建议串口接收数据直接供LCD屏显示,以前在玩单片机时都是这样做的,因为这样比较节省资源且简单易实现。
|
|
|
|
这个建议很好;
串口收到数据(一组数据),马上传到LCD显示,直到全部传完; 写FLASH完全没有意义,速度又慢,保存此图像也没多大意义,又不是采集指纹,再说FLASH擦除写入是有次数限制的; |
|
|
|
一边收一边显示会不会很慢
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 06:05 , Processed in 0.849746 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号