本帖最后由 jyl518-283289 于 2018-10-17 16:21 编辑
串口接的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); ”将总线置为接收状态。
貌视偶发状态下,没有执行到这条程序
有知道的指点下!!!谢谢!!!
|
评分
查看全部评分
软件除485发送接收死掉,其它工作正常。
平时能置低电平(正常工作),
485连续通信5000次以上,就出现置不了低电平