OpenEdv-开源电子网

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

求STM32F407与rs485通讯例程

[复制链接]

2

主题

9

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-2-26
在线时间
5 小时
发表于 2020-2-26 11:12:03 | 显示全部楼层 |阅读模式
1金钱
想利用RS485通讯协议STM32对电池百分比读取,并显示出电池百分比,希望各位能列出一个例程或者思路。

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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10567
金钱
10567
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-2-26 12:12:56 | 显示全部楼层
原子这边的485例程是实现两板子间的485通信,不大符合你的要求
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-2-26 16:41:29 | 显示全部楼层
你电池支持对外RS485通信?
协议是MODBUS协议?
一分耕耘一分收获。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-2-26
在线时间
5 小时
 楼主| 发表于 2020-2-26 17:44:26 | 显示全部楼层
电池用的是Rs485协议,而且STM32只需发送一次指令,电池每隔1S就应答
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-2-26 20:03:53 | 显示全部楼层
那就不是一问一答机制了,那就一帧指令数据,开个任务接收电池发送过来的数据帧就可以了
一分耕耘一分收获。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-2-26
在线时间
5 小时
 楼主| 发表于 2020-2-28 09:50:58 | 显示全部楼层
yklstudent 发表于 2020-2-26 20:03
那就不是一问一答机制了,那就一帧指令数据,开个任务接收电池发送过来的数据帧就可以了

但是数据发送不出去,也接受不到是因为什么呢C:\Users\HP\Desktop
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-2-26
在线时间
5 小时
 楼主| 发表于 2020-2-28 09:51:33 | 显示全部楼层
yao12138 发表于 2020-2-28 09:50
但是数据发送不出去,也接受不到是因为什么呢

int main(void)
{ u8 t;
        u8 len;       
        u8 key;
        u8 i=0;
        u8 num[8]={0x3A,0x16,0xff,0x01,0x00,0x20,0x0d,0x0a};
        u8 RS485_RX_BUF[24];//Ìî³ä·¢ËÍ»º³åÇø
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
        delay_init(168);   //³õʼ»¯ÑÓʱº¯Êý
        uart_init(115200);        //³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200
        RS485_Init(9600);                //³õʼ»¯RS485´®¿Ú2
       
        while(1)
        {       
                        USART_ClearFlag(USART2, USART_FLAG_TC);
                        RS485_Send_Data(num,8);//·¢ËÍ5¸ö×Ö½Ú

                                                       
                        if(key>24)//½ÓÊÕµ½ÓÐÊý¾Ý
                                {
                                        RS485_Receive_Data(RS485_RX_BUF,&key);
                                        for(i=0;i<24;i++)
                                        printf("Receive Data:%d\r\n",RS485_RX_BUF[key]);
                                }
                        else
                                {
                                                printf("faild!!!\r\n");
                                }
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-20
在线时间
3 小时
发表于 2020-3-25 22:59:03 | 显示全部楼层
yao12138 发表于 2020-2-28 09:51
int main(void)
{ u8 t;
        u8 len;       

你好 这个不行啊
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-12-25
在线时间
1 小时
发表于 2020-12-25 17:57:09 | 显示全部楼层
peng1554 发表于 2020-2-26 12:12
原子这边的485例程是实现两板子间的485通信,不大符合你的要求

可以把两块板子间的485通讯历程发给我吗,我是msp430cpu可以吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 18:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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