[求助] 小白初试UART,stm8s003+rs485,移植例程,失败了,求大神讲解

2019-07-19 20:59发布

【【【【这是发送板】】】】

#include "stm8s.h"
#include "stm8s_clk.h"
#include "stm8s_gpio.h"
#include "stm8s_iwdg.h"
#include "delay.h"

void Init_UART1(void)
{
        UART1_DeInit();
        UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TX_ENABLE);
       
        UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

//        UART1_Cmd(ENABLE);
}
void Send(uint8_t dat)
{
        while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
       
        UART1_SendData8(dat);
        Delay_ms(100);
       
}

void GPIO_init(void)
{
  GPIO_DeInit(GPIOA);
  GPIO_DeInit(GPIOB);
  GPIO_DeInit(GPIOC);
  GPIO_DeInit(GPIOD);
}

void main(void)
{
      uint8_t i = 0;
      CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
      Init_UART1();
      GPIO_init();
      enableInterrupts();
      GPIO_WriteHigh(GPIOD,GPIO_PIN_2);
/* Infinite loop */
      while (1)
      {   
          led(1);
          Send(i);
          i++;
          if(i>250)
          {
            i=0;
          }
      }

}

【【【这是接收】】】

#include "stm8s.h"
#include "stm8s_clk.h"
#include "stm8s_gpio.h"
#include "stm8s_iwdg.h"
#include "delay.h"
#include "led.h"

void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}

void Init_UART1(void)
{
        UART1_DeInit();
        UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE);
       
        UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

//        UART1_Cmd(ENABLE);
}
void    Receive(uint8_t dat)
{
        while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
       
        UART1_ReceiveData8();
        Delay_ms(100);
       
}

void GPIO_init(void)
{
  GPIO_DeInit(GPIOA);
  GPIO_DeInit(GPIOB);
  GPIO_DeInit(GPIOC);
  GPIO_DeInit(GPIOD);
}

void main(void)
{
      uint8_t  a= 100 ;
      uint8_t  i;
      CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
      Init_UART1();
      GPIO_init();
      enableInterrupts();
      GPIO_WriteLow(GPIOC,GPIO_PIN_7);
/* Infinite loop */
      while (1)
      {            
          Receive(i);
          if(a>i )
          {
            led(1);
            Delay_ms(100);
            led(0);
          }
          else
          {
            led(0);
          }
      }  
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
熊走了
1楼-- · 2019-07-19 23:21
 精彩回答 2  元偷偷看……
chenjiabao
2楼-- · 2019-07-20 05:19
 精彩回答 2  元偷偷看……
chenjiabao
3楼-- · 2019-07-20 06:51
如果通信失败,先搞清楚是没发送出去呢,还是发送了没接收,还是接收了没处理。在网页上看看代码很难找错误,要结合实际情况再去看代码的
熊走了
4楼-- · 2019-07-20 07:36
chenjiabao 发表于 2016-11-30 10:20
如果通信失败,先搞清楚是没发送出去呢,还是发送了没接收,还是接收了没处理。在网页上看看代码很难找错误 ...

编译通过了,接收端示波器也显示有信号,但是好像就是数据不对,我设置的是当接收数据小于100时灯亮,但是灯一直没有亮
螃蟹爱虫
5楼-- · 2019-07-20 08:17
 精彩回答 2  元偷偷看……
chenjiabao
6楼-- · 2019-07-20 11:14
 精彩回答 2  元偷偷看……

一周热门 更多>