• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于串口通信的几个问题

PG_CPZ 2018-10-01 浏览量:1126
最近在看关于串口通信,困扰了我好几天的问题,对于串口通信这个概念还是很模糊,看了很多帖子还是没搞明白1.单片机每次进入中断接收的一组数据是一个字节吗?

2.用XCOM给单片机发送数据它是自动给数据加上0x0d0x0a结尾标志吗?单片机是怎样开始接收这组数据的?
3.我用原子的串口例程改编,想实现如下功能
1.  XCOM发送 ‘1’  LED0开 ,发送‘2’ LED0关
我的过程
我在中断服务函数里面判断接收到的是“1”,or '2'。  定义了两个变量如果是‘1’  flag0=1.如果是‘2’  flag1=1.
在主函数里面判断flag0 flag1的值,然后flag0 flag1置零,并对相应的引脚拉高\拉低电平
发现灯没反应,请问这是我的方法不对还是哪里出了问题
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 首先,单片机串口接收,是按照字节接收的。一个字节一个接收中断。当然你也可以按照一个串口IDLE中断一次(就是连续发送一个数据帧,只触发一次IDLE中断)。如果你不用DMA的话,还是采用一个字节一个中断的方式比较好。


    1、用XCOM软件发送数据,0D 0A是串口软件自动加上的,不是单片机加上的。你可以换个串口调试软件。

    2、针对你的问题,我建议是,在串口中断里面,你将你的串口接收到的数据保存在一个全局变量里面,

    然后在主循环里面将这个全局变量串口发送出来,先实现串口收发。

    如果串口收发成功了,你在调试你的功能,相信你一定可以搞定。

    • 发布于 2018-10-01
    • 举报
    • 评论 0
    • 2
    • 0

其他答案 数量:14
  • 0x0d和0x0a式回车换行,你在XCOM里没键入回车符的话就没有。

    如果你在XCOM里输入1并发送的话你串口收到的是字符1,字符1的值是0x31也即49

    • 发布于2018-10-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 一楼回答已经很详细了

    我补充电XCOM的使用

    QQ图片20181001231120.png

    箭头指向“发送新行”如果勾选的话,会自动加0x0d0x0a——即,回车换行两个符号

    你可去掉勾选


    至于你说的发送1、2的问题,建议设断点调试一下


    • 发布于2018-10-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的想法没有问题,他们说的debug也很好,我说一下关于整个程序的:

    建议把led灯开关直接放到中断处理里面,程序整体结构就简化了很多,就一个中断,容易调试,调试好了,再改回来,像你说的那样,用 flag。

    • 发布于2018-10-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 1每次中断收一个字节

    2 0d 0a是结束符也就是换行

    3你在中断函数直接控制LED看看

    • 发布于2018-10-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 1、是的

    2、这种方式可行

    3、这里最好在调试状态下面,看看串口到底收到了什么样的数据

    • 发布于2018-10-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 判断结束一般都是用0x的0d 0x0a,这个表示数据结束符
    • 发布于2018-10-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口通常使用一字节一个中中断,收到后自己把数据存入缓冲区后进行处理。
    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口通信的方式都是用缓冲区来接收然后再进行数据的对应处理
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个要把你的串口中断进行重新设置,然后获取缓冲区里面的数据
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 0x0d 0x0a结束标志位是看你串口设置和协议的,一般是不会自带的。如果你配置了串口接收函数而单片机没反应的话,那就要检查一下你单片机的串口配置有没有出错,比如数据位,波特率,引脚这些。

    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的串口通信里面是有对应的数据位处理的,检查一下这些地方是否正确
    • 发布于2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口是一个字节接收一个中断的,串口工具里面的发送新行勾选去掉,你的思路是可以实现的。
    • 发布于2018-11-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口可以单独发送数据,你可以按位发送
    • 发布于2018-11-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于串口通信的几个问题