你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何实现单片机从串口接收图像数据,并在LCD屏幕上显示

[复制链接]
愤怒的小宝 提问时间:2018-4-19 12:36 /
想实现的功能是指纹传感器将采集到的指纹原始图像通过串口发送给单片机,单片机将收到到的图像在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模式全速运行就卡在中断里面了,,请各位给点思路。
收藏 评论11 发布时间:2018-4-19 12:36

举报

11个回答
toofree 回答时间:2018-4-19 12:56:39
本帖最后由 toofree 于 2018-4-19 12:58 编辑

不要在中断服务程序中处理占用时间太长的东西,放到外面来。
40K数据不算多,可能是你的MCU RAM太小,选个RAM稍微大的可以。

如果你非要先存入到SPI Flash,看一下速度够不够,如果够的话,你可以RAM模拟个FIFO,在中断中往FIFO中存数据。在主程序中从FIFO中取数,写到SPI Flash。
如果串口写数比SPI Flash存数快,那么建议串口通信加协议。SPI Flash的写肯定是整页或批量写,要比你一字节一字节的写效率高。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

黑皮男 回答时间:2018-4-19 13:06:59
收到一定数量的数据再写入flash,flash的写操作不要放在终端中。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2018-4-19 13:35:39
写外部flash肯定不能放在中断中执行的,很费时,而且你从串口接收数据并写入到flash中肯定要增加应答机制,有些类似于STM32的uart iap例程,你可以参考下

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Angel_YY 回答时间:2018-4-19 14:23:06
MCU选用RAM大一些的,最少64K,最好96K的,比如STM32F103RF之类的,有了充足的RAM后接收完所有数据后一次性按页写入Flash,一个字节一个字节的写效率太低。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

す疯Ⅱ恒す 回答时间:2018-4-19 14:23:30
个人建议不要操作保存到flash。据我了解,串口的速度一般比LCD接口的慢,所以建议你每收到一个数据或几个数据就往LCD里发送显示。或者收到一段数据一起发送(比如100字节?)

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

daoshuchen 回答时间:2018-4-24 10:14:55
STM32的uart iap例程

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

lkq550 回答时间:2018-4-25 23:12:00
写FLASH操作不要放到中断里面,中断里面就只是设置标志,接收到一定数据后再写FLASH

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jinglixixi 回答时间:2018-4-26 08:17:26
建议串口接收数据直接供LCD屏显示,以前在玩单片机时都是这样做的,因为这样比较节省资源且简单易实现。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

yrtwxs 回答时间:2018-4-26 11:49:48
す疯Ⅱ恒す 发表于 2018-4-19 14:23
个人建议不要操作保存到flash。据我了解,串口的速度一般比LCD接口的慢,所以建议你每收到一个数据或几个数 ...

这个建议很好;
串口收到数据(一组数据),马上传到LCD显示,直到全部传完;
写FLASH完全没有意义,速度又慢,保存此图像也没多大意义,又不是采集指纹,再说FLASH擦除写入是有次数限制的;

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版