NXP M0+ 的LPC824LPC8xx串口使用,基于LPCXpresso

  • 汉云
  • LV6工程师
  • |      2017-05-19 22:38:38
  • 浏览量 1507
  • 回复:1
本帖最后由 汉云 于 2017-5-19 22:39 编辑 前面,我们搭建好了LPCXpresso的开发环境, 基本上每个工程翥有一个调试串口,其初始化函数在DEBUGINIT();中。而其为一个宏定义,指向函数Board_Debug_Init() Board_Debug_Init()函数的源码为:
void Board_Debug_Init(void)

{

#if defined(DEBUG_UART)

        Board_UART_Init();

        Chip_UART_Init(DEBUG_UART);

        Chip_UART_ConfigData(DEBUG_UART, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);

        Chip_Clock_SetUSARTNBaseClockRate((115200 * 16), true);

        Chip_UART_SetBaud(DEBUG_UART, 115200);

        Chip_UART_Enable(DEBUG_UART);

        Chip_UART_TXEnable(DEBUG_UART);

#endif

}

Board_UART_Init();函数中是对GPIO的初始化。
STATIC void Board_UART_Init(void)

{

        Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

        Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8);

        Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9);

        Chip_Clock_SetUARTClockDiv(1);

        if (DEBUG_UART == LPC_USART0) {

                Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, 7);

                Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, 18);

        } else if (DEBUG_UART == LPC_USART1) {

                Chip_SWM_MovablePinAssign(SWM_U1_TXD_O, 7);

                Chip_SWM_MovablePinAssign(SWM_U1_RXD_I, 18);

        } else {

                Chip_SWM_MovablePinAssign(SWM_U2_TXD_O, 7);

                Chip_SWM_MovablePinAssign(SWM_U2_RXD_I, 18);

        }

        Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);

}

这里要用到了,所以要先使能switch matrix时钟: Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);通过PINENABLE0寄存器,禁用ADC8ADC9引脚的ADC功能。Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8); Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9); 由下面定义,串口使用的是串口1#defineDEBUG_UART LPC_USART1 通过PINASSIGN1,寄存器,将对串口的引脚进行绑定。
void Chip_SWM_MovablePinAssign(CHIP_SWM_PIN_MOVABLE_T movable, uint8_t pin)

{

	uint32_t temp;

	int pinshift = PINSHIFT(movable), regIndex = PINASSIGN_IDX(movable);



	temp = LPC_SWM->PINASSIGN & (~(0xFF << pinshift));

	LPC_SWM->PINASSIGN = temp | (pin << pinshift);

}

如上图,TXDRXD两个引脚对应的是第8-15位与16-23位,也就是引脚号要左移8位与16位,那么这也就是Chip_SWM_MovablePinAssign函数的第一个参数通过两个宏定义产生的寄存器偏移(regIndex)与数据位偏移(pinshift)。而第二个参数则对应了引脚的编号了。也就是串口1使用了P0_7 P0_18了,那么连接P0_7 P0_18到串口转换板,接232PC电脑上。如下是串口的输出
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
黄莨元 2017-05-19
感谢楼主分享
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子