06-单片机模块化程序: 单片机发送数据之中断发送

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git

点击加入群聊【单片机,物联网,上位机】:ESP8266开发交流群

说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系!

说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。

说明3:学会以后,下面的代码可能会跟你一辈子!

说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程!

 

1. 前言

 在单片机通信项目中,经常会使用串口发送数据
这节说一下普通发送和中断发送的区别.

 

2. 思考一下下面的程序

STM32非中断发送

 

 

51单片机非中断发送

 

 

我现在要发送 100个数据

 

 

3. 上面程序的问题

每次调用发送数据函数,就会停在那里,发送完成以后才会往下执行!
假设波特率是9600
那么就是 1/9600 S  也就是 0.1ms发送一位数据,发送一字节数据需要大约 0.9ms (8位数据,1个停止位)
如果发送100个数据,那么延时大约 90ms
如果有好几个地方都使用了上面的方式发送数据,程序的执行效率会大大降低!

 

4. 咱来解决上面的问题

1.STM32发送数据的时候咱用中断发送

 

 

 

 

 

5.测试

 

 

 

 

 

上面的程序只是使用中断发送数据.

我补充一下:
调用 UsartOutStrIT 函数只是把数据地址和数据长度进行了赋值
然后打开了发送中断

 

 

 

 

当前的程序并没有阻塞在那里,而是接着往下运行
只不过会一边执行发送中断一边在主循环运行.

 

6.提醒

1.在使用中断发送以后,需要小心一个地方!
假设是下面这样:
中断发送100字节;
非中断发送数据;

大家知道执行中断发送以后,发送数据交给了中断,程序继续往下执行
然后会接着执行  非中断发送数据;

现在就出问题了,中断发送着数据呢,然后调用了非中断发送
就会造成死机!

要么全部使用中断发送数据,要么等中断发送完,再调用非中断发送数据

2.
中断发送100字节;
中断发送100字节;
如果执行上面的程序也是有问题的!
第一个没有发送完,第二个便会覆盖第一个!

 

7.结语

这节只是抛砖引玉,更加完善的方案请用户接着阅读后面的章节.

给用户提供了51单片机和STM32中断发送数据的例子.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值