打印
[STM32F1]

串口来发送帧的程序

[复制链接]
777|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stly|  楼主 | 2022-1-2 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下,用stm32串口发送这几个数据,电压和电流是未知的,还必须还这个帧的格式写,串口发送这个帧的程序咋写?

使用特权

评论回复
沙发
heweibig| | 2022-1-2 11:06 | 只看该作者
哪儿啊?我怎么没有找到。。。

使用特权

评论回复
板凳
shimx| | 2022-1-2 11:08 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
地板
stly|  楼主 | 2022-1-2 11:10 | 只看该作者
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);
这个程序有误,望大神不惜赐教

使用特权

评论回复
5
stly|  楼主 | 2022-1-2 11:13 | 只看该作者
这个自己写的,不合适

使用特权

评论回复
6
yinxiangh| | 2022-1-2 11:15 | 只看该作者

估计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);

使用特权

评论回复
7
午夜粪车| | 2022-1-2 11:19 | 只看该作者
:dizzy:  表示要吐了    0X360X34 两个十六进制字节   先转成ASC码10进制6和4   然后又拼合转回十六进制 0X64  最后意思就是0X64对应的值100

使用特权

评论回复
8
zhenykun| | 2022-1-2 11:22 | 只看该作者
恩恩,result是电压,result是电流,试了一下你的程序合适了,谢谢了

使用特权

评论回复
9
stly|  楼主 | 2022-1-2 11:25 | 只看该作者
对啊,这个也把我纠结坏了

使用特权

评论回复
10
zwll| | 2022-1-2 11:25 | 只看该作者
Modbus ASCII格式

使用特权

评论回复
11
chuxh| | 2022-1-2 11:31 | 只看该作者
类似于modbus ASCII。缺少ID啊。自定的协议吗?

使用特权

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

使用特权

评论回复
13
renyaq| | 2022-1-2 11:42 | 只看该作者
因为你在发送前没有判断标志位、、、

使用特权

评论回复
14
jiajs| | 2022-1-2 11:45 | 只看该作者

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

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

使用特权

评论回复
15
chuxh| | 2022-1-2 11:46 | 只看该作者
看21ic 公开课 stm32入门到精通 大面积讲串口...你要的里面讲过...

使用特权

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

使用特权

评论回复
17
morrisk| | 2022-1-2 11:51 | 只看该作者
这个需要自己封装吧

使用特权

评论回复
18
dengdc| | 2022-1-2 11:55 | 只看该作者
发送前有没有判断标志位

使用特权

评论回复
19
chenjunt| | 2022-1-2 11:57 | 只看该作者
加标志位啊,这个自己可以定义一个简单的协议

使用特权

评论回复
20
dingy| | 2022-1-2 11:59 | 只看该作者
可以用串口引脚发送给485芯片,加modbus协议啊

使用特权

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

本版积分规则

433

主题

7058

帖子

0

粉丝