这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 串口通讯引起系统的不稳定指教一下(昨天的广州论坛会)

共2条 1/1 1 跳转至

串口通讯引起系统的不稳定指教一下(昨天的广州论坛会)

院士
2006-09-17 18:14:16     打赏
串口通讯引起系统的不稳定指教一下(昨天的广州论坛会)



关键词: 串口     通讯     引起     系统     不稳定     指教     一下     昨天         

院士
2006-12-22 22:43:00     打赏
2楼
问 昨天去广州参加论坛会,看到了浙江中控用飞利浦ARM做的PLC,感觉还不错


我的串口1是用来和GPS模块通讯的,设置如下:

1.在启动文件里设置
// UART1中断设置
VICVectAddr4 = (uint32)Uart1_Handler;  // 设置UART1中断向量地址
VICVectCntl4 = 0x27;                // UART1通道分配到第4通道
VICIntEnable = 0x00000080| VICIntEnable;   // 使能UART1中断     
// 设置串行口UART1的引脚功能
PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x00050000;   // 选择管脚为UART1
U1LCR = 0x83;                    // 允许访问分频因子寄存器    
U1DLM = (Fpclk / (16*DRIVER_UART1_BPS))/256;           // 设置波特率
U1DLL = (Fpclk / (16*DRIVER_UART1_BPS))%256;           // 设置波特率
U1LCR = 0x03;              // 禁止访问分频因子寄存器  且设置为8,1,n
U1IER = 0x03;  // 发送中断,接收中断,BIT0是RBR使能中断,BIT1是THRE使能中断
U1FCR = 0x00;                                 // 初始化FIFO        

2.中断程序:

void IRQ_UART1_SERVERS(void)
{
    uint8   UART1_IRQ_CHOICE,UART1_RBR_TEMP;                              // 程序变量

    UART1_IRQ_CHOICE = U1IIR;                                             // 读状态,同时清中断
    VICVectAddr = 0x00;                                                      // 通知VIC中断处理结束


    if(UART1_IRQ_CHOICE & 0x02)                                           // 发送中断
    {
        if(GPRS_SEND_INDEXS < GPRS_SEND_NUMBER)                           // 发送数据
        {
            //Terminal_String_Intermit("\n发送数据");

            U1THR = GPRS_SEND_AMORTIZE[GPRS_SEND_INDEXS];            
            GPRS_SEND_INDEXS++;
        }
        else if(GPRS_SEND_INDEXS >= GPRS_SEND_NUMBER)                     // 发送最后一个字节引起的中断
        {   
            // 释放该空间
            OSSemPost(GPRS_SEND_POWER);                                   // 发出串品操作权空闲信号量            
        }    
    }// 此处插入发送处理程序


    if(UART1_IRQ_CHOICE & 0x04)                                           // 接收中断
    {
        //Terminal_String_Intermit("\n接收中断");

        UART1_RBR_TEMP = U1RBR;                                              // 从寄存器取出数据

        // 数据入串口接收缓冲区
        GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = UART1_RBR_TEMP;

        GPRS_RECEIVE_INDEXS++;                                            // 索引加1
        GPRS_RECEIVE_NUMBER++;                                            // 个数加1

        if(GPRS_RECEIVE_INDEXS >= GPRS_RECEIVE_SIZE)                      // 判断索引值
        {
            GPRS_RECEIVE_INDEXS = 0;                                      // 索引值复位
        }

        GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = '\0';                // 加结束符
    }// 此处插入接收处理程序
    
    // 串口中断服务程序完毕
}


出现现象,系统以常自动重启,如果我把GPS模块去掉,也就是说串口不再接收任何数据,系统就会稳定运行了,我想应该是我的串口设置错误吧,可这是老周的设置,我仔细对照数据手册也没有发现任何问题
     1: 有这定义Uart1_Handler    HANDLER    IRQ_UART1_SERVERS                             ; 串口1中断 2: 怎么没有人回我呢?再顶 3: 我也遇到这样情况啊我也遇到这样情况啊,搞了好几天了,还没解决,头疼! 4: 电源问题 5: 电源不会有问题,用了非常高档的电源了老周怎么不出来说句话啊??
好几个人都碰到这个问题了。
6: 尽量找自己的问题吧呵呵,周公最近可能比较忙,还是我来回答你吧:
串口我们用的很好.关于串口论坛上有很多例子.
建议你仔细找你其它程序(比如RTOS)上的原因. 7: 串口和PC机通讯我用的是2114:如果在板子上电以前打开PC机的串口使其处于通讯壮态后再给板子上电程序就不能够正常运行不知道下位机程序跑到那儿去了!但是在板子上电工作以后再设置PC机串口打开通讯的话就可以正常运行了.查了好久也找不到原因!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]