打印
[485通信]

SP3232通讯,单片机死机

[复制链接]
2608|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 shaziqingtian20 于 2018-3-28 09:51 编辑


电路如图
这个232口连着电脑的九针串口,如果电脑和这个采集板一直通讯,倒不会死机;
如果电脑和SP3232不通讯,但线还是连着,过几个小时有一定概率会死机;
带电插拔,当R9 R11是220欧时,大概五次死机一次,当R9 R11是1K欧时,大概十来次死机一次,
但是这个电路跟其他单片机通讯时,电阻R9 R11是220欧,根本不会死机

现在把电路改成这样

和USB转串口通讯
带电插拔,二十次死机一次,还是没办法百分百不死机
一般运用中,可以不去带电插拔,就怕稳定性,毕

单片机做的协议是9600,7,e,1 MODBUS 通讯协议,假设电脑端设置19200波特率,只是通讯不上,单片机不会死机;
假设电脑端设置115200波特率,不仅通讯不上,单片机也会死机;
目前电路板没空间在加隔离电源,如果只加光耦,是否有效果

相关帖子

沙发
ningling_21| | 2018-3-29 09:36 | 只看该作者
是不是程序有问题

使用特权

评论回复
板凳
shaziqingtian20|  楼主 | 2018-3-29 10:21 | 只看该作者
ningling_21 发表于 2018-3-29 09:36
是不是程序有问题

跟触摸屏通讯,同时触摸屏是直流24V供电,就没上面问题

使用特权

评论回复
地板
ningling_21| | 2018-3-29 10:23 | 只看该作者
shaziqingtian20 发表于 2018-3-29 10:21
跟触摸屏通讯,同时触摸屏是直流24V供电,就没上面问题

加光耦隔离试试

使用特权

评论回复
5
shaziqingtian20|  楼主 | 2018-3-29 10:25 | 只看该作者

光耦要是共地,有效果吗,因为我电路板空间不足了,纯加光耦还是有点空间,想直接用带隔离的232芯片,但成本多了不少

使用特权

评论回复
6
dalarang| | 2018-3-29 10:27 | 只看该作者
八成是程序问题,检查一下是不是开了串口通讯错误中断又没进行对应处理。

使用特权

评论回复
7
shaziqingtian20|  楼主 | 2018-3-29 10:33 | 只看该作者
程序部分
串口定义
void UART2_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;


UART2_GPIO_Configuration();

USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

USART_ITConfig(USART2, USART_IT_TC, ENABLE);


USART_ITConfig(USART2, USART_IT_PE, ENABLE);
USART_ITConfig(USART2, USART_IT_ERR, ENABLE);

//GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
USART_Cmd(USART2, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}
中断函数

void        RTU_USART2_IRT()
{
        u8        date;
        if(USART_GetITStatus(USART2, USART_IT_RXNE)==SET)
        {
                USART_ClearITPendingBit(USART2, USART_IT_RXNE);
                date=USART_ReceiveData(USART2);
               
                if((RecvBufferLength<BUF_MAX-3)&&SendTaskDoing==FALSE)
                {
                        RecvBuffer[RecvBufferLength++]=date;
                }        
        }        

        if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
   {
    USART_ClearFlag(USART2,USART_FLAG_ORE);         //¶ÁSRÆäʵ¾ÍÊÇÇå³ý±êÖ¾
    USART_ReceiveData(USART2);                      //¶ÁDR
   }
         if(USART_GetITStatus(USART2, USART_IT_TXE)==SET)
   {
       USART_ClearITPendingBit(USART2,USART_IT_TXE);
             USART_ITConfig(USART2,USART_IT_TXE,DISABLE);
   }
         
         
         if(USART_GetFlagStatus(USART2, USART_FLAG_NE) != RESET)
{
USART_ClearFlag(USART2, USART_FLAG_NE);
}
if(USART_GetFlagStatus(USART2, USART_FLAG_FE) != RESET)
{
USART_ClearFlag(USART2, USART_FLAG_FE);
}

if(USART_GetFlagStatus(USART2, USART_FLAG_PE) != RESET)
{
USART_ClearFlag(USART2, USART_FLAG_PE);

}

         
         
         
         
         
        if(USART_GetITStatus(USART2, USART_IT_TC)==SET)
        {
                USART_ClearITPendingBit(USART2, USART_IT_TC);
                if(SendBufferIndex<SendBufferLength)
                {
                        USART_SendData(USART2, SendBuffer[SendBufferIndex++]);
                }
                else
                {
                        SendTaskDoing=FALSE;
                        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
                        UART2_SendEnable(FALSE);
                }
        }
}





使用特权

评论回复
8
ningling_21| | 2018-3-29 10:36 | 只看该作者
shaziqingtian20 发表于 2018-3-29 10:25
光耦要是共地,有效果吗,因为我电路板空间不足了,纯加光耦还是有点空间,想直接用带隔离的232芯片,但 ...

共地就没啥效果了

使用特权

评论回复
9
chunyang| | 2018-3-29 22:06 | 只看该作者
计算机电源和/或你的应用系统电源未可靠接大地所致。

使用特权

评论回复
10
atz1000| | 2018-4-8 16:31 | 只看该作者
最好能仿真,确认到底是硬件还是软件

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

27

帖子

0

粉丝