OpenEdv-开源电子网

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

通过串口直接将字库写入外部FLASH

[复制链接]

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
发表于 2014-2-6 03:16:59 | 显示全部楼层 |阅读模式

 买了原子哥两套战舰开发板,学习汉字显示的时候发现字库通过SD卡写入外部FLASH

如果没有SD卡槽怎么办?百度上有人讲通过串口直接写入,但是没有具体的代码。
现把
自己实现的代码分享下:(自己测试了波特率:115200时写入500KB文件需要45秒,再高就没有测试了)


u32 WriteAddr=0;  //开始写入地址
void USART1_IRQHandler(void)
{
 u8 Res;

 if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
  {
   USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除串口接收中断
   Res=USART_ReceiveData(USART1);
   SPI_Flash_Write_NoCheck(&Res,WriteAddr++,1);
   //LCD_ShowxNum(120,75,pAddr,2,16,0);  原本想通过LCD观察传输的字节数有无错误,但是发现严重影响传输速度,最高1200,删除此行传输速度115200没有任何问题。
    //USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除串口接收中断(把清除中断放在这个位置只会卡死,不知道怎么回事)


  }
}

我使用的无检验写SPI-FLASH,写入前需要全片擦除一下。

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

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-6 10:18:24 | 显示全部楼层
如果没有SD卡槽怎么办?公头线跳线啊!呵呵,开玩笑,谢谢LZ分享!
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2014-2-6 10:29:13 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
我有一块板子只有一个串口一个RS485口一个W25Q64FLASH,一个TFT屏  其余IO都没有引出
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-2-6 10:58:38 | 显示全部楼层
回复【3楼】龙胜阳子:
---------------------------------
恩,LZ方法正统,我那是瞎搞~
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2014-2-6 11:01:25 | 显示全部楼层
回复【4楼】745021926:
---------------------------------
呵呵   我也是闲的无聊  折腾呗
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-2-9 22:21:43 | 显示全部楼层
正确方法是做双buff 再写入 你不出错只是因为你预先擦除了flash且只传1个字库
回复 支持 反对

使用道具 举报

27

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2013-5-12
在线时间
26 小时
 楼主| 发表于 2014-2-10 01:22:49 | 显示全部楼层
回复【6楼】simms01:
---------------------------------
我是个新手,不是很明白您讲的,可以帮忙修改下程序吗。
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-2-10 10:53:39 | 显示全部楼层
大概方法是 

建立一个全局buff  如果你的flash 页面是2048字节(以常见nandflash为例子)

那么建立一个双buf   buf[4096]

串口中断
  每收到一个数 就往buf写一个数 写到4096 就从0开始写

大循环

  检测buf写到那个字节 如果大于2048字节 就擦除1页 写一次flash 再到4096 又擦除一次 写一次 最后把剩余的写完


用这个方法 可实现在 stc这些低速单片机 实现256k的传输速率不丢数据  何况是 stm32



回复 支持 反对

使用道具 举报

32

主题

153

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-11-18 01:20:30 | 显示全部楼层
楼主?你的清楚标志放哪里的?
酱油团队--
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-8-1
在线时间
0 小时
发表于 2014-12-13 14:13:07 | 显示全部楼层
楼主,你好,我最近也弄这个,但是好长时间了都没有效果,求楼主帮助一下。我把字库写到flash里,但是不会显示,楼主可以把你的例程发给我研究一下吗?谢谢,我的邮箱sdnydxzzl@163.com
回复 支持 反对

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2014-2-12
在线时间
11 小时
发表于 2014-12-22 15:05:23 | 显示全部楼层
回复【8楼】simms01:
---------------------------------
您好,您是否也做过类似的功能?不需要其他协议直接通过串口助手像这样将比较大的文件写到外部FLASH可以实现吗
回复 支持 反对

使用道具 举报

20

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
639
金钱
639
注册时间
2014-6-20
在线时间
169 小时
发表于 2014-12-22 17:42:12 | 显示全部楼层
mark,过几天用得到,谢了
回复 支持 反对

使用道具 举报

28

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
金钱
381
注册时间
2014-10-9
在线时间
6 小时
发表于 2014-12-26 22:58:56 | 显示全部楼层
先标记下,正在看资料中。。。
拿什么让你自己信服 自己
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-1-8
在线时间
0 小时
发表于 2015-1-13 16:06:25 | 显示全部楼层
但是串口助手怎么发送像这样的数组0xFF,0xE3,0x84,0x04,0x00,0x11,0x54,0xDC,不仅带0x还有逗号,怎么发送16进制的大量数据呢
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2015-3-18 23:34:25 | 显示全部楼层
mark。。。。。。。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-30
在线时间
2 小时
发表于 2015-11-30 17:47:43 | 显示全部楼层
留脚印。。。。
回复 支持 反对

使用道具 举报

7

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2015-8-10
在线时间
39 小时
发表于 2016-10-20 17:39:05 | 显示全部楼层
马克一下迟点回来看
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2017-1-8
在线时间
27 小时
发表于 2017-4-7 15:34:37 | 显示全部楼层
留名回看
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2017-1-8
在线时间
27 小时
发表于 2017-4-22 08:14:11 | 显示全部楼层
很好的思路
回复 支持 反对

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2017-6-13 14:45:25 | 显示全部楼层
我在串口接收中断后,写入flash有时候会卡住;楼主用的spi的速度是多少;串口的波特率是多少;我目前采用 的是串口波特率115200   
SPI 12M
与其感慨路难行,不如马上出发
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2017-10-21
在线时间
28 小时
发表于 2017-11-10 08:39:17 | 显示全部楼层
请问,可以通过在编程里flash.c文件内写的spi写函数写进外部flash吗
回复 支持 反对

使用道具 举报

10

主题

71

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
金钱
1839
注册时间
2017-1-17
在线时间
37 小时
发表于 2017-11-24 14:44:57 | 显示全部楼层
谢谢楼主分享。我也折腾一下
看帖回复是一种美德
http://openedv.com/?fromuser=caijie0513
回复 支持 反对

使用道具 举报

30

主题

97

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-4-13
在线时间
68 小时
发表于 2018-9-30 14:59:20 | 显示全部楼层
simms01 发表于 2014-2-10 10:53
大概方法是 

建立一个全局buff  如果你的flash 页面是2048字节(以常见nandflash为 ...

楼主,在吗?您可以把STM32通过串口把GBK字库写到Flash里面再细细的讲一下吗,或者您那里有这方面的资料吗,可以分享一下吗?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2015-7-2
在线时间
12 小时
发表于 2018-10-11 16:16:01 | 显示全部楼层
mark。。。感觉后面要用到
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-10-11 16:28:19 | 显示全部楼层
刺客_奋斗的菜鸟 发表于 2018-9-30 14:59
楼主,在吗?您可以把STM32通过串口把GBK字库写到Flash里面再细细的讲一下吗,或者您那里有这方面的资料 ...

楼主 应该是通过串口助手的“发送文件”功能将字库文件直接发送给32的串口。
Res=USART_ReceiveData(USART1)用来将串口每次接收到的一个字节的数据保存在res中,然后调用 SPI_Flash_Write_NoCheck(&Res,WriteAddr++,1)将res保存的数据直接写入到SPI FLASH中。串口每接收到一个字节的数据就会执行楼主的中断程序并将该字节数据保存在SPI FLASH
回复 支持 反对

使用道具 举报

4

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
499
金钱
499
注册时间
2019-5-31
在线时间
173 小时
发表于 2020-11-6 16:25:03 | 显示全部楼层
楼主的方法,简单粗爆。。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 18:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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