OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5423|回复: 15

关于STM32F103用串口调试助手发送指令控制继电器

[复制链接]

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
发表于 2016-12-15 13:54:01 | 显示全部楼层 |阅读模式
1金钱
关于STM32F103怎么用串口调试助手发送指令控制继电器,自己写协议,然后串口助手发送,继电器操作成功,返回相应的指令,谁搞过呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2015-7-8
在线时间
46 小时
发表于 2016-12-15 13:54:02 | 显示全部楼层
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-11-24
在线时间
13 小时
发表于 2016-12-15 14:10:10 | 显示全部楼层
串口发送你自己定义的指令集,至于控制继电器,得在STM32 里面收到对应的指令去完成相对应的操作吧。
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-15 14:59:21 | 显示全部楼层
xucao514 发表于 2016-12-15 14:10
串口发送你自己定义的指令集,至于控制继电器,得在STM32 里面收到对应的指令去完成相对应的操作吧。

是的,我现在就是卡到协议这个地方,怎么写个规约让继电器开通之后给我返回个成功指令
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10846
金钱
10846
注册时间
2014-6-12
在线时间
1037 小时
发表于 2016-12-15 15:36:17 | 显示全部楼层
AV8D 发表于 2016-12-15 14:59
是的,我现在就是卡到协议这个地方,怎么写个规约让继电器开通之后给我返回个成功指令

多看看其他成熟的协议
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-15 15:45:08 | 显示全部楼层
xuyaqi 发表于 2016-12-15 15:36
多看看其他成熟的协议

有相关的例程能参考吗,大神
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-15 16:04:40 | 显示全部楼层
AV8D 发表于 2016-12-15 15:45
有相关的例程能参考吗,大神

STM32F103 自定义协议 控制继电器
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-11-24
在线时间
13 小时
发表于 2016-12-15 16:05:42 | 显示全部楼层
你先别搞那么复杂, 先发个控制指令过去, 等那边返回一个字符串到串口就行了。 证明你这个流程没问题。 再去搞什么规约,  规约这个东西考虑的东西有点多。  不是公司硬性要你自己写规约,最好套用一个成熟的规约。 不然有你好受的。
回复

使用道具 举报

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
发表于 2016-12-15 16:19:19 | 显示全部楼层
这个协议的话 应该算是简单的  就是你发送控制指令过去  stm32收到  开继电器   动作完成后 给pc发送一个成功动作的指令   这些所以得指令数据就可以自己设定了  
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-15 17:04:52 | 显示全部楼层
xucao514 发表于 2016-12-15 16:05
你先别搞那么复杂, 先发个控制指令过去, 等那边返回一个字符串到串口就行了。 证明你这个流程没问题。 再 ...

我现在就是弄了一个USART1的发送和串口中断接收的程序,假如我调试助手发送1,就回复1,这个没有问题。
回复

使用道具 举报

3

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2015-7-8
在线时间
46 小时
发表于 2016-12-15 17:23:03 | 显示全部楼层
格式:
字节号        1        2        3        4        5        6        \\\        n-4        n-3        n-2        n-1        n
值(HEX)        7B        7C        XX        XX        XX        XX        XX        XX        XX        XX        7C        7D
意义        头        长度        命令        数据        校验        尾

一、        通信波特率:9600,8位数据位,一个停止位,无奇偶较验,

二、        命令前两字节为命令头,分别为ASSII码:{、|;

三、        所有字节为十六进制数,每字节的最大值为 0x63;

四、        命令第3、4字节为命令长度,其值等于 命令码 + 数据码;
设长度命令长度为: L,BYTE3表示第三字节,BYTE4表示第四字节,……,那么:
L = BYTE3 * 100 + BYTE4=BYTE5 + BYTE6 + BYTE(….) + BYTE(n);

五、        第5字节为命令码;

六、        第6 ~ n-4 字节为数据;

七、        第n-3、n-2字节为校验码,由命令码与数据字节按异或运算而来;
设BYRE5~ BYTE(n-4) 分别为第 5 ~ n-4 字节,那么:
BYTE(n-3) * 100 + BYTE(n-2) =BYTE5 XOR BYTE6 XOR BYTE(….) XOR BYTE(n-4);

八、        第n-1、n字节为命令尾,分别为ASSII码:|、};
回复

使用道具 举报

3

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2015-7-8
在线时间
46 小时
发表于 2016-12-15 17:29:05 | 显示全部楼层
命令处理(仅供参考)        bit CommandLine_Active( unchar *CL )
        {
                switch( *(CL+4) )                                                        
                {
                        case 0x0A:
                                break;                                                               
                        case 0x0B:                                                               
                                break;

                        case 0x0C:                                                               
                                break;

                        case 0x0D:                                                               
                                break;
                        default:                                                               
                                return 0;
                                
                }

                return 1;                        
        }
回复

使用道具 举报

3

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2015-7-8
在线时间
46 小时
发表于 2016-12-15 17:32:10 | 显示全部楼层
       
命令较验(仅供参考)
void CommandLineVerif( )
        {
                unsigned char i=5,rXor=0;

                rXor= RxBuf[4];                                       

                do
                {
                        rXor= rXor ^ RxBuf[i];
                        i++;

                }while( i < (rFlag - 5) );                               

                if( rXor == (RxBuf[rFlag-5] * 100 + RxBuf[rFlag-4]) )               
                {
                        if( CommandLine_Active( RxBuf )) ......;                                               
                }
                       
        }
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-15 17:34:15 | 显示全部楼层
寂青山 发表于 2016-12-15 17:32
命令较验(仅供参考)
void CommandLineVerif( )
        {

哦,好的,谢谢你,我参考一下!
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10846
金钱
10846
注册时间
2014-6-12
在线时间
1037 小时
发表于 2016-12-16 11:21:08 | 显示全部楼层
AV8D 发表于 2016-12-15 15:45
有相关的例程能参考吗,大神

协议与例程是两码事,你上面说“我现在就是卡到协议这个地方”协议是为了通信双方明白对方发来数据的含义而制定的文字条文,比如ModBus协议,可不是例程,不知你到底要什么。
回复

使用道具 举报

4

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-10-27
在线时间
47 小时
 楼主| 发表于 2016-12-16 11:51:51 | 显示全部楼层
xuyaqi 发表于 2016-12-16 11:21
协议与例程是两码事,你上面说“我现在就是卡到协议这个地方”协议是为了通信双方明白对方发来数据的含义 ...

关于STM32基于Modbus协议的例程资料,工控继电器类的,我想移植一下,找了好久也没找到相关代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 12:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表