STM32
直播中

小黑羊

13年用户 1151经验值
擅长:31274
私信 关注
[问答]

STM8S003F3串口压力测试失败的原因?


  • CPU:STM8S003F3,开发环境IAR

串口接的485芯片,正常工作时通信正常,但压力测试485通信>=5000次后,485总线总是死掉【485收发控制脚持续高电平(发送状态)】,
程序如下:

  • void IO_Init(void)
  • {
  •   GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);      //配置RED LED,初始LED灭
  •   GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);      //配置GREEN LED,初始LED灭

  •   GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);      //配置AD_SCK,使能AD(PD_SCK置低)
  •   GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);                //配置Dout,为“浮动输入无中断功能”

  • GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);      //配置485发送接收控制脚,初始输出低电平(接收)

  •   GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);    //配置Uart1 Tx
  •   GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);             //配置Uart1 Rx
  •   UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE,      UART1_MODE_TXRX_ENABLE);
  •   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);
  •   enableInterrupts();
  • }


  • INTERRUPT_HANDLER(UART1_TX_IRQHandler,17)              //串口发送完成中断函数
  • {
  •   static uint8 tx_cnt = 0;

  •   FlagStatus fs;
  •   fs = UART1_GetFlagStatus(UART1_FLAG_TXE);                //发送数据寄存器空标志
  •   if(fs == SET)
  •   {
  •     if(tx_cnt < 11)
  •     {
  •       UART1->DR = UART.uart_tx_buf[tx_cnt];
  •       UART.uart_tx_buf[tx_cnt] = 0;
  •       tx_cnt ++;
  •     }
  •     else
  •     {
  •       tx_cnt = 0;
  •       UART1->CR2  = ~(1<<6);                            //关闭 发送完成中断
  •        GPIO_WriteLow(GPIOD, GPIO_PIN_4);           //485通信4000~5000次内,必定485收发控制脚置不了低电平
  •        UART.uart_rx_flag = 0;                                 //置为允许接收状态
  •     }
  •   }
  • }

只有中发送中“  GPIO_WriteLow(GPIOD, GPIO_PIN_4);  ”将总线置为接收状态。
貌视偶发状态下,没有执行到这条程序
有知道的指点下!!!谢谢!!!




回帖(1)

张昂笙

2024-4-25 17:28:06
STM8S003F3串口压力测试失败的原因可能有以下几点:

1. 硬件问题:检查485芯片和相关电路是否存在故障或损坏。例如,检查485芯片的电源、接地和信号线连接是否正确,以及是否存在短路或断路现象。

2. 软件问题:检查程序中是否存在逻辑错误或死循环,导致485总线长时间处于发送状态。例如,检查发送函数是否正确处理了发送完成的回调,以及是否正确设置了485芯片的收发控制脚。

3. 电源问题:检查电源是否稳定,特别是在高负载情况下。不稳定的电源可能导致485芯片工作异常。

4. 干扰问题:检查485总线上是否存在电磁干扰,这可能导致通信失败。可以尝试使用屏蔽电缆或增加滤波器来减少干扰。

5. 485芯片性能问题:检查所使用的485芯片是否能够满足压力测试的要求,例如数据传输速率、驱动能力等。

针对您的程序,我建议您检查以下几个方面:

1. 确保GPIO_Init函数正确初始化了GPIO端口,并且收发控制脚的设置是正确的。

2. 检查发送函数是否正确处理了发送完成的回调,以及是否正确设置了485芯片的收发控制脚。

3. 在压力测试过程中,使用示波器或逻辑分析仪观察485总线上的信号,以确定问题是否出在硬件层面。

4. 如果问题仍然存在,尝试使用其他型号的485芯片进行测试,以排除芯片性能问题。

5. 如果可能,尝试在其他开发环境中进行压力测试,以排除开发环境的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分