打印
[STM32F1]

串口发送这个帧的程序咋写?

[复制链接]
967|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stly|  楼主 | 2017-2-24 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下,用stm32串口发送这几个数据,电压和电流是未知的,还必须还这个帧的格式写,串口发送这个帧的程序咋写?
沙发
chuxh| | 2017-2-24 21:40 | 只看该作者
哪儿啊?我怎么没有找到。。。

使用特权

评论回复
板凳
stly|  楼主 | 2017-2-24 21:41 | 只看该作者
[size=13.333333969116211px][url=][/url]

使用特权

评论回复
地板
xxrs| | 2017-2-24 21:42 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
stly|  楼主 | 2017-2-24 21:43 | 只看该作者
  USART_SendData(USART1,0x3A);
   USART_SendData(USART1,result);
   USART_SendData(USART1,result1);
   USART_SendData(USART1,result+result1);
   USART_SendData(USART1,0x0D);
   USART_SendData(USART1,0x0A);
这个程序有误,望大神不惜赐教

使用特权

评论回复
6
stly|  楼主 | 2017-2-24 21:44 | 只看该作者
这个自己写的,不合适

使用特权

评论回复
7
yinxiangh| | 2017-2-24 21:45 | 只看该作者
估计result是电压,result1是电流。
USART_SendData(USART1,0x3A);
   USART_SendData(USART1,(result>>4)+0x30);
USART_SendData(USART1,(result&0x0f)+0x30);
   USART_SendData(USART1,(result1>>4)+0x30);
USART_SendData(USART1,(result1&0x0f)+0x30);
   USART_SendData(USART1,((result+result1)>>4)+0x30);
USART_SendData(USART1,((result+result1)&0x0f)+0x30);
   USART_SendData(USART1,0x0D);
   USART_SendData(USART1,0x0A);

使用特权

评论回复
8
ousj| | 2017-2-24 21:46 | 只看该作者
:dizzy:  表示要吐了    0X360X34 两个十六进制字节   先转成ASC码10进制6和4   然后又拼合转回十六进制 0X64  最后意思就是0X64对应的值100

使用特权

评论回复
9
stly|  楼主 | 2017-2-24 21:48 | 只看该作者
恩恩,result是电压,result是电流,试了一下你的程序合适了,谢谢了

使用特权

评论回复
10
stly|  楼主 | 2017-2-24 21:49 | 只看该作者
对啊,这个也把我纠结坏了,太恶心了

使用特权

评论回复
11
zwll| | 2017-2-24 21:50 | 只看该作者
Modbus ASCII格式

使用特权

评论回复
12
chuxh| | 2017-2-24 21:51 | 只看该作者
类似于modbus ASCII。缺少ID啊。自定的协议吗?

使用特权

评论回复
13
stly|  楼主 | 2017-2-24 21:52 | 只看该作者
恩恩,是自定的协议,上面的程序挺合适的,只要在发送每一句数据的时候加一个延时程序就没问题了,不延时我试了一下还真不行

使用特权

评论回复
14
renyaq| | 2017-2-24 21:53 | 只看该作者
因为你在发送前没有判断标志位、、、

使用特权

评论回复
15
stly|  楼主 | 2017-2-24 21:54 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

评论回复
16
wuhuikai| | 2017-2-24 22:33 | 只看该作者
本帖最后由 wuhuikai 于 2017-2-24 22:36 编辑

uint8_t voltage=100;
uint8_t current=200;
uint8_t CheckSum=0;

CheckSum=voltage+current;
printf("\"%03u%03u%03u\r\n",voltage,current,CheckSum);

使用特权

评论回复
17
icecut| | 2017-2-25 00:04 | 只看该作者
看21ic 公开课 stm32入门到精通 大面积讲串口...你要的里面讲过...
或者点我签名

使用特权

评论回复
18
sddp001| | 2017-2-25 12:07 | 只看该作者
基础太差,先写点儿简单的吧。

使用特权

评论回复
19
世界心| | 2017-2-25 12:20 | 只看该作者
这个最好先建立一个数组空间,将需要发送的数据存储在数组空间中。完成之后,关闭其他高优先级的中断,调用串口发送函数一次发送。单片机上是16进制,而PC机通常需要ASCII码,所以PC机上看到的1、2、3之类的数字其实是由0x31、0x32、0x33这些ASCII码转换来的。同样要把单片机中的0x64(即100)发送给PC机,就需要发送(1+0x30、0+0x30、0+0x30)三个ASCII码值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

7058

帖子

0

粉丝