OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7220|回复: 15

STM32能实现持续接收串口发送的数据并存到内存卡中吗?

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
发表于 2015-8-23 11:07:32 | 显示全部楼层 |阅读模式
5金钱
    已经在论坛看了不少帖子了,但是因为刚接触所以看不太懂,就连串口1对应的引脚都不清楚,所以还请知道答案的前辈不吝赐教哈。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11540
金钱
11540
注册时间
2014-4-1
在线时间
1314 小时
发表于 2015-8-23 12:33:23 | 显示全部楼层
串口是所有通信方式中最慢的方式了,存入 SD 卡绝无问题。
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-23 12:36:09 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
谢谢老师啦,能大概说一下具体思路不啊。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-23 13:59:47 | 显示全部楼层
多动手就懂了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11540
金钱
11540
注册时间
2014-4-1
在线时间
1314 小时
发表于 2015-8-23 18:57:08 | 显示全部楼层
就像“怎样把大象关冰箱里”,要明白物理过程分几步,

然后一步步实现,就可以了。

哪一步不会,再仔细研究。
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-23 19:10:36 | 显示全部楼层

正点原子老师,您好,我现在做的是让板子的串口1持续接受数据并存到SD卡中的.txt文件中,下面是我的程序,是用第40个例程FATFS改的。但是现在只能往.txt文件里面写一行乱码,不知道怎么回事,请老师给看看。

[mw_shl_code=c,true]这个是主循环: while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 res=f_open(&f_txt,"123.txt",FA_OPEN_ALWAYS | FA_WRITE); f_write(&f_txt,USART_RX_BUF,len,(UINT*)&br); f_lseek(&f_txt,len); USART_RX_STA=0; f_close(&f_txt); } } 下面是串口中断程序,接收到11,11表示接受完成。 void USART1_IRQHandler(void) { u8 Res; #ifdef OS_TICKS_PER_SEC OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志[/mw_shl_code] [mw_shl_code=c,true]     Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)// 接受未完成 { if(USART_RX_STA&0x4000)//接收到了11 { if(Res!=0x11)USART_RX_STA=0;//接收错误重新开始[/mw_shl_code] [mw_shl_code=c,true] else USART_RX_STA|=0x8000; //接收完成了 [/mw_shl_code] [mw_shl_code=c,true] } else //还没有收到11 [/mw_shl_code] [mw_shl_code=c,true]     { if(Res==0x11)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0 //接收数据错误重新开始接收 } } } } #ifdef OS_TICKS_PER_SEC OSIntExit(); #endif } #endif [/mw_shl_code]

实验40 FATFS实验.rar

5.23 MB, 下载次数: 173

回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-23 19:11:52 | 显示全部楼层
回复【5楼】xuande:
---------------------------------
老师我刚上传了我的程序,您帮我看看呗
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-23 19:21:52 | 显示全部楼层
回复【5楼】xuande:
---------------------------------
回复【5楼】xuande:
---------------------------------
5 00 6C 80 04 00 01 80 17 80 DB 80 51 FB AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 5F 22 2F 37 45 00 6A 80 04 00 00 80 17 80 DA 80 51 16 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 5E 22 2F 37 3B 00 67 80 04 00 00 80 17 80 DA 80 51 08 AA 33 33 00 00 00 75 00 5E 80 04 00 00 80 17 80 DB 80 52 56 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 72 22 31 37 76 00 60 80 04 80 01 80 17 80 DB 80 52 D5 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 66 22 2A 37 8A 00 63 80 04 80 01 80 17 80 DC 80 51 D9 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 5A 22 23 37 7E 00 66 80 04 00 00 80 17 80 DC 80 51 3C AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 55 22 1A 37 78 00 68 80 03 00 00 80 17 01 3B 32 AA 22 22 82 6A 22 00 37 47 00 5E 80 02 00 00 80 17 80 DD 80 51 E9 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 69 22 09 37 4D 00 5C 80 02 00 00 80 17 80 DD 80 51 F5 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 66 22 12 37 46 00 5B 80 02 00 00 80 17 80 DD 80 51 F3 AA 33 33 00 00 00 00 00 00 00 00 00 00 00 AA 11 11 83 C0 00 00 01 3B 32 AA 22 22 82 61 22 1D 37 51 00 5B 80 
这个是用串口工具显示的输出数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-23 22:08:51 | 显示全部楼层
你可以仿真看看嘛。看问题出在哪里
跟踪到 f_write这个位置,看看收到的数据,与你发送的是否一致。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-24 14:54:59 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
老师,我现在已经能够接受数据了,但是接受的速度比用串口工具显示的要慢,存在有数据丢失的现象,您知道是什么原因吗?
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-24 16:30:50 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我现在做的是先用uart中断接收到500个数据放到数组里面,之后在主循环中存到sd卡中的.txt文件中。不知道在往sd卡中存数据的时候中断还能进行吗,这样处理的话会不会导致数据丢失?还有一个问题就是,主程序中的whlie循环能和串口中断同时运行吗?波特率为115200。谢谢老师。
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-25 10:19:31 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子老师?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-25 22:59:52 | 显示全部楼层
回复【11楼】zhangcaiwang:
---------------------------------
CPU同一时刻,肯定只会运行一个代码
有中断来了,要嘛打断SD卡写入过程,要嘛丢失中断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-20
在线时间
6 小时
 楼主| 发表于 2015-8-26 15:55:07 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
恩恩,我现在弄的已经差不多了,就是在fatfs实验里加了外部按键触发中断以后程序不能连续执行,,按键中断设定为比串口中断优先级高。现在正在找原因。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-26 19:06:10 | 显示全部楼层
回复【14楼】zhangcaiwang:
---------------------------------
ok
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-9-11
在线时间
21 小时
发表于 2019-11-2 14:00:33 | 显示全部楼层
zhangcaiwang 发表于 2015-8-24 16:30
回复【9楼】正点原子:
---------------------------------
我现在做的是先用uart中断接收到500个数据放到数 ...

可以把你这个先存到缓存组,再存到SD卡的代码分享一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 12:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表