OpenEdv-开源电子网

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

关于旗舰使用485发送接收数据的问题?

[复制链接]

3

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2012-9-6
在线时间
116 小时
发表于 2016-7-16 14:22:58 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 roy2002 于 2016-7-16 14:24 编辑

[mw_shl_code=c,true]#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "rs485.h"
//ALIENTEK战舰STM32开发板实验24
//485 实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司  
                                 
int main(void)
{         
        u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 rs485buf[5];
        u8 temp[2]={0x01,0x02};

        u16 wCmd = (u16)(('L'<<8)+'O');
        delay_init();                     //延时函数初始化         
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(9600);                 //串口初始化为9600
        LED_Init();                             //LED端口初始化
        LCD_Init();                             //LCD初始化
        KEY_Init();                                  //KEY初始化
        RS485_Init(9600);        //初始化RS485


        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(60,50,200,16,16,"WarShip STM32");        
        LCD_ShowString(60,70,200,16,16,"RS485 TEST");        
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2012/9/9");        
        LCD_ShowString(60,130,200,16,16,"KEY0:Send");        //显示提示信息        

        POINT_COLOR=BLUE;//设置字体为蓝色         
        LCD_ShowString(60,150,200,16,16,"Count:");                        //显示当前计数值        
        LCD_ShowString(60,170,200,16,16,"Send Data:");                //提示发送的数据        
        LCD_ShowString(60,210,200,16,16,"Receive Data:");        //提示接收到的数据               
                                                        
        LED1 = 0;
        while(1)
        {

                        if(wCmd == ((u16)(RS485_RX_BUF[0]<<8) + (u16)(RS485_RX_BUF[1])))
                        {
                                LED1 = 1;
                                RS485_Send_Data(temp,2);

                        }

                key=KEY_Scan(0);
                if(key==KEY_RIGHT)//KEY0按下,发送一次数据
                {
                        for(i=0;i<5;i++)
                        {
                                rs485buf=cnt+i;//填充发送缓冲区
                                LCD_ShowxNum(60+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(60+i*32,230,rs485buf,3,16,0X80);        //显示数据
                }
                t++;
                delay_ms(10);
                if(t==20)
                {
                        LED0=!LED0;//提示系统正在运行        
                        t=0;
                        cnt++;
                        LCD_ShowxNum(60+48,150,cnt,3,16,0X80);        //显示数据
                }                  
        }
}[/mw_shl_code]

为什么用按键可以发送数据之后数据就不发了,但是我加了个控制led灯那个发送成功了之后数据一直发呢?

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

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-7-16 14:53:46 | 显示全部楼层
485就是一个串口,串口调试通过了,485也没有问题,仔细检查下代码,硬件仿单步运行,找下问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 04:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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