Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
图片采集存储终端【赵洋】
发布于 2020-04-14 11:00:24 浏览:5457
订阅该版
**方案描述** stm32用485图像采集传感器进行拍照,随后将图片数据传输至外部flash使用文件系统存储,可通过shell使用串口YModem协议传输到电脑。 ![功能.png](/uploads/202004/14/103949w9i8tvo0iw06e66t.png) **功能列表** * 命令设置和获取图片质量 * 命令获取电源电压 * 命令重启mcu * 命令获取5min计数I/O低电平有效 * 命令格式化flash * 命令读取文件 * 命令扫描flash所以文件和文件夹 * 命令获取flash储存空间信息 * 命令将flash文件传输出 **内部API实现功能** * 支持报文存储为txt文档 * 支持日志(类似printf)存储为txt文档 * 呼吸灯 * 摄像头拍照读数据等一系列api **演示** ![呼吸灯.gif](/uploads/202004/14/105355l7vn71kmvnvnq0kv.gif) ![设置图片质量.gif](/uploads/202004/14/105356vdd50f5i5ud483ji.gif) ![传输图片.gif](/uploads/202004/14/105346hnj3xghf3axnqzox.gif) 下载附件 [STM32F205V1 (NANO).7z](https://oss-club.rt-thread.org/uploads/202004/14/110007hr0xa55ukgyoygxh.attach)
查看更多
6
个回答
默认排序
按发布时间排序
aozima
2020-04-14
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
这拍个照不容易啊,楼主传个样片看看。
赵撵猪
2020-04-14
这家伙很懒,什么也没写!
>这拍个照不容易啊,楼主传个样片看看。 --- 用的摄像头成品,拍完照片数据485传输到mcu的
赵撵猪
2020-04-28
这家伙很懒,什么也没写!
重新用markdown整理了一下 ![](static/image/hrline/1.gif) [md]## 图片采集存储终端【赵洋】 ### 方案描述 ![功能](https://i.loli.net/2020/04/28/Blir6dMqAbhYEQJ.png) 使用图片传感器进行拍照,通过485传输到mcu,mcu使用文件系统操作flash进行存储,shell可对文件系统进行操作。 **功能分解** - flash驱动 - 文件系统和flash接口实现 - 图片传感器数据获取实现 - ymodem实现 - shell与文件系统以及ymodem对接实现 RT-Thread相关内容:RT-Thread Nano 、线程 、互斥量 、软件定时器。 **[论坛原帖](https://www.rt-thread.org/qa/thread-424178-1-1.html)** ### 硬件 使用STMF205RET6,带有485和外部w25q128 flash,图像传感器是SXH-V1/V2系列串口摄像头 ### 软件 #### 1、MCU配置 使用cube mx生成代码 - ###### shell和485串口配置(略) - ###### spi配置 ![spi配置](https://i.loli.net/2020/04/28/artQeTxIOS4sUmp.png) - ###### 文件系统配置 ![文件系统配置](https://i.loli.net/2020/04/28/MpTS9wnNuCEPzYW.png) 其中有个配置长文件名推荐使用动态,所以我们需要将系统的设置的调大才能正确运行文件系统 ,也可将 syscall.c文件中的ff_memalloc和ff_memfree和操作系统对接。 - ###### RT-Thread Nano 配置 ![nano配置](https://i.loli.net/2020/04/28/E2gFPMmUxLniItG.png) #### 2、外部flash驱动实现 外部FLASH产品型号为W25Q128,容量:16Mbytes,一页为256个字节,一个扇区为4K个字节,一块有12个扇区,共有256个块。 我们需要完成的是读取数据和写数据 ###### 1) 读取数据 首先需要进行测试FLASH是否是存在的,可以通过FLASH型号进行对比,步骤是,先将设备上电操作,发送读取Device ID指令(90H),FLASH返回Device ID值。 读取内部数据时,步骤是,发送一个字节读指令(03H)接着发送三个字节地址,FLASH就返回所需要的数据,可以一直读完整个FLASH。 ###### 2) 写数据 FLASH有一个保护机制叫作写保护,需要进行允许写入使能指令(06H)之后并且数据区域擦除过才可以开始进行写数据,写数据可以一次性写256个字节最多,也就是一页的数据,如果超过一页数据那么会出现以设定地址为头页数据为尾形成环形,页编程时地址需要对齐,一页256个字节,所以页编程的地址末字节为0。 **总结**:写数据步骤为,先进行写使能,擦除扇区,写使能,写入数据。 #### 3、文件系统与FLASH驱动对接 文件系统移植部分软件已经生成,文件系统的意义是用户实现底层驱动,也就是对存储设备的读写状态等驱动,用户就可以使用文件系统的方式进行抽象存储数据管理了,比如打开一个文本文件,创建个文件夹。 所需实现的文件系统底层驱动函数均在user_diskio.c文件中。 **需要实现函数** ###### 1) USER_initialize函数 USER_initialize函数是初始化的作用,比如开启外部FLASH电压,获取DI看外部FLASH是否工作正常。我们使用读取ID函数,成功返回FR_OK代表成功 ###### 2) USER_status函数 USER_status用来查看外部FLASH工作状态,比如写大量数据的时候会出现忙状态,此时就不可以进行数据的写入,比如写保护状态,就不可以写入数据。这里我们使用FLASH寄存器只看BUSY状态,就是写多个数据时等处理完,BUSY状态取消返回正确值。 ###### 3) USER_read函数 USER_read用来读取数据,只需要将我们写好的读取数据函数封装起来就可以了。 ###### 4) USER_write函数 写数据函数,因为我们的FLASH写是一次性写256字节最多,这里参数是以扇区的方式,就需要将写函数多次写入,写完一页将地址变为下一页写入,直到完成全部写入。 ###### 5) USER_ioctl函数 这里是文件系统的一些控制命令,比如对设备的扇区大小,扇区数量,擦除块大小值的获取。 > 在开始疑惑配置文件系统的 sector 最大和最小参数,实际上在这个函数中进行指定,对于flash就是写成固定4k,因为数据擦除最小是4k。 基本的功能已经实现后,MX_FATFS_Init()函数是文件系统的初始化,在此函数添加部分代码,进行测试文件系统。文件系统步骤,进行f_mount挂载,如果没有文件系统就进行格式化,再重新挂载。 文件系统操作时候建议加上互斥量,避免多个文件同时操作有影响,需要一个一个操作。 #### 4、图片传感器数据获取实现 实际上不同的传感器协议是不同的,我们只需要了解想法,图片操作顺序,拍照,读取数据(比如每次1K数据)。这里都抽象成一个就好了,拍照,获取总数据大小,读取指定地址多少数据。使用软件定时器定时拍照存储。 #### 5、ymodem实现 这里有很多开源的,我看nano没有所以才采用的开源,使用的是Free YModem implementation.使用也简单,使用xshell可支持YModem 协议 需要对接的接口函数: - __ym_getchar - __ym_putchar - __ym_sleep_ms - __ym_flush 主要使用发送函数,具体可见工程代码。 #### 6、shell与文件系统以及ymodem对接实现 shell和文件系统实现就比较简单,因为输入参数直接可以和文件系统函数对接起来,这里我实现了一个扫描函数,扫描全部文件,保留最后一个文件名,用ymodem协议可以将这个文件传出到电脑。 ### 效果 ![传输图片](https://i.loli.net/2020/04/28/ZnyxtphYBqvfro7.gif) ![呼吸灯](http://upload.ouliu.net/i/20200428141227706bk.gif) ![控制存储图片](https://i.loli.net/2020/04/28/6VHc4q1fCPuLMiX.gif) ![设置图片质量](https://i.loli.net/2020/04/28/cTgtX6ky8n51pfZ.gif) ![设置图片质量](https://i.loli.net/2020/04/28/cTgtX6ky8n51pfZ.gif)[/md]
seaguxx
2020-04-30
这家伙很懒,什么也没写!
有没有硬件图?可以弄到GIT仓库上吗
等风来
2020-05-05
这家伙很懒,什么也没写!
顶,一下
赵撵猪
2020-05-06
这家伙很懒,什么也没写!
>有没有硬件图?可以弄到GIT仓库上吗 --- git 还不会弄,硬件 没什么东西,看工程文件就能看出来的,就一个外部flash+485,传感器是单独的,你选选哪家的了
撰写答案
登录
注册新账号
关注者
0
被浏览
5.5k
关于作者
赵撵猪
这家伙很懒,什么也没写!
提问
6
回答
19
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部