LPC1754的P2口UART2问题

2019-03-25 20:05发布

LPC1754的UART2功能,端口0和端口2都具有这个功能,但是为什么使用端口0的UART2可以,但端口2的UART2却无法运行呢,UART2初始化代码如下,端口0与端口2的UART2引脚都配置了,端口2无法运行,还望大家提出一下意见,实在是不知道错在哪里了
  1. void uart2Init (void)
  2. {
  3.     uint16_t usFdiv;

  4.     LPC_SC->PCONP |= (1<<24);                                           /* 开启UART2的功率寄存器控制位  */
  5.     LPC_PINCON->PINSEL0 |= (0x01 << 20)|(0x01 << 22);//0.10 0.11 端口0,正常
  6.         LPC_PINCON->PINSEL4 |= (2 << 16)|(2 << 18);                 // 2.8 2.9 端口2,异常
  7.     LPC_UART2->LCR = 0x83;                                              /* 允许设置波特率               */
  8.     usFdiv = (SystemFrequency/4/16) / UART_BPS;                         /* 设置波特率                   */
  9.     LPC_UART2->DLM = usFdiv / 256;
  10.     LPC_UART2->DLL = usFdiv % 256;
  11.     LPC_UART2->LCR = 0x03;                                              /* 锁定波特率                   */
  12.     LPC_UART2->FCR = 0x87;                                              /* 使能FIFO,设置8个字节触发点  */
  13.     LPC_UART2->IER = 0x01;                                              /* 使能接收中断                 */
  14. }
复制代码


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
gstbetter
2019-03-26 04:07
ienglgge 发表于 2017-7-24 18:04
端口0与端口2的UART2引脚都配置了,你的意思是把两个端口都配成串口2? 这样是有问题的。用端口2.端口0就不 ...

不是的,我运行的时候会注释掉端口0的,目前发现,是不是设置中断的时候不一样呢,下面是设置的中断
  1. void UART2_IRQHandler (void)
  2. {
  3.         int IRQ_ID= 0;  
  4.     GulNum = 0;
  5.     IRQ_ID = LPC_UART2->IIR;     
  6.     while ((LPC_UART2->IIR & 0x01) == 0){                               /*  判断是否有中断挂起          */
  7.         switch (LPC_UART2->IIR & 0x0E){                                 /*  判断中断标志                */
  8.         
  9.             case 0x04:                                                  /*  接收数据中断                */
  10.                 GucRcvNew = 1;                                          /*  置接收新数据标志            */
  11.                 for (GulNum = 0; GulNum < 8; GulNum++){                 /*  连续接收8个字节             */
  12.                     GucRcvBuf[GulNum] = LPC_UART2->RBR;
  13.                 }
  14.                 break;
  15.             
  16.             case 0x0C:                                                  /*  字符超时中断                */
  17.                 GucRcvNew = 1;
  18.                 while ((LPC_UART2->LSR & 0x01) == 0x01){                /*  判断数据是否接收完毕        */
  19.                     GucRcvBuf[GulNum] = LPC_UART2->RBR;
  20.                     GulNum++;
  21.                 }
  22.                 break;
  23.                
  24.             default:
  25.                 break;
  26.         }
  27.     }
  28.   
  29. }
复制代码

一周热门 更多>