本帖最后由 guxingganyue 于 2012-11-22 09:34 编辑
如题,我用stm32f103VET6的串口5和485通信,串口每次向485发送150字节,上位机每个1秒发一条命令,串口收到后就向485发送150字节
目前的现象是115200波特率的话,单片机会死机(lcd屏幕不刷新了),但是定时器中断还能触发(led灯在闪烁),26秒后内部狗复位,一切恢复正常
上位机继续发命令,不到3分钟的时间单片机死了
但是我用9600的波特率通信,1秒发一次命令,测试了1个晚上机器也没有死机
1、单片机和上位机间的连线不是很长,就2米左右,485芯片为:max3485,贵的那种
2、stm32外接8M晶振,系统跑72M
下面是485的连接图:请高手指教
注:把那个120欧姆的电阻去掉与否现象一样
111.png (38.89 KB, 下载次数: 0)
下载附件
2012-11-22 09:32 上传
9楼的中断优先级描述的不清楚,下面是清楚的
- void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- // Enable the Timer1 Interrupt
- NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //向量地址设置,定时器1更新中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //设定Timer1的抢占式优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设定Timer1的响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
- NVIC_Init(&NVIC_InitStructure); //初始化
- //使能串口5接收中断
- NVIC_InitStructure.NVIC_IRQChannel =UART5_IRQn; //向量地址设置,外部中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //设定外部中断的抢占式优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //设定外部中断的响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
- NVIC_Init(&NVIC_InitStructure);
- // Enable the PA8 exit Interrupt
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //向量地址设置,外部中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //设定外部中断的抢占式优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //设定外部中断的响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
- NVIC_Init(&NVIC_InitStructure);
-
- //使能串口4接收中断
- NVIC_InitStructure.NVIC_IRQChannel =USART4_IRQn; //向量地址设置,外部中断
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //设定外部中断的抢占式优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设定外部中断的响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
- NVIC_Init(&NVIC_InitStructure);
- }
复制代码好的,我试试
怎么样啊?楼主,问题解决了要上来跟大家分享一下啊.
一周热门 更多>