菜鸟写的经验,大佬勿喷!!

最近在搞stm32的接收通信,用的正点原子的例程,打算用串口2进行通信,然后发现各种各样的的问题.比如只能收到一个字符,只能收到首个和末尾两个字符,收到字符时死机…等等一堆问题。
调了一下午,发现。。。原来是我在USART2_IRQHandler中断函数里面用了正点原子的printf();正点原子这个printf函数已经重映射到串口1了,这样的话就相当于在USART2_IRQHandler中断函数里面嵌套了另外一个串口发送中断。问题就是自己定义的usart2中断优先级比printf的优先级还要高,然后就死在USART2_IRQHandler函数里了。。。出现什么只接收一个或两个字符也是这个问题的不同版本(你的printf函数放在不同位置。)

综上所述,在用正点原子提供的例程调试其他串口时,要注意中断优先级,最好不要在串口中断函数里面用printf函数来调试!!
最后放一下我的串口接收字符串函数,记得千万别用printf去调试!!!谨记

char USART_ReceiveString[50];                                                    //缓存字符数组
int Receive_sum = 0;
void USART2_IRQHandler(void) // 串口2中断服务函数
{u8 res;if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾){res =USART_ReceiveData(USART2);   //读取接收到的数据USART_ClearITPendingBit(USART2, USART_IT_RXNE);if(res!=0x0d&&res!=0x0a){if(Receive_sum==0){memset(USART_ReceiveString,0,sizeof(USART_ReceiveString));//当重新接受时重置字符串}USART_ReceiveString[Receive_sum]=res;Receive_sum++;}else//接收到结束符{Receive_sum=0;}    }
}

串口发送字符串函数

void USART_SendString(USART_TypeDef* USARTx, char *DataString)
{int i = 0;USART_ClearFlag(USARTx,USART_FLAG_TC);                                      //发送字符前清空标志位(否则缺失字符串的第一个字符)while(DataString[i] != '\0')                                                //字符串结束符{USART_SendData(USARTx,DataString[i]);                                  //每次发送字符串的一个字符while(USART_GetFlagStatus(USARTx,USART_FLAG_TC) == 0);                  //等待数据发送成功USART_ClearFlag(USARTx,USART_FLAG_TC);                                    //发送字符后清空标志位i++;}
}

stm32串口接收不到数据的一些问题相关推荐

  1. STM32串口接收不定长数据原理与源程序

    **STM32串口接收不定长数据原理与源程序**CSDN上有很多关于STM32串口接收不定长数据的文章,但实际使用后发现照搬他们的代码,程序根本就不能正确接收数据,其中最关键的一句有问题.其余内容完全 ...

  2. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  3. STM32串口接收粉尘传感器数据

    本文章主要记录STM32实现对粉尘传感器的数据采集及简单处理. 材料: 1.正点原子Mini开发板STM32f103RC 2.ZH03A激光粉尘传感器 3.USB TO TTL线(就是烧写51单片机的 ...

  4. STM32串口接收数据

    参考串口接收中断处理函数: //------------------------------------------------------------------ //函数名:void USART1 ...

  5. STM32串口接收数据处理方法

    STM32串口接收数据处理方法 STM32串口接收定长数据处理方法 STM32串口接收定长数据的处理方法非常简单,我目前做项目都是用的这个,也可用做处理MODBUS协议,直接上代码. void USA ...

  6. openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

    编者注: 单片机串口接收不定长数据时,必须面对的一个问题为:怎么判断这一包数据接收完成了呢?常见的方法主要有以下两种: 1.在接收数据时启动一个定时器,在指定时间间隔内没有接收到新数据,认为数据接收完 ...

  7. 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码 使用方法 源码 串口接口文件 环形缓冲区接口文件 移植图示 使用涉及4个文件, UART_Port.c UART_Port.h Circul ...

  8. 串口接收不定长数据的几种方式

    在阅读本文前,你需要先做到串口成功接收一个数据(相信这一点是很简单的)  这几天简单总结了一下用串口怎么接收一帧数据的办法,个人使用的有三种,下面逐一介绍: 第一种:使用中断的方式: 这种在数据接收不 ...

  9. ZYNQ进阶之路14--PS端uart串口接收不定长数据

    ZYNQ进阶之路14--PS端uart串口接收不定长数据 导语 ZYNQ串口简介 实现步骤 导语 繁忙的博主又来了,本节我们实现一个比较简单的东西:串口.之前的章节中我们也有使用PS端的串口进行收发数 ...

最新文章

  1. RocketMQ实战(四)
  2. pytorch 维度练习
  3. java 监听队列_spring+activemq实战之配置监听多队列实现不同队列消息消费
  4. [BUUCTF-pwn]——pwn1_sctf_2016
  5. HTTP 头部字段 Cache Control max-age = 0 和 no-cache 的区别
  6. mysql实战33 | 我查这么多数据,会不会把数据库内存打爆?
  7. 告诉你银行在年底为存储做的小动作
  8. Vue —— vuex
  9. AudioParam
  10. linux lvm界面,Linux使用入门教程之LVM
  11. 软件学院本科毕业设计论文格式详解
  12. 8位数码管静态显示c语言,数码管静态显示介绍_8位数码管静态显示程序解析
  13. mac 安装软件报错
  14. 代码审计| HDWiki 漏洞(一)
  15. Pandas熊猫框架
  16. 嵌入式:交换指令之SWP,MRS,MSR
  17. dns劫持 tplink_解决路由器DNS劫持的两种方法
  18. Unity 之 ShaderGraph 实现自发光和能量护盾效果入门级教程
  19. 关于坐标系和投影的相关知识探讨
  20. shell脚本 -d 是目录文件,那么-e,-f等说明

热门文章

  1. 暑期训练DAY9(贪心)
  2. 软件随想录(local.joelonsoftware.com/wiki)-2000年05月24日 策略书之二:鸡生蛋蛋生鸡问题 - Strategy Letter II: Chicken-and-Eg
  3. DPDK中文-DPDK工具(pdump)
  4. Word转PDF,PNG,HTML神器XDOC
  5. Vue生命周期执行顺序
  6. js实现新浪微博评论
  7. Extreme Points and Extreme Rays
  8. idea中好用的十大快捷键设置
  9. C语言实现Unix时间戳和北京时间的相互转换(已编译,亲试可用~)
  10. php jsapi支付,支付宝jsapi支付