打印

485求助,两个板子通信 出现错误

[复制链接]
3300|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ql1007|  楼主 | 2011-7-28 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//第一个板子和第二个板子其他程序一样
int main(void)
{  
Init_All_Periph();
UART3Init();   
LCD_Init();     // LCD初始化
LCD_Clear(WHITE);
RS485_SendByte(0x08);
    while(1)
{
   
   
       }
}


//第二个板子的程序,接受到显示 打开发送中断 回发
int main(void)
{  
Init_All_Periph();
UART3Init();   
LCD_Init();     // LCD初始化
LCD_Clear(WHITE);
    while(1)
{
   
   
       }
}
void UART3Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能外设时钟   
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;      
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
         GPIO_Init(GPIOB, &GPIO_InitStructure);   
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
        USART_Init(USART3, &USART_InitStructure);
        USART_Cmd(USART3, ENABLE);
   GPIO_ResetBits(GPIOB, GPIO_Pin_2);
   USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
/*  UART2中断配置  */
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

void Delay(unsigned short time)
{
    unsigned short i, j;

for(; time > 0; time--){
     for(j = 0; j < 10; j++){
      for(i = 0; i < 1000; i++);
  }
}
}
void RS485_SendByte(unsigned char temp)
{
// while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
  
Delay(10);
    USART_SendData(USART3, temp);
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
Delay(10);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
GPIO_ResetBits(GPIOD, GPIO_Pin_8);
//return(temp);
}
unsigned char RS485_GetByte(void)
{
   
if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET)
   {//i=1;
    //USART_ClearITPendingBit(USART3,USART_IT_RXNE);
   
       LCD_ShowNum(0+i,0+i,USART_ReceiveData(USART3),1,16);
    if(USART_ReceiveData(USART3)==1)
     {
    GPIO_SetBits(GPIOD, GPIO_Pin_8);
  
  }//*
  i++;
  flag=1;
   }
return(USART_ReceiveData(USART3)); //?????
}
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)
{
  USART_ClearITPendingBit(USART3,USART_IT_RXNE);
  
      LCD_ShowNum(0+i,0+i,USART_ReceiveData(USART3),1,16);
    if(USART_ReceiveData(USART3)==0x08)
     {
    GPIO_SetBits(GPIOD, GPIO_Pin_8);
  
  }//*
  hh[i]=USART_ReceiveData(USART3);
  i++;
  if(i==10)
  {i=0;}
     USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
  USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
  Delay(1);
}
if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
  {   
        RS485_SendByte(hh[i]);
        USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
        Delay(1);
  }
}


RS485_SendByte()发送函数我测过没有问题啊,现在不知道问题出在哪里 求助 ,谢谢
沙发
yujie870705| | 2011-7-28 16:17 | 只看该作者
什么样的错误说清楚啊!

使用特权

评论回复
板凳
ql1007|  楼主 | 2011-7-28 16:33 | 只看该作者
两个板子485直连通信嘛
现在第二个板子显示接受到数据,也应该发出来了 我示波器看了SP485脚的 TX有发送信号
但是另个板子 一直没接受到信号,没显示 一直是0,另个板子我示波器看RX没信号,。。。。奇怪 信号出来了去哪了,但是这两个板子肯定没问题啊 我试过不用中断 一发一收 再回发,没问题的。有点迷糊了
程序两个都一样

使用特权

评论回复
地板
ql1007|  楼主 | 2011-7-28 16:45 | 只看该作者
您看我的程序有毛病吗?我不知道是哪里的问题

使用特权

评论回复
5
yujie870705| | 2011-7-28 16:57 | 只看该作者
程序肯定是有问题的,按照你的思路,进入接收中断以后打开发送中断发送,发送完成以后又会进入串口中断,这样就会一直在中断里面发送而不会接收!

使用特权

评论回复
6
ql1007|  楼主 | 2011-7-28 17:26 | 只看该作者
5# yujie870705
OK了 现在 的确是你说的这个问题 我之前想偷懒 现在在主循环里做判断 没问题了
感谢你啊 您有QQ吗 我第一次搞485很多不明白的地方 以后需要向您学习
谢谢

使用特权

评论回复
7
yujie870705| | 2011-7-28 17:34 | 只看该作者
呵呵,解决了就好,学习谈不上,互相交流吧,我平时很少上QQ的,一般没事都在论坛闲逛,有什么问题发帖子就可以了!

使用特权

评论回复
8
ql1007|  楼主 | 2011-7-29 11:36 | 只看该作者
您好 我想问下 您用过什么好的转换器吗 推荐下,485转USB的

使用特权

评论回复
9
yujie870705| | 2011-7-29 13:51 | 只看该作者
不好意思啊,这个我倒是没用过!

使用特权

评论回复
10
ql1007|  楼主 | 2011-7-29 16:09 | 只看该作者
恩 没关系 您的邮箱有没有个 方便给我短信息留个吗 呵呵 以后方便请教

使用特权

评论回复
11
yujie870705| | 2011-7-29 16:12 | 只看该作者
jie.yu@cnlaunch.com  快结贴给分:lol

使用特权

评论回复
12
ql1007|  楼主 | 2011-7-29 16:30 | 只看该作者
晕 哈哈 我都给忘了

使用特权

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

本版积分规则

35

主题

122

帖子

0

粉丝