串口同时收发数据卡死问题

单片机发送数据时最后会通过等待发送空标志位来等待数据发送完成,即通过uart往外发数据时,会通过“while(TI==0);”卡死等待数据发送完成,若在数据发送完成后,先进入UART发送完成中断,会将TI标志清零,这个 时候,程序就会卡死在“while(TI==0);”,您可以在“while(TI==0);”加入超时判断机制,当超过一定的时间如果还没有等到TI标志置1,就强制退出“while(TI==0);”。此方法不好控制时间计时的最小间隔。可在中断函数中不清除TI标志位,在数据发送完成后由硬件清零。

原文地址:https://www.cnblogs.com/jt930413/p/11016634.html

时间: 2024-10-13 17:13:38

串口同时收发数据卡死问题的相关文章

android4.2串口jni收发数据(基于自定义协议)

代码已经验证过,没问题 ! 代码层次结构: |-----serial_communication_class--- |                     |-------src--------- |                                  |------com------ |                                             |----object----- |                                

Arduino通过串口监视器收发数据

在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一个缓存字符串中.当收到换行符时就将缓存字符串 输出到串口监视器并将字符串清空. 本例程的最好测试方式是使用不断发送NMEA 0183语句的GPS接收器模块 代码公开. */ String inputString = ""; // 缓存字符串 boolean stringComplete =

串口收发数据时字符、十六进制、二进制格式详细区分

在使用串口调试助手时发送和接收数据都是以字节 (Byte) 为单位,并且可以选择字符.十六进制.二进制三种收发格式 ,那么这三种格式究竟怎样区分呢? 首先我们来明确一个概念 :串口收发数据的单位 '' 字节 (Byte) '' ,   1Byte = 8 bits , 串口收发数据格式一般为  1bit起始位(一般为0) + 8bits 数据位(一字节) +1bit校验位(可有可无) +1bit结束位(一般为1) 下面逐一区分三种收发格式: (1) 十六进制:   由于1位十六进制数位宽为 4b

STM32F407的串口采用DMA收发数据

?? STM32F407的串口采用DMA收发数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: stm32f407VGT6 说明: 之前用STM32F103实现DMA收发串口数据,现在项目中采用STM32F407,所以将此机制移植到F4上. STM32F103上用DMA收发串口数据文章: STM32的串口采用DMA方式发送数据测试 STM32的串口采用DMA方式接收数据测试 源代码: 串

dsp28377控制DM9000收发数据

首先感谢上一篇转载文章的作者给出的参考,下面是一些自己在调试过程中的一些步骤: 首先把代码贴上来: //---------------------------------------------------------------------------------------------//DSP28377 利用EMIF控制网口DM9000芯片收发数据//----------------------------------------------------------------------

用IO模拟串口协议发送数据

<pre name="code" class="cpp">//文件usend.h #ifndef _USEND_H_ #define _USEND_H_ //====红外接收相关定义============================= #define PuTx_High (P_uTx = 1) //数据高 #define PuTx_Low (P_uTx = 0) //数据低 #define V_SendDatNum 6//6 //发送数据字节数 /

C# ---串口发送接收数据实例

硬件设备: pH/ORP 电导率/TDS/盐度 溶解氧 2000/3000/5000/5500 变送器/控制器 设定: P-08:RS-485输出设定 P-11:485传输设定 设定这俩种的ID号 根据ID,对串口发送请求:接收串口返回的数据. C# ---串口发送接收数据实例

openVswitch(OVS)源代码分析之工作流程(收发数据包)

前面已经把分析openVswitch源代码的基础(openVswitch(OVS)源代码分析之数据结构)写得非常清楚了,虽然访问的人比较少,也因此让我看到了一个现象:第一篇,openVswitch(OVS)源代码分析之简介其实就是介绍了下有关于云计算现状和openVswitch的各个组成模块,还有笼统的介绍了下其工作流程,个人感觉对于学习openVswitch源代码来说没有多大含金量.云计算现状是根据公司发展得到的个人体会,对学习openVswitch源代码其实没什么帮助:openVswitch

dsp28377控制DM9000收发数据——第二版程序,能够实现手术功能,但是容易掉帧;使用读取中断寄存器的方式判断中断

G:\controlSUITE\device_support\F2837xD\v180\F2837xD_examples_Cpu1\emif1_16bit_asram\cpu01\emif1_16bit_asram.c 2016年11月22日 20:35//---------------------------------------------------------------------------------------------//DSP28377 利用EMIF控制网口DM9000芯