1.问个问题,下面程序有没有BUG数组

2.环形队列虽然解决了一开始的中断发送数据覆盖问题,可是呢却引入了新的问题函数

3.而后看看中断发送测试

4.想没想明白是什么问题spa

5.发送数据1 和发送数据2 之间没有延时......3d

咱作程序的时候常常碰到各个地方都须要发送串口的数据,可是若是两个发送函数一个先发送完,另外一个紧接着就发送了.......code

这时候就有问题了,发给一个设备,原本都是正确的数据,可是因为这么一整,数据便成了错的了.blog

好如今解决这个问题队列

主要目的就是发送的数据还须要管理一下,让发送的数据之间有时间间隔内存

好,再加个环形队列开发

这个环形队列呢,记录要发送的数据个数

如今就有两个环形队列,

一个环形队列数存储数据,就是咱一开始用的

另外一个环形队列是存储此次要发送的数据个数

那么每次发送数据变为

而后中断发送里面

Usart1ManageSendDatLen记录的是此次发送的数据个数

发送的时候Usart1ManageSendDatLen -- , 变为0,就说明发完了如今的数据了

发送的数据个数是在定时器里面获取

if(USART_GetITStatus(USART1, USART_IT_TXE) !=RESET)

{if(Usart1ManageSendDatLen>0 && rbCanRead(&Uart1rb)>0)//发送的数据个数大于0 ,环形队列能够读出来数据

{

rbRead(&Uart1rb, &Usart1SendDat, 1);//读取一个数据

USART_SendData(USART1, Usart1SendDat);//发送

Usart1ManageSendDatLen -- ;//发送的数据个数减一

}else{//发送字节结束

USART_ClearITPendingBit(USART1,USART_IT_TXE);

USART_ITConfig(USART1, USART_IT_TXE, DISABLE);

USART_ITConfig(USART1, USART_IT_TC, ENABLE);

Usart1ManageSendDatLen= 0;//发送完成,清零

}

}//发送完成

if (USART_GetITStatus(USART1, USART_IT_TC) !=RESET)

{

USART_ClearITPendingBit(USART1,USART_IT_TC);

USART_ITConfig(USART1, USART_IT_TC, DISABLE);

}

定时器里面

Usart1ManageSendDatLen = 0;说明发送完数据了

而后 利用变量累加进行延时

延时10Ms(自行调节,该变量控制两条数据发送的时间间隔)

读取下保存每次发送多少数据的那个环形队列

取出来此次要发送的数据个数而后赋值给 Usart1ManageSendDatLen

而后打开发送中断

发送中断发送完数据又会出现 Usart1ManageSendDatLen = 0;

而后一直这样工做

这样的话,多条同时填充的数据,发送每一条数据的时间间隔是10Ms

不会再出现整个发出去的状况了!

if(Usart1ManageSendDatLen == 0)//没有在发送数据

{

Usart1ManageSendDelayCnt++;if(Usart1ManageSendDelayCnt>=10)//延迟10Ms

{

Usart1ManageSendDelayCnt= 0;if(rbCanRead(&Uart1rbManage)>0)//是否是有须要发送的数据

{//取出此次要发送的数据个数

rbRead(&Uart1rbManage, &Usart1ManageSendDatLen, 1);

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//打开发送中断

}else{//没有数据发送的时候1Ms判断一次,延迟1Ms

Usart1ManageSendDelayCnt=10;

}

}

}

测试

若是想测试的明显

如今说下如今这个程序带来的新问题

1.发送数据最低延迟 1Ms

其实这个延迟再加点变量就能够解决,可是呢,我怕加多了,你们理解起来困难....

因此先这样吧,有兴趣本身去修改

2.无疑又增长了内存开销

3.这是是我最不肯意的事情

影响了printf一开始使用的中断发送

由于一开始是不停的插入一个数据,而后中断发出去

如今不能够这样了,还须要想办法呀

须要一次性获得printf发送的内容,而后填充到环形队列里面.............

真很差搞的话,仍是用 sprintf 把,把数据序列化到一个数组里面,而后

发送的数据个数 = sprintf(数组,XXXXXXX)

PutData(&Uart1rb,NULL,数组,发送的数据个数);//数据写入环形队列

SendCount[0] = 发送的数据个数;//此次发送的数据个数

PutData(&Uart1rbManage,NULL,SendCount,1);//数据写入环形队列,记录此次要发送的数据个数

单片机实现环形队列_单片机模块化程序: 难道有环形队列串口发送数据就万事大吉了吗...相关推荐

  1. 单片机IO模拟串口发送数据

    单片机IO模拟串口发送数据 由于项目上用的STM32单片机串口资源不够用,但是还是想看调试输出,所以就多引出了一个IO,使用IO模拟串口发送数据的时序来当做串口打印用了,本章实验工程以8bit数据位. ...

  2. 51单片机 串口发送数据(只是发送)

    51单片机 串口发送数据(只是发送)用于调试. #include <reg51.h>#define uchar unsigned char #define uint unsigned in ...

  3. 51单片机:电脑向串口发送数据并控制LED灯

    电脑向串口发送数据后,控制LED灯,并返回发送的数据 程序如下 #include"regx52.h" #include"intrins.h" unsigned ...

  4. python树莓派串口通信实例_树莓派通过串口发送数据

    可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据.树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践.这篇文章教大家如果通过树莓派的串口发送数据. ...

  5. 单片机彩灯移动实验_单片机动态控制64个彩灯实验报告

    目录 一.课题名称---------------------3 二.设计目的---------------------3 三.系统原理图--------------------3 四.方案论证---- ...

  6. 单片机烧录软件编写_单片机技术系列之一:单片机概述

    按控制要求设计好单片机电路原理图后,还要依据电路原理图将实际的单片机电路制作出来.制作单片机电路有两种方法:一种是用电路板设计软件(如Protel99SE软件)设计出与电路原理图相对应的PCB图(印制 ...

  7. 单片机知识点总结框图_单片机原理及应用期末考试必考知识点重点总结

    单片机概述: 单片机是微单片微型计算机的简称,微型计算机的一种. 它把中央处理器( CPU ) , 随机存储器( RAM ) , 只读存储器( ROM ) , 定时器 计数器以及 1\0 接口,串并 ...

  8. 单片机知识点总结框图_单片机基础知识

    什么是单片机: 顾名思义,单片机中的"单片"就是只有一个芯片, "机"就是指计算机,只有有一个芯片,她却具有简单计算机的功能,这就叫做单片机,也教微处理器微控制 ...

  9. 单片机机器周期怎么计算公式_单片机定时器周期计算公式

    定时器是单片机的重要功能模块之一,在检测.控制领域有广泛应用.定时器常用作定时时钟,以实现定时检测,定时响应.定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机.定时和计数的最终功能都是通过计数实现 ...

最新文章

  1. eclipse中启动tomcat出现错误的解决方法
  2. 窗体和控件使用中的注意事项有哪些?
  3. mxnet与pytorch比较 bn层
  4. Echarts地图添加自定义图标
  5. 28 | 堆和堆排序:为什么说堆排序没有快速排序快?
  6. 阿里云释放数据能力 开启大数据元年
  7. 《运营之光》-- 学习笔记(四)
  8. qchart 坐标轴设置_「Qt」利用QChart实现实时动态的曲线数据展示
  9. jquery中checkbox全选失效的解决方法
  10. mysqli_fetch_all() 函数
  11. linux系统手机助手,手机助手Linux版下载
  12. 卡尔曼滤波系列——(二)扩展卡尔曼滤波
  13. 如何练好嗓子 让声音变得浑厚
  14. python 和vba在财务上_Excel,VBA太烦!PowerBI太贵!可以用Python处理公司财务数据并实现可视化吗?...
  15. 凌恩客户文章:16S全长鉴定癌症细胞组织特异性微生物谱
  16. 流形上的微积分和微分形式的可视化导论(一)
  17. java读取配置文件详解
  18. BERT预训练模型的使用
  19. linux协议栈 IPv4之发送过程中的分段处理ip_fragment()
  20. 透明度百分比8位色值

热门文章

  1. STM32 基础系列教程 24 - USB_HID_key
  2. 用WINRAR巧妙分割大压缩包
  3. 【PC工具】更新免费文库文档下载器,免费下载文库文档
  4. 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案
  5. 3、HTML网页基本概念
  6. 深度解析HashMap
  7. Hacking PostgreSQL
  8. 3行代码给你的python提速4倍!
  9. 20161011L04-03老男孩linux运维实战培训-Linux系统的用户和用户组管理-01
  10. FreeMarker 一二事 - 静态模板的使用与生成