OpenEdv-开源电子网

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

[小白请教]关于485例程串口通讯乱码问题

[复制链接]

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-5
在线时间
23 小时
发表于 2021-8-5 11:16:16 | 显示全部楼层 |阅读模式
1金钱
使用战舰485例程发送数据时串口助手接收乱码,用16进制显示的话就正常,为什么啊???感谢各位大佬解答!!!

[img]file:///C:/Users/sj/Desktop/98)KUJ%7B[HJ3%7B@5WTMDV%7B[)P.png[/img][img]file:///C:/Users/sj/Desktop/E$[3HW(DCUSO]%60G3T40~N$P.png[/img][img]file:///C:/Users/sj/Desktop/0SDD[X_U[EJV25BI]DU%7DD1E.jpg[/img]
程序如下:
int main(void)
{         
        u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 rs485buf[5];
         
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();                                   //初始化LCD        
        KEY_Init();                                //按键初始化                          
        RS485_Init(9600);        //初始化RS485
        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(30,50,200,16,16,"WarShip STM32");
        LCD_ShowString(30,70,200,16,16,"RS485 TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2015/1/15");       
        LCD_ShowString(30,130,200,16,16,"KEY0:Send");        //显示提示信息               

        POINT_COLOR=BLUE;//设置字体为蓝色          
        LCD_ShowString(30,150,200,16,16,"Count:");                        //显示当前计数值       
        LCD_ShowString(30,170,200,16,16,"Send Data:");                //提示发送的数据       
        LCD_ShowString(30,210,200,16,16,"Receive Data:");        //提示接收到的数据               
                                                                          
        while(1)
        {
                key=KEY_Scan(0);
                if(key==KEY0_PRES)//KEY0按下,发送一次数据
                {
                        for(i=0;i<5;i++)
                        {
                                rs485buf=cnt+i;//填充发送缓冲区
                                LCD_ShowxNum(30+i*32,190,rs485buf,3,16,0X80);        //显示数据
                        }
                        RS485_Send_Data(rs485buf,5);//发送5个字节                                                                           
                }                 
                RS485_Receive_Data(rs485buf,&key);
                if(key)//接收到有数据
                {
                        if(key>5)key=5;//最大是5个数据.
                        for(i=0;i<key;i++)LCD_ShowxNum(30+i*32,230,rs485buf,3,16,0X80);        //显示数据
                }
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        t=0;
                        cnt++;
                        LCD_ShowxNum(30+48,150,cnt,3,16,0X80);        //显示数据
                }                  
        }
}

最佳答案

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

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8646
金钱
8646
注册时间
2020-5-11
在线时间
4103 小时
发表于 2021-8-5 11:16:17 | 显示全部楼层
专治疑难杂症
回复

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-5
在线时间
23 小时
 楼主| 发表于 2021-8-5 18:13:32 | 显示全部楼层

要是想正常显示要怎么弄啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-8-6 02:35:01 | 显示全部楼层
你发送字符,而不是发送数字。
回复

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-5
在线时间
23 小时
 楼主| 发表于 2021-8-6 09:24:54 | 显示全部楼层
SUIJIAN 发表于 2021-8-5 18:13
要是想正常显示要怎么弄啊

ok,明白了,已解决。
回复

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2020-10-5
在线时间
23 小时
 楼主| 发表于 2021-8-6 09:25:19 | 显示全部楼层
正点原子 发表于 2021-8-6 02:35
你发送字符,而不是发送数字。

ok,已解决
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 23:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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