STM8 485发送数据在串口助手中显示全是00

STM8 485发送数据在串口助手中显示全是00 一次发送4个字节,助手收到一个字节并显示00

请问是哪里出了问题呢,是硬件问题还是代码问题?


//IO PB5 接485的DIO PB6接485的DIN PA2接485模块的DE和RE

GPIO_Init(RS_485_PORT, RS_485_PIN, GPIO_MODE_OUT_PP_LOW_SLOW);

void UART1_485_Init(void)
{
  UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
  UART1_Cmd(ENABLE);
}

void UART1_485_Send_Byte(u8 byte)
{

  
  UART1_SendData8(byte);//发送8位数据
  
  while(UART1_SR_TC==0);//待发送完成
  //while( UART1_GetFlagStatus(UART1_FLAG_TC)!=RESET);

}

void UART1_485_Send_Str(void)
{
  u8 i=0;

    RS_485_DIR_H;
    Delay_ms(2);
    for(i=0;i<4;i++)
    {
      UART1_485_Send_Byte(0x61+i);
    }
    Delay_ms(2);
    RS_485_DIR_L;
  }
}

https://blog.csdn.net/m0_65835239/article/details/130265709
由此文得到答案
1、时钟选择的对不对,
2、GPIO口的TX引脚应该设置为“复用推挽输出”
3、中断初始化函数也不可加
4、硬件方面RXT、TXD电路接反。一直出现00的时候就要怀疑是不是线接反了。

后换了TX和RX后收发正常了

【以下回答由 GPT 生成】

可能出现的原因是硬件连接或代码实现上存在问题。解决办法如下:

  1. 硬件连接检查:
  2. 确保PB5连接到485模块的DIO引脚,PB6连接到485模块的DIN引脚,PA2连接到485模块的DE和RE引脚。
  3. 检查485模块的DE和RE引脚是否需要外部上拉电阻。
  4. 确保接地线连接良好。

  5. 代码检查:

  6. 确保已正确初始化GPIO引脚。
  7. 确保已正确初始化UART1,并设置波特率为9600。
  8. 检查是否正确配置UART1的发送和接收使能。
  9. 检查UART1发送数据的函数是否正确。
  10. 检查是否正确设置RS_485_DIR_H和RS_485_DIR_L宏定义。

  11. 串口助手设置检查:

  12. 确保串口助手的波特率设置与代码中的波特率一致。

如果以上检查和调整都没有解决问题,可能需要进一步排查硬件和软件的问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这颗单片机没有接触过,不过从你写的代码看,明显有问题
while(UART1_SR_TC==1);//待发送完成
UART1_SR_TC=0;
按这段代码的意思,应该是UART1_SR_TC==1的情况下,是没有发送完的一个标志,那发送完成之后UART1_SR_TC就会变成0,但如果是这样,那下面那句UART1_SR_TC=0;不就是多余的吗?所以我怀疑你是把标志状态的判断弄错了。