LPC1125串口0 配置IO口为 PIO3.4(TXD)和PIO3.5(RXD)可以发送数据,但是不能就收数据。
换成1.6和1.7口则能正常收发,不知道哪里设置有误还是啥原因?求助。。。以下是配置代码:
IO配置:
LPC_IOCON->PIO3_4=0xd2; //设置PIO3.4为U0_RXD
LPC_IOCON->PIO3_5=0xd2; //设置PIO3.5为U0_TXD
LPC_GPIO3->DIR &=!(1<<4); //设置GPIO3.4为输入
LPC_GPIO3->DIR |=(1<<5); //设置GPIO3.5为输出
UART0串口初始化:
/******************************************************/
/*函数名称 :MUART0init */
/*函数功能 :初始化模块串口 */
/*函数说明 :初始化波特率等参数(UART0) */
/*输入参数1:baudrate - 波特率值 */
/*输入参数2:无 */
/*输入参数3:无 */
/*输入参数4:无 */
/*输入参数5:无 */
/*输出参数 :无 */
void MUART0init(uint32_t baudrate0)
{
uint32_t DL_value0,Clear0=Clear0; //Clear0=Clear0解决Clear0=0时编译出现警告
/*使能并设置串口0时钟*/
//使能串口0时钟
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);
//串口0时钟分频为1:1
LPC_SYSCON->UART0CLKDIV = 0x01;
//8位传输,1个停止位,无奇偶校验,允许访问除数寄存器
LPC_UART0->LCR = 0x83;
LPC_UART0->MCR=0x00;
//计算该波特率要求的除数锁存寄存器值
DL_value0 = 48000000/16/baudrate0;
//写除数锁存寄存器高位值
LPC_UART0->DLM = DL_value0/256;
//写除数锁存寄存器低位值
LPC_UART0->DLL = DL_value0%256;
//DLAB位置0,禁止对除数锁存寄存器的访问
LPC_UART0->LCR = 0x03;
//允许FIFO,清空Rx0FIFO 和 Tx0FIFO
LPC_UART0->FCR = 0x07;
//读UART0状态寄存器清空残留状态
Clear0 = LPC_UART0->LSR;
//开串口接收中断
LPC_UART0->IER=0x05;
//开串口中断
NVIC_EnableIRQ(UART_IRQn);
NVIC_SetPriority(UART_IRQn, 5);
}
中断函数:
/******************************************************/
/*函数名称 :UART_IRQHandler */
/*函数功能 :UART0中断服务函数 */
/*函数说明 :MUL_UART0中断服务函数 */
/*输入参数1:无 */
/*输入参数2:无 */
/*输入参数3:无 */
/*输入参数4:无 */
/*输入参数5:无 */
/*输出参数 :无 */
void UART_IRQHandler(void)
{
uint32_t IRQ_ID0=0;
IRQ_ID0=LPC_UART0->IIR; //读中断状态
IRQ_ID0=((IRQ_ID0>>1)&0x07);
if(IRQ_ID0 == 0x02)
{
//置位计数标志
TimeTickU0mark=1;
//清零计数器
TimeTickU0=0;
MULbuf[MULrxOK][MULcount]=LPC_UART0->RBR; //读取并存储数据
MULcount++; //计数器自加
}
}
//串口数据发送函数
/******************************************************/
/*函数名称 :MULsend */
/*函数功能 :模块串口发送函数 */
/*函数说明 : */
/*输入参数1:无 */
/*输入参数2:无 */
/*输入参数3:无 */
/*输入参数4:无 */
/*输入参数5:无 */
/*输出参数 :无 */
void MULsend(uint8_t *BufferMUL,uint32_t LengthMUL)
{
do
{
while(!(LPC_UART0->LSR & (1<<5))); //等待上一次数据发送完成
LPC_UART0->THR = *BufferMUL; //把数据写入发送寄存器
BufferMUL++; //取下一个数据
LengthMUL--; //取下一个数据
}while(LengthMUL > 0); //观察数据有没有发送完
while(!(LPC_UART0->LSR & (1<<5)))__nop(); //等待数据发送完成
}
此帖出自
小平头技术问答
一周热门 更多>