初级会员
- 积分
- 57
- 金钱
- 57
- 注册时间
- 2018-4-17
- 在线时间
- 13 小时
|
1金钱
在原子哥原先的例程中加入了串口2的初始化函数,成功编译。
但是即使在main函数中没有调用串口2 的初始化函数,程序下到板子里也会造成程序无法运行,代码无法下载。
查了一下资料 发现LPUART_Init 函数会自动调用 CLOCK_EnableClock 函数。但是为什么显示调用这个函数会造成程序卡死。甚至没有调用这个函数,仅仅是编译成功下到板子里都造成了程序卡死
void LPUART2_Init(u32 bound)
{
u32 freq=0; //串口的时钟源频率
//加入下面这行代码,即使没有调用LPUART2_Init函数,程序下到板子里也会造成程序无法运行,代码无法下载
//CLOCK_EnableClock(kCLOCK_Lpuart2); //使能LPUART1时钟
CLOCK_SetMux(kCLOCK_UartMux,0); //设置UART时钟源为PLL3 80Mhz,PLL3/6=480/6=80MHz
CLOCK_SetDiv(kCLOCK_UartDiv,0); //设置UART时钟1分频,即UART时钟为80Mhz
//LPUART1所使用的IO功能配置,即:从ALT0~ALT7选择合适的功能。
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_02_LPUART2_TX,0U); //GPIO_AD_B0_12设置为LPUART1_TX
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_03_LPUART2_RX,0U); //GPIO_AD_B0_13设置为LPUART1_RX
//配置IO引脚GPIO_AD_B0_12和GPIO_AD_B0_13的功能
//低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
//选择keeper功能,下拉100K Ohm,关闭Hyst
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_02_LPUART2_TX,0x10B0u);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_03_LPUART2_RX,0x10B0u);
freq=LPUART_SrcFreqGet();
LPUART_GetDefaultConfig(&lpuart2_config); //先设置为默认配置,后面在根据实际情况配置
//初始化NXP官方提供的debug console,此函数会重新初始化LPUART1,但是我们后面会
//重新显示的初始化一次LPUART1,DbgConsole_Init()主要是给那些想要使用NXP官方
//调试功能的开发者使用的,不需要使用的话就可以将下面代码注释掉
DbgConsole_Init((uint32_t) LPUART2,bound,DEBUG_CONSOLE_DEVICE_TYPE_LPUART,freq);
lpuart1_config.baudRate_Bps=bound; //波特率
lpuart1_config.dataBitsCount=kLPUART_EightDataBits; //8位
lpuart1_config.stopBitCount=kLPUART_OneStopBit; //1位停止位
lpuart1_config.parityMode=kLPUART_ParityDisabled; //无奇偶校验
lpuart1_config.enableRx=true; //使能接收
lpuart1_config.enableTx=true; //使能发送
LPUART_Init(LPUART2,&lpuart2_config,freq); //初始化LPUART1
#if EN_LPUART2_RX //是否需要开启中断?
//LPUART中断设置
LPUART_EnableInterrupts(LPUART2,kLPUART_RxDataRegFullInterruptEnable); //使能接收中断
RT1052_NVIC_SetPriority(LPUART2_IRQn,5,0); //抢占优先级5,子优先级0
EnableIRQ(LPUART2_IRQn); //使能LPUART1中断
#endif
}
|
|