你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请各位大师帮我看看为什么我的STM8不能正常485通信

[复制链接]
bin2000163 提问时间:2018-4-7 15:38 /
本帖最后由 bin2000163 于 2018-4-7 15:49 编辑




其中PD4是发送接收选择,我依次发送1,2,3...9 串口调试助手接收到的是7F,3F,7E,1F等。这是为什么啊?
void uart_init()
{
  UART3_CR1=0x00;
  UART3_CR2=0x00;
  UART3_CR3|=0x00;
  UART3_BRR2=0x00;
  UART3_BRR1=0x0D;
  UART3_SR=0;
  UART3_CR2=0x01;//接收发送中断使能
  
}
void main( void )
{
  unsigned char temp;
  temp=1;
  //启用内部高速晶振2MHz
  CLK_ICKR|=0x01; //开启内部HSI
  while(!(CLK_ICKR&0x02));//HSI准备就绪
  CLK_SWR=0xe1; //HSI为主时钟源
  CLK_CKDIVR=0x18; //2Mhz
  asm("rim");
  uart_init();
  PD_DDR_DDR4=1;
  PD_CR1_C14=1;
  PD_CR2_C24=0;
  PD_ODR_ODR4=1;  //默认为发送有效
  
  while(1)
  {

   
    UART3_CR2=0x00;//a处
    UART3_DR=temp;//要发送的数据

    UART3_CR2=0x08;//b处
    temp++;     
    while(!UART3_SR&0X80);
  }
}
111.jpg
收藏 1 评论7 发布时间:2018-4-7 15:38

举报

7个回答
七哥 回答时间:2018-4-8 09:12:05
先看一下TXD的波形,连续发0x55,看一下波特率对不对。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

随风飘扬 回答时间:2018-4-8 09:31:23
你是发出9个数之和也收到了9个数吗?有可能是波特率不对,也有可能连线上有问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

bin2000163 回答时间:2018-4-8 10:35:16
问题解决了,谢谢大家的关心。我重新整理了一下程序。这不是主要的,之前我将R3和R10从板子上拆掉,R5和R8用导线短接。问题没解决,今天我整理完程序。干脆把VD1和VD2也拆掉。结果串口调试助手能接收到发送的数据,接收设置用十六进制。接收区显示01 02 03 04...0A...。另外,当初我曾经担心线接反了,所以把A,B的线掉了一下,今天又掉了回来。总之电脑能接收数据,我还没试板子接收数据情况。上边问题困扰了我3个星期,今天总算有了进展,心情有些激动。先把情况和大家说说,下一步准备完善板子的程序,如果有问题还要请教大家。谢谢了!以下是我测试UART3的整理后的程序:
void main( void )
{
  unsigned char temp;
  temp=1;
  asm("sim"); // 关全局中断


  //初始化系统时钟////////////////////////////
  //启用内部高速晶振2MHz
  CLK_ECKR=0x00;
  CLK_ICKR=0x01; //开启内部HSI
  while(!(CLK_ICKR&0x02));//HSI准备就绪
  CLK_SWR=0xe1; //HSI为主时钟源
  CLK_CKDIVR=0x18; //HSI 2MHz
  //初始化系统时钟结束///////////////////////
  //初始化UART3//////////////////////////////
  UART3_CR1=0x00;
  UART3_CR2=0x00;
  UART3_CR3=0x00;
  UART3_BRR2=0X00;
  UART3_BRR1=0X0D;
  UART3_SR=0;
  UART3_CR2|=0x2C;//接收发送中断使能
  asm("rim"); //开全局中断

  PD_DDR_DDR4=1;
  PD_CR1_C14=1;
  PD_CR2_C24=0;
  PD_ODR_ODR4=1; //rs485默认为发送
  
  while(1)
  {
   
   
    UART3_CR2=0x00;//a处
    UART3_DR=temp;//要发送的数据
    UART3_CR2=0x08;//b处
     temp++;     
    while(!UART3_SR&0X80);
  }
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

bin2000163 回答时间:2018-4-9 08:34:25
今天我把摘下的元件重新焊回板子,通信依然正常。看来以前是程序的问题,原电路没有问题。
bin2000163 回答时间:2018-4-9 08:36:45
今天我重新将元件焊回电路,通信依然正常。看来以前是程序的问题,电路没问题。另外,电路中的R5和R8实际焊的是10欧电阻,这里更正一下。
robter 回答时间:2018-4-11 21:29:41
都是满满的经验
_sy、 回答时间:2018-8-2 21:55:32
您好,我也遇到了您这样的问题,但是我之前测试过这个程序是没有问题的。请问这个问题应该怎么查找呢?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版