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

如何实现单片机从串口接收图像数据,并在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个回答
七哥 回答时间: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_ST 回答时间:2018-4-19 14:23:06
提示: 作者被禁止或删除 内容自动屏蔽
疯de_恒 回答时间: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

查看全部评分

daoshuchen 回答时间:2019-2-22 11:13:02
中断内再调用别的函数?
noviceyao 回答时间:2019-7-26 10:21:37
同样遇到此问题,想问问您这个是用的TLDC实现的么

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版