OpenEdv-开源电子网

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

STM32F103ZET6 USART1发送数据帧怎么弄

[复制链接]

12

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2014-12-26
在线时间
28 小时
发表于 2016-6-2 19:53:14 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 huaiqiao 于 2016-6-2 19:55 编辑

是这样的,usart1要给上位机发送回应数据,
但是usart1给上位机发送的数据帧有定义


命令帧的结构及说明
帧的结构:(共6字节,十六进制表示)FE  FA 00  XX  XX  XX
序号        帧域        长度及规定        说明
1        帧头        2字节:  FE FA          FEH  FAH定义为帧头,作为一帧开始的标识。
2        应答        1字节:  00        00H表示上行应答。
3        数据        2字节: 应答数据         第一字节=XXH低五位表示当前状态;对应回应状态;其余位和代码未定义。第二字节备用,未定义。
4        帧尾        1字节:校验和        帧尾,为2、3中命令和数据3字节之和的低八位值。


另一方面,usart1的初始化也弄好了,想通过中断方式来处理。

1.png


但是向上位机发送数据帧,没什么思路。能提供点思路么?




最佳答案

查看完整内容[请看2#楼]

好的,十分感谢。 能把工程发我看一下参考下么(涉及到其他的您可以删除,我只看usart的这部分)。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2014-12-26
在线时间
28 小时
 楼主| 发表于 2016-6-2 19:53:15 | 显示全部楼层
zhuifeng8911 发表于 2016-6-3 08:57
这个和你的差不多,供你参考。
[mw_shl_code=c,true]// ----------------------------------------------- ...

好的,十分感谢。
能把工程发我看一下参考下么(涉及到其他的您可以删除,我只看usart的这部分)。651075843@qq.com
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-6-3 08:57:22 | 显示全部楼层
这个和你的差不多,供你参考。
[mw_shl_code=c,true]// --------------------------------------------------------- //
// 函数名称:SendCom
// 函数说明: 发送指令
// 输入参数: ucComType 指令类型
//           ucCom     指令
//           paucBuf   数据
//           ucLen     数据长度,不包含指令类型和指令
// 输出参数: 无
// 返回值:   无
// 历史记录:     
//     <作者>    <时间>      <修改记录>
//   
// --------------------------------------------------------- //
void SendCom(uint8 ucComType,uint8 ucCom,uint8 *paucBuf,uint8 ucLen)
{
    uint8 aucTemp[COMMUNICA_BUF_LEN] = {0};
    if((ucLen+ADDITION_LEN)>COMMUNICA_BUF_LEN)
    {
        TRACE("SendCom DataLen error!\r\n");
        return;
    }
    aucTemp[0] = PACK_TAG;       //包头
    aucTemp[1] = PWR_BOARD_TYPE; //设备类型
    aucTemp[2] = ucLen+2;        //数据长度,加2(指令类型和指令的长度)
    aucTemp[3] = ucComType;      //指令类型
    aucTemp[4] = ucCom;          //指令
    memcpy(&aucTemp[5],paucBuf,ucLen);//填充数据
    aucTemp[5+ucLen] =  ChackSum(&aucTemp[3],aucTemp[2]);//计算校验
    CommunicationSend(aucTemp,ucLen+ADDITION_LEN);//发送数据
}[/mw_shl_code]
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-6-3 10:10:09 | 显示全部楼层
huaiqiao 发表于 2016-6-3 09:38
好的,十分感谢。
能把工程发我看一下参考下么(涉及到其他的您可以删除,我只看usart的这部分)。

嗯,已传

新建文件夹(2016-06-03,10-08-42).rar

6.13 KB, 下载次数: 690

回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-6-3 11:08:07 | 显示全部楼层
界面好花哨
回复

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2016-1-27
在线时间
64 小时
发表于 2016-6-3 11:25:26 | 显示全部楼层

我做BMS,是不是同行?
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-6-3 11:26:57 | 显示全部楼层
seabird624 发表于 2016-6-3 11:25
我做BMS,是不是同行?

这是以前做过的一个一般电源控制板和主板之间的通讯。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-12-22
在线时间
1 小时
发表于 2016-12-22 19:53:07 | 显示全部楼层
跟各位大神学习啦  菜鸟刚开始学
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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