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

STM8S003F3串口压力测试失败?

[复制链接]
jyl_518 提问时间:2018-10-12 16:36 /
本帖最后由 jyl518-283289 于 2018-10-17 16:21 编辑
  1. CPU:STM8S003F3,开发环境IAR
复制代码
串口接的485芯片,正常工作时通信正常,但压力测试485通信>=5000次后,485总线总是死掉【485收发控制脚持续高电平(发送状态)】,
程序如下:
  1. void IO_Init(void)
  2. {
  3.   GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);      //配置RED LED,初始LED灭
  4.   GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);      //配置GREEN LED,初始LED灭
  5.   
  6.   GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);      //配置AD_SCK,使能AD(PD_SCK置低)
  7.   GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);                //配置Dout,为“浮动输入无中断功能”
  8.   
  9. GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);      //配置485发送接收控制脚,初始输出低电平(接收)

  10.   GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);    //配置Uart1 Tx
  11.   GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);             //配置Uart1 Rx
  12.   UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE,      UART1_MODE_TXRX_ENABLE);
  13.   UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE,      UART1_MODE_RX_ENABLE);
  14.   
  15.   UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);                     //开中断(接收数据寄存器非空或溢出错误中断)
  16.   UART1_Cmd(ENABLE);
  17.   enableInterrupts();  
  18. }
复制代码
  1. INTERRUPT_HANDLER(UART1_TX_IRQHandler,17)              //串口发送完成中断函数
  2. {
  3.   static uint8 tx_cnt = 0;
  4.   
  5.   FlagStatus fs;
  6.   fs = UART1_GetFlagStatus(UART1_FLAG_TXE);                //发送数据寄存器空标志
  7.   if(fs == SET)
  8.   {
  9.     if(tx_cnt < 11)
  10.     {
  11.       UART1->DR = UART.uart_tx_buf[tx_cnt];
  12.       UART.uart_tx_buf[tx_cnt] = 0;
  13.       tx_cnt ++;
  14.     }
  15.     else
  16.     {
  17.       tx_cnt = 0;
  18.       UART1->CR2 &= ~(1<<6);                            //关闭 发送完成中断  
  19.        GPIO_WriteLow(GPIOD, GPIO_PIN_4);           //485通信4000~5000次内,必定485收发控制脚置不了低电平
  20.        UART.uart_rx_flag = 0;                                 //置为允许接收状态
  21.     }   
  22.   }
  23. }
复制代码
只有中发送中“  GPIO_WriteLow(GPIOD, GPIO_PIN_4); ”将总线置为接收状态。
貌视偶发状态下,没有执行到这条程序
有知道的指点下!!!谢谢!!!






收藏 评论5 发布时间:2018-10-12 16:36

举报

5个回答
changjianqiyuan 回答时间:2018-10-12 17:03:34
芯片软件卡死码
a707083746 回答时间:2018-10-13 16:21:35
是置了而置不了低电平,还是根本就没置,或者置低了又在哪置高了。

评分

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

查看全部评分

jyl_518 回答时间:2018-10-17 13:47:35

软件除485发送接收死掉,其它工作正常。
jyl_518 回答时间:2018-10-17 13:49:10
a707083746 发表于 2018-10-13 16:21
是置了而置不了低电平,还是根本就没置,或者置低了又在哪置高了。

平时能置低电平(正常工作),
485连续通信5000次以上,就出现置不了低电平
robter 回答时间:2018-10-25 08:12:48
可能被干扰了,通讯距离有多长?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版