完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在调节利用DMA向串口发送数据的过程中,必须在使能DMA,执行完发送数据的操作后再关闭DMA,否则串口将不能连续自动发送数据。只能在复位时进行发送,不复位则停止发送。
如图所示,添加关闭DMA的语句,则可实现连续发送: 在注释掉关闭DMA的语句后,则串口不能连续发送数据: 如有大神指导原因,可以在此留言,谢谢。 补充DMA相关的知识: ①、DMA的各个通道对应特定的外设,在使用时需要一一对应。 ②、三种传输方式:外设-》内存,内存-》外设,内存-》内存 ③、由于DMA传输不需要CPU的参与。所以在调试的时候会发现,在我们单步停止的时候,串口依然不停地向外发送数据。(未经验证) ④、DMA实现数据转移是采用共享系统数据线来完成的,传输过程中涉及到源地址和目的地址,一次来决定数据转移的源头和目标。 ⑤、DMA技术的弊端:因为DMA允许外设直接访问内存,从而形成对总线的独占。这在实时性强的硬实时系统的嵌入式开发中将会造成中断延时过长。这在实时性要求高的系统中,要注意了。 EEPROM和flash的区别(转) rom最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉。人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改rom中的内容了。 EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory。是相对于紫外擦除的rom来讲的。但是今天已经存在多种EEPROM的变种,变成了一类存储器的统称。 狭义的EEPROM: 这种rom的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。这是最传统的一种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。 flash: flash属于广义的EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它flash。 flash做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的rom一般都是flash。 flash分为nor flash和nand flash。nor flash数据线和地址线分开,可以实现ram一样的随机寻址功能,可以读取任何一个字节。但是擦除仍要按块来擦。 nand flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。(nandflash按块来擦除,按页来读,norflash没有页) 由于nandflash引脚上复用,因此读取速度比nor flash慢一点,但是擦除和写入速度比nor flash快很多。nand flash内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是nand型的。小容量的2~12M的flash多是nor型的。 使用寿命上,nand flash的擦除次数是nor的数倍。而且nand flash可以标记坏块,从而使软件跳过坏块。nor flash 一旦损坏便无法再用。 因为nor flash可以进行字节寻址,所以程序可以在nor flash中运行。嵌入式系统多用一个小容量的nor flash存储引导代码,用一个大容量的nand flash存放文件系统和内核。 分享FATFS 的几个函数用法 FATFS 的几个函数用法: FATFS *fs, fatfs; fs = &fatfs; f_mount(0, fs); b = f_open(&infile,“SD.txt”,FA_CREATE_NEW); //创建新文件 f_close(&infile); //关闭文件 b = f_open(&infile,“SD.txt”, FA_WRITE); //以写方式打开文件 f_puts((char *)buff2,&infile); //文件内写入字符串 f_puts((char *)buff2,&infile); //文件内写入字符串 f_puts((char *)buff2,&infile); //文件内写入字符串 f_close(&infile); //关闭文件 b = f_open(&infile,“SD.txt”,FA_WRITE); //以写方式打开文件 b = infile.fsize; //获得文件大小 f_lseek(&infile,b); //移动文件指针 f_puts(buff3,&infile); //从文件内数据的最后写入字符串 f_close(&infile); //关闭文件 b = f_open(&infile,“SD.txt”,FA_READ); //以读方式打开文件 f_read(&infile,buff1,50,&rc); //从文件内读50字节赋给 buff1数组 f_close(&infile); //关闭文件 // f_unlink(“SD.txt”); //删除文件 移植完文件系统,向SD卡中写txt文件并读取文件内容 //写文件 printf(“write file test.。..。.rn”); res = f_open(&fdst, “0:/test.txt”, FA_CREATE_ALWAYS | FA_WRITE); if(res != FR_OK) { printf(“open file error: %drn”,res); } else { res = f_write(&fdst, textFileBuffer, sizeof(textFileBuffer), &bw); /* Write it to the dst file */ if(res == FR_OK) { printf(“write data ok! %drn”,bw); } else { printf(“write data error: %drn”,res); } /*close file */ f_close(&fdst); } //读文件 printf(“read file test.。..。.rn”); res = f_open(&fsrc, “0:/test.txt”, FA_OPEN_EXISTING | FA_READ); if(res != FR_OK) { printf(“open file error: %drn”,res); } else { res = f_read(&fsrc, buffer, sizeof(textFileBuffer), &br); /* Read a chunk of src file */ if(res==FR_OK) { printf(“read data num: %drn”,br); printf(“%snr”,buffer); } else { printf(“read file error: %drn”,res); } /*close file */ f_close(&fsrc); } 另外,向SD卡写数据的时候可以通过 f_printf(&fdst,“rn”); //换行 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1712 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1600 浏览 1 评论
1038 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
715 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1649 浏览 2 评论
1902浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
694浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
546浏览 3评论
567浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
532浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 08:40 , Processed in 0.660744 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号