21ic问答首页 - 请问HC32LF136的开发板LPuart0如何复用?
请问HC32LF136的开发板LPuart0如何复用?
想学单片机hx2024-08-02
我在官方提供的样例库中将LPuart1修改成了PB10和PB11的脚复用成LPuart0,但是发现一直未复用成功,请问一下哪里配置错了吗?///<LPUART1 中断服务函数
以下为配置代码
void LpUart1_IRQHandler(void)
{
if(LPUart_GetStatus(M0P_LPUART0, LPUartTC))
{
LPUart_ClrStatus(M0P_LPUART0, LPUartTC); ///<清发送中断请求
LPUart_DisableIrq(M0P_LPUART0,LPUartTxIrq);///<禁止发送中断
LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<使能接收中断
}
if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) ///接收数据
{
LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
u8RxData = LPUart_ReceiveData(M0P_LPUART0);///读取数据
LPUart_DisableIrq(M0P_LPUART0,LPUartRxIrq);///<禁止接收中断
LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
LPUart_SendDataIt(M0P_LPUART0, ~u8RxData); ///把接收数据取反,并发送
}
}
///< LPUART配置
void App_LpUartCfg(void)
{
stc_lpuart_cfg_t stcCfg;
DDL_ZERO_STRUCT(stcCfg);
///<外设模块时钟使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
///<LPUART 初始化
stcCfg.enStopBit = LPUart1bit; ///<1停止位
stcCfg.enMmdorCk = LPUartEven; ///<偶校验
stcCfg.stcBaud.enSclkSel = LPUartMskPclk; ///<传输时钟源
stcCfg.stcBaud.u32Sclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
stcCfg.stcBaud.u32Baud = 9600; ///<波特率
stcCfg.enRunMode = LPUartMskMode3; ///<工作模式
LPUart_Init(M0P_LPUART0, &stcCfg);
///<LPUART 中断使能
LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
LPUart_DisableIrq(M0P_LPUART0,LPUartRxIrq); ///<禁止接收中断
LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
}
///< 端口配置
void App_LpUartPortCfg(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
///<TX
stcGpioCfg.enDir = GpioDirOut;
Gpio_Init(GpioPortB,GpioPin10,&stcGpioCfg);
Gpio_SetAfMode(GpioPortB,GpioPin10,GpioAf4); //配置PA00为LPUART1_TX
//<RX
stcGpioCfg.enDir = GpioDirIn;
Gpio_Init(GpioPortB,GpioPin11,&stcGpioCfg);
Gpio_SetAfMode(GpioPortB,GpioPin11,GpioAf3); //配置PA01为LPUART1_RX
}
以下为配置代码
void LpUart1_IRQHandler(void)
{
if(LPUart_GetStatus(M0P_LPUART0, LPUartTC))
{
LPUart_ClrStatus(M0P_LPUART0, LPUartTC); ///<清发送中断请求
LPUart_DisableIrq(M0P_LPUART0,LPUartTxIrq);///<禁止发送中断
LPUart_EnableIrq(M0P_LPUART0,LPUartRxIrq); ///<使能接收中断
}
if(LPUart_GetStatus(M0P_LPUART0, LPUartRC)) ///接收数据
{
LPUart_ClrStatus(M0P_LPUART0, LPUartRC); ///<清接收中断请求
u8RxData = LPUart_ReceiveData(M0P_LPUART0);///读取数据
LPUart_DisableIrq(M0P_LPUART0,LPUartRxIrq);///<禁止接收中断
LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
LPUart_SendDataIt(M0P_LPUART0, ~u8RxData); ///把接收数据取反,并发送
}
}
///< LPUART配置
void App_LpUartCfg(void)
{
stc_lpuart_cfg_t stcCfg;
DDL_ZERO_STRUCT(stcCfg);
///<外设模块时钟使能
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart0,TRUE);
///<LPUART 初始化
stcCfg.enStopBit = LPUart1bit; ///<1停止位
stcCfg.enMmdorCk = LPUartEven; ///<偶校验
stcCfg.stcBaud.enSclkSel = LPUartMskPclk; ///<传输时钟源
stcCfg.stcBaud.u32Sclk = Sysctrl_GetPClkFreq(); ///<PCLK获取
stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div; ///<采样分频
stcCfg.stcBaud.u32Baud = 9600; ///<波特率
stcCfg.enRunMode = LPUartMskMode3; ///<工作模式
LPUart_Init(M0P_LPUART0, &stcCfg);
///<LPUART 中断使能
LPUart_ClrStatus(M0P_LPUART0,LPUartRC); ///<清接收中断请求
LPUart_ClrStatus(M0P_LPUART0,LPUartTC); ///<清发送中断请求
LPUart_DisableIrq(M0P_LPUART0,LPUartRxIrq); ///<禁止接收中断
LPUart_EnableIrq(M0P_LPUART0,LPUartTxIrq); ///<使能发送中断
EnableNvic(LPUART0_IRQn,IrqLevel3,TRUE); ///<系统中断使能
}
///< 端口配置
void App_LpUartPortCfg(void)
{
stc_gpio_cfg_t stcGpioCfg;
DDL_ZERO_STRUCT(stcGpioCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
///<TX
stcGpioCfg.enDir = GpioDirOut;
Gpio_Init(GpioPortB,GpioPin10,&stcGpioCfg);
Gpio_SetAfMode(GpioPortB,GpioPin10,GpioAf4); //配置PA00为LPUART1_TX
//<RX
stcGpioCfg.enDir = GpioDirIn;
Gpio_Init(GpioPortB,GpioPin11,&stcGpioCfg);
Gpio_SetAfMode(GpioPortB,GpioPin11,GpioAf3); //配置PA01为LPUART1_RX
}
您需要登录后才可以回复 登录 | 注册