LPC1754的UART2功能,端口0和端口2都具有这个功能,但是为什么使用端口0的UART2可以,但端口2的UART2却无法运行呢,UART2初始化代码如下,端口0与端口2的UART2引脚都配置了,端口2无法运行,还望大家提出一下意见,实在是不知道错在哪里了
- void uart2Init (void)
- {
- uint16_t usFdiv;
- LPC_SC->PCONP |= (1<<24); /* 开启UART2的功率寄存器控制位 */
- LPC_PINCON->PINSEL0 |= (0x01 << 20)|(0x01 << 22);//0.10 0.11 端口0,正常
- LPC_PINCON->PINSEL4 |= (2 << 16)|(2 << 18); // 2.8 2.9 端口2,异常
- LPC_UART2->LCR = 0x83; /* 允许设置波特率 */
- usFdiv = (SystemFrequency/4/16) / UART_BPS; /* 设置波特率 */
- LPC_UART2->DLM = usFdiv / 256;
- LPC_UART2->DLL = usFdiv % 256;
- LPC_UART2->LCR = 0x03; /* 锁定波特率 */
- LPC_UART2->FCR = 0x87; /* 使能FIFO,设置8个字节触发点 */
- LPC_UART2->IER = 0x01; /* 使能接收中断 */
- }
复制代码
此帖出自
小平头技术问答
不是的,我运行的时候会注释掉端口0的,目前发现,是不是设置中断的时候不一样呢,下面是设置的中断
- void UART2_IRQHandler (void)
- {
- int IRQ_ID= 0;
- GulNum = 0;
- IRQ_ID = LPC_UART2->IIR;
- while ((LPC_UART2->IIR & 0x01) == 0){ /* 判断是否有中断挂起 */
- switch (LPC_UART2->IIR & 0x0E){ /* 判断中断标志 */
-
- case 0x04: /* 接收数据中断 */
- GucRcvNew = 1; /* 置接收新数据标志 */
- for (GulNum = 0; GulNum < 8; GulNum++){ /* 连续接收8个字节 */
- GucRcvBuf[GulNum] = LPC_UART2->RBR;
- }
- break;
-
- case 0x0C: /* 字符超时中断 */
- GucRcvNew = 1;
- while ((LPC_UART2->LSR & 0x01) == 0x01){ /* 判断数据是否接收完毕 */
- GucRcvBuf[GulNum] = LPC_UART2->RBR;
- GulNum++;
- }
- break;
-
- default:
- break;
- }
- }
-
- }
复制代码端口0与端口2的UART2引脚都配置了,你的意思是把两个端口都配成串口2? 这样是有问题的。用端口2.端口0就不能配成串口了。
可以发送的,就是没法接收,还不知道哪里原因,只能先用查询方式替代
一周热门 更多>