搜索
bottom↓
楼主: linquan315

STM32串口驱动(拼音检索测试通过)(环形队列+内存动态分配+DMA)(申请加酷,让更多的人

  [复制链接]

出0入0汤圆

发表于 2011-5-27 20:44:13 | 显示全部楼层
发送我会了,可是还是不明白,怎样处理接收到的数据,在主程序的循环里不停的调用哪个函数?还是该怎么办?

出0入0汤圆

发表于 2011-5-27 20:57:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-28 01:33:33 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-5-28 13:49:58 | 显示全部楼层
有人用过吗?

出0入0汤圆

发表于 2011-5-28 15:19:36 | 显示全部楼层
稍微编辑了下,方便需要打印研究,仔细学习,方便不能随时上网的同学。
STM32串口驱动(拼音检索测试通过)(环形队列+内存动态分配+DMA)ourdev_643803XAJAJU.pdf(文件大小:831K) (原文件名:STM32串口驱动.pdf)

出0入0汤圆

发表于 2011-5-29 01:31:56 | 显示全部楼层
这就是我需要的,谢谢楼主!

出0入0汤圆

发表于 2011-5-29 01:46:37 | 显示全部楼层
关于内存管理的很实用

出0入0汤圆

发表于 2011-5-29 11:17:29 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-5-29 11:59:16 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-5-29 16:53:15 | 显示全部楼层
好资料。学习了!

出0入0汤圆

发表于 2011-7-20 17:48:15 | 显示全部楼层
经典

出0入0汤圆

发表于 2011-7-20 17:54:19 | 显示全部楼层
lz好专业,我之前的产品中串口就是这样做的,读写开辟了1K的一个缓存,组成环形队列,发送函数只是把数据写到缓存中,
由一个定时器的中断判断,如果缓存中有数据,就开启串口,在串口中断中发送。


不过没有用DMA,只用中断。


不错。。。

出0入0汤圆

发表于 2011-7-22 22:19:49 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-8-18 16:58:06 | 显示全部楼层
回复【楼主位】linquan315
-----------------------------------------------------------------------

不得不承认,这是非常好的文章。

出0入0汤圆

发表于 2011-8-18 17:00:40 | 显示全部楼层
回复【楼主位】linquan315
-----------------------------------------------------------------------

我想顺便请教一下楼主。有没有用过485通信,RTT已经占用USART1,现在我要加一个读卡器模块,是一种主动式读卡器,刷卡时会自动向上位机发送卡号(4字节数据),但是现在却发现在系统里中断什么的都配好了,却读数老是丢失一个字节,莫名其妙。这根信号量、时间片有关系没。

出0入0汤圆

发表于 2011-8-27 21:26:27 | 显示全部楼层
好帖子,要顶

出0入0汤圆

发表于 2011-8-27 21:42:46 | 显示全部楼层
我也一直在用环形字节缓冲区和环形定长数组缓冲区,有一点难以决断的是收到(继续)发送数据的指令的时候发现缓冲区已满,这个时候该等待一个字节的空间还是等待足够字节的空间还是等待缓冲区为空,等待1字节显然是较为笨拙的方法,等待全部或足够缓冲区也不够理想。理想的状态应该是复制新数据完成的时间刚好缓冲区腾出剩余的空间。这样cpu处于等待中的时间最短。有点类似于粗水管注水,细水管泄的问题(维持库容利用率最高)。感兴趣的人可以建个数学模型来研究一下。

出0入0汤圆

发表于 2011-8-27 23:00:45 | 显示全部楼层
好贴子,一定要顶一下。

出30入0汤圆

 楼主| 发表于 2011-8-31 14:02:11 | 显示全部楼层
上班了,好久没有上网了。
回复第100楼,这个程序时不需要在超级终端中调用的。发送的时候直接使用就可以了。你花点时间仅仅把文中的第一页看明白就知道为什么这么用了。

出30入0汤圆

 楼主| 发表于 2011-8-31 14:13:46 | 显示全部楼层
不好意思,楼层太多我看错了,100楼的朋友,接收的程序在USART1.c文件中的USART1RecvResetBufferIndex()函数中。其实我最初的想法是在固定的设置每一个帧的大小,但是在项目的过程中,遇到了很多串口线上设备没有固定的大小,有时需要传送一些数据流,有时是指令,这样我们怎么判定一帧已经结束了呢,就是超时终端。
这就相当于一个看门狗程序,启动串口定时定时器以后,譬如在9600波特率下(此时发送一个字节的数据需要1.014ms),每隔2ms中断一次,如果在这2ms内收到了串口数据,将串口定时定时器内的计数器变为0,重新计数,如此循环,直到最后一个字节时,不再有程序将计数器变为0,定时器将会发生中断,这时一帧数据就结束了。可以对该命令或者数据进行处理了。

出0入0汤圆

发表于 2011-8-31 17:30:04 | 显示全部楼层
mark!

出675入8汤圆

发表于 2011-8-31 18:23:42 | 显示全部楼层
mark!

出30入0汤圆

 楼主| 发表于 2011-8-31 19:21:15 | 显示全部楼层
回复118楼,我是采用头指针指针正向超过尾指针的方法来判断缓冲区是否已经装满。但是在一种情况下需要进一步判断:当头指针等于尾指针时,有两种情况,缓冲区已经装满,或者缓冲区是空的,这是需要额外加一个变量存放标志位。
后来我用一个long型变量存放缓冲区内空字节的数量,这样就简单多了。虽然算法很幼稚。

出0入0汤圆

发表于 2011-8-31 21:11:55 | 显示全部楼层
顶。。。

出0入0汤圆

发表于 2011-8-31 21:14:01 | 显示全部楼层
【124楼】  linquan315
如果环形缓冲区保留最后一个空位就不会产生:
当头指针等于尾指针时,有两种情况,缓冲区已经装满,或者缓冲区是空的
此时:
1、当头指针等于尾指针时,缓冲区是空的
2、尾指针+2 等于 头指针 ,缓冲区已经装满

出0入0汤圆

发表于 2011-9-1 09:10:37 | 显示全部楼层
好帖子,要顶

出0入0汤圆

发表于 2011-9-1 10:27:30 | 显示全部楼层
好帖留名

出0入0汤圆

发表于 2011-9-1 10:29:06 | 显示全部楼层
好东西 有时间研究一下。

出0入0汤圆

发表于 2011-9-1 12:29:05 | 显示全部楼层
写的很用心

出0入4汤圆

发表于 2011-9-1 13:41:17 | 显示全部楼层
感谢分享,难得一遇的佳作,写的很详细,楼主做研究很深入啊。

出0入0汤圆

发表于 2011-9-1 14:04:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-1 16:13:52 | 显示全部楼层
如此好文发现的有点晚了,好好看看,争取用得上。

出0入0汤圆

发表于 2011-9-29 13:52:55 | 显示全部楼层
mark

出30入0汤圆

 楼主| 发表于 2011-10-1 15:30:56 | 显示全部楼层
回126楼,这是个好方法!

出0入0汤圆

发表于 2011-10-1 17:34:05 | 显示全部楼层
就是喜欢实用的贴!!!

出0入0汤圆

发表于 2011-10-2 19:35:12 | 显示全部楼层
这个帖子好呀! 程序就是应该这样编,才有前途!

出0入0汤圆

发表于 2011-10-2 20:53:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 13:11:19 | 显示全部楼层
好贴留名

出0入0汤圆

发表于 2011-10-3 13:44:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 15:40:28 | 显示全部楼层
好程序,感谢楼主!

出0入0汤圆

发表于 2011-10-3 15:43:00 | 显示全部楼层
好文章,谢谢.

出0入0汤圆

发表于 2011-10-3 16:58:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 17:02:01 | 显示全部楼层
今天才看到这么经典的帖子

出0入0汤圆

发表于 2011-10-4 23:24:22 | 显示全部楼层
回复【楼主位】linquan315
-----------------------------------------------------------------------

最近在学习DMA 跟FSMC  单个的己经搞定 但是FSMC+DMA 结合一起 就出问题了!!!

出0入0汤圆

发表于 2011-10-5 08:47:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-10 10:33:34 | 显示全部楼层
向楼主学习

出0入0汤圆

发表于 2011-10-10 11:14:56 | 显示全部楼层
mark zhi

出0入0汤圆

发表于 2011-10-10 19:53:30 | 显示全部楼层
回复【楼主位】linquan315
-----------------------------------------------------------------------

深入的学习一下。。

出0入0汤圆

发表于 2011-10-14 10:11:08 | 显示全部楼层
精品,谢谢发布!

出0入0汤圆

发表于 2011-10-14 14:18:51 | 显示全部楼层
Very Good

出30入0汤圆

 楼主| 发表于 2011-10-18 23:48:40 | 显示全部楼层
加IIC的移植模板,全部是用中断完成,占用极低的内存,同时针对aT24C16等芯片全部实行了页编写,其效率大大高于单字节的编写。由于最近实在太忙,工程文档稍后奉上。
Mega16的IIC(ICC版本)ourdev_686213N8TZGQ.rar(文件大小:959K) (原文件名:ICCAVR.rar)

在任意数量数据 (原文件名:1.JPG)


在任意数量数据 (原文件名:2.JPG)


接收任意数量数据 (原文件名:3.JPG)


接收任意数量数据 (原文件名:4.JPG)

出0入0汤圆

发表于 2011-10-19 09:43:57 | 显示全部楼层
感谢分享,受教良多。

出0入0汤圆

发表于 2011-10-19 10:21:09 | 显示全部楼层
牛人啊。不过有个问题。我看到DMA和TIM2中断的优先级这个地方怎么和你的标注不一致?
没见到中断分组,优先级和你标注的也不一致。
是不是需要改动?

出0入0汤圆

发表于 2011-10-19 13:24:18 | 显示全部楼层
楼主,我参照你的代码,mega128的,在icc下编译不通过啊?

出0入0汤圆

发表于 2011-10-19 13:37:04 | 显示全部楼层
好贴 保存

出0入0汤圆

发表于 2011-10-19 14:51:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-19 15:00:46 | 显示全部楼层
MARK一下

出0入0汤圆

发表于 2011-10-19 15:07:19 | 显示全部楼层
好帖....

出30入0汤圆

 楼主| 发表于 2011-10-19 21:54:22 | 显示全部楼层
回复【154楼】grant-liao
-----------------------------------------------------------------------

以程序为准吧,注释我比较马虎,有的地方没有改,毕竟大家时间有限,这个东西没有钱赞助。

出30入0汤圆

 楼主| 发表于 2011-10-19 22:07:29 | 显示全部楼层
回复【155楼】cn_fisher
-----------------------------------------------------------------------

你说了几句话我就知道你存在以下几个问题:
(1)请问你看过Mega128和Mega16的数据手册了没有呢,我估计没有,文件名里写的很清楚,Mega16的ICCAVR版本,Mega16与Mega128的大部分寄存器不一样,向量也不一样,那么Mega16的程序原封不动照抄到Mega128肯定一堆错误。
(2)ICCAVR的编译器不支持动态的编译器路径检测,我的编译器装在D盘ICC文件目录下,你的估计不是,所以你得改下编译器、头文件、库文件路径,你改了没有呢??
这样的拿来主义不可取啊兄弟,这样怎么提高呢。

出0入0汤圆

发表于 2011-10-21 10:10:38 | 显示全部楼层
回复【161楼】linquan315
-----------------------------------------------------------------------

我只用过mega128,昨天把数据手册又过了一遍(幸好手头上有示波器),终于移值成功了。我是自己新建了一个工程。不过关于动态内存的理解还是不够深刻,我会继续努力的!!多谢楼主的批评!!希望阿莫给此贴至酷!!!

出0入0汤圆

发表于 2011-10-24 00:46:17 | 显示全部楼层
marker

出0入0汤圆

发表于 2011-11-2 23:20:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 00:13:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 00:14:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 08:48:29 | 显示全部楼层
大清早的发现不少好帖子,果断标记

出0入0汤圆

发表于 2011-11-10 17:55:36 | 显示全部楼层
markonce

出0入0汤圆

发表于 2011-11-11 19:41:07 | 显示全部楼层
好贴,谢谢楼主分享,下载拜读。

出0入0汤圆

发表于 2011-11-11 20:47:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-12 10:08:28 | 显示全部楼层
这样写虽然复杂了点,但软件模块化了,方便移植。内存管理讲得非常好,受益良多

出0入0汤圆

发表于 2011-11-19 19:47:41 | 显示全部楼层
移植过3.4的库文件,当初就是参考库系统的东西。看来确实值得借鉴!~

出0入0汤圆

发表于 2011-11-19 23:40:02 | 显示全部楼层
mark

出15入9汤圆

发表于 2011-11-19 23:51:49 | 显示全部楼层
让我重新理解了串口,谢谢。

出0入0汤圆

发表于 2011-11-20 00:34:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-20 21:35:12 | 显示全部楼层
公司产品上用的也是环形结构,但一直不理解为什么要用

出0入0汤圆

发表于 2011-11-20 22:10:54 | 显示全部楼层
用串口用的这么用心真不容易啊!

出0入0汤圆

发表于 2011-11-20 22:16:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-21 09:39:32 | 显示全部楼层
学习了。好好看看。

出0入30汤圆

发表于 2011-11-21 10:56:44 | 显示全部楼层
讲得很不错。

出0入0汤圆

发表于 2011-11-21 12:46:14 | 显示全部楼层
这种程序结构是做好的,经典帖

出0入0汤圆

发表于 2011-11-26 16:17:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-26 22:30:29 | 显示全部楼层
mark

出75入4汤圆

发表于 2011-12-3 09:13:27 | 显示全部楼层
这个要标记下。

出0入0汤圆

发表于 2011-12-3 09:28:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-3 11:31:10 | 显示全部楼层
看此贴,做记号,慢慢研究

出0入0汤圆

发表于 2011-12-3 11:33:35 | 显示全部楼层
看此贴,做记号,慢慢研究

出0入0汤圆

发表于 2011-12-3 11:34:13 | 显示全部楼层
看此贴,做记号,慢慢研究

出0入0汤圆

发表于 2011-12-6 21:55:48 | 显示全部楼层
mark~~~

出0入0汤圆

发表于 2011-12-7 15:28:24 | 显示全部楼层
果断mark

出0入0汤圆

发表于 2011-12-19 12:23:29 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2011-12-20 14:04:19 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2011-12-20 14:19:19 | 显示全部楼层
回头看看!!!

出0入0汤圆

发表于 2011-12-20 16:28:04 | 显示全部楼层
这个支持一下,哈哈

出0入0汤圆

发表于 2011-12-21 23:34:53 | 显示全部楼层
学习了;

出0入0汤圆

发表于 2011-12-21 23:44:19 | 显示全部楼层
写的不错。

出0入0汤圆

发表于 2011-12-22 10:34:50 | 显示全部楼层
好贴要顶

出0入0汤圆

发表于 2011-12-23 18:05:24 | 显示全部楼层
好东西。。

出0入0汤圆

发表于 2011-12-26 14:22:46 | 显示全部楼层
回复【104楼】fomula
稍微编辑了下,方便需要打印研究,仔细学习,方便不能随时上网的同学。
stm32串口驱动(拼音检索测试通过)(环形队列+内存动态分配+dma) (原文件名:stm32串口驱动.pdf)  

-----------------------------------------------------------------------

呵呵,好人

出0入0汤圆

发表于 2011-12-28 04:41:59 | 显示全部楼层
mark

出200入0汤圆

发表于 2011-12-28 10:09:16 | 显示全部楼层
不错,记号
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 19:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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