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

串口中断接受函数怎么对指令的判断

huihui163 2017-10-16 浏览量:1623
串口中断接受函数怎么对指令的判断,没有校验
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 一般中断程序仅仅是接收串口数据,并将串口数据转移到一个缓存器中,串口协议可以定义一个结束字符,中断接收到这样一个字符表示收到一串指令,此时设定一个标志位。在主函数中会检查这个标志位是否建立,如果建立,则表示一串指令接收完成,进入一个switch语句去检查是否符合协议的内容,进行相应的操作,并清除标志位,等待下次指令。

    复杂的操作一般不会放在中断中处理。


    • 发布于 2017-10-16
    • 举报
    • 评论 5
    • 0
    • 0
huihui163 回复了 赤心木zqw:指令接受完后的一个标志位 回复
赤心木zqw 回复了 赤心木zqw:像很多串口命令要求回车结尾(\r\n)实际上这就是一个结尾标志,在中断中收到\n,检查前一个字符是不是\r,如果是,就可以判断收到一串命令了。 回复
huihui163 回复了 赤心木zqw:主要是这个程序不会写 回复
赤心木zqw 回复了 赤心木zqw:很简单的呀,定义一个全局数组buffer[100](假设这个缓存区100个字节),一个全局变量x,在终端中,buffer[x]=UART_DAT,x++,如果buffer[x]==\n && buffer[x-1]==\r,则收到一串命令,flag=1,在main函数中,if(flag==1) switch(buffer)做判断执行,flag=0,大概这个思路。 回复
huihui163 回复了 赤心木zqw:如果不需要检测R、N的话我就检测帧头和帧尾就可以判断命令接受完 回复

其他答案 数量:9
  • 可以考虑先将整个接受的数据帧全部接收,然后存到一个缓存区里面,再从缓存区取出判断
    • 发布于2017-10-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 用一个队列把从中断里接收到的数据存储起来,在中断外进行数据的解析,具体解析的方法根据你的协议进行考量,没有校验位就抓关键字呗,好好研究下协议
    • 发布于2017-10-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 数据帧处理别放在中断接收里做。中断接收里面只将接收到的数据放到数组里,然后另外做一个函数进行处理。没有校验,就判断帧头、关键字节等数据。
    • 发布于2017-10-16
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 great_CC :能不能简单弄个例程参考一下 回复

  • 获取到数据之后首先存到外部的全局变量(如Data)中,然后在从Data中判断是否有指令的关键字
    • 发布于2017-10-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有校验位,那么如果你自己知道发送的东西也可以认为设置校验位。

    或者放到缓冲器,然后调出来判断也可以。

    • 发布于2017-10-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 一个一个地判断,或者使用协议,例如modbus
    • 发布于2017-10-16
    • 举报
    • 评论 2
    • 0
    • 0
huihui163 回复了 US :能否发个代码 回复
US 回复了 US :怎么发啊,不同芯片函数都不一样 回复

  • 楼主,建议中断ISR中只做数据的接收,同时更新接收数据的长度;协议的解析建议做在独立的接口中,在while(1)大循环中调用。另外对指令的判断,就要按你指令的协议解析了,一般都是比较命令字(命令关键字)来确定接收的数据是什么指令。
    • 发布于2017-10-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 你先把数据收进来,再慢慢处理。不加校检,就检测帧头帧位,再筛选命令
    • 发布于2017-10-17
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 Sourcelink :好的 回复

  • 指令一定是有一个协议的,那么,指令格式应该是知道的,那么,你收到了数据后可以判断指令的内容再进行操作
    • 发布于2017-10-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

串口中断接受函数怎么对指令的判断