问答

汇集网友智慧,解决技术难题

21ic问答首页 - HC32L136K8TA的LpUart通信不上

hc32l136 UART通信 lpuart TI IO include

HC32L136K8TA的LpUart通信不上

D_dx12021-06-10
把官方历程lpuart_int里面的LpUart1修改为我实际使用的LpUart0(PC04-TXD   PC05-RXD),一直通信不上,发送接收都没反应,硬件排查没什么问题。用另外1个非低功耗的串口Uart0是正常的。
/******************************************************************************
* Include files
******************************************************************************/
#include "ddl.h"
#include "lpuart.h"
#include "lpm.h"
#include "gpio.h"
#include "sysctrl.h"

/******************************************************************************
* Local pre-processor symbols/macros ('#define')                           
******************************************************************************/

/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/

/******************************************************************************
* Local type definitions ('typedef')                                         
******************************************************************************/

/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/

/******************************************************************************
* Local variable definitions ('static')                                      *
******************************************************************************/
uint8_t u8TxData[2] = {0x00,0x55};
uint8_t u8RxData = 00;
/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
void App_LpUartPortCfg(void);
void App_LpUartCfg(void);
/**
******************************************************************************
** \brief  Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
int32_t main(void)
{  
    ///< 端口配置
    App_LpUartPortCfg();

    ///< LPUART配置
    App_LpUartCfg();

    //发送数据
    LPUart_SendDataIt(M0P_LPUART0, 0x55);  

    while(1)
    {
        ;
    }
}

///<LPUART0 中断服务函数
void LpUart0_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(GpioPortC,GpioPin4,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortC,GpioPin4,GpioAf1); //配置PC04为LPUART0_TX

    //<RX
    stcGpioCfg.enDir =  GpioDirIn;
    Gpio_Init(GpioPortC,GpioPin5,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortC,GpioPin5,GpioAf1); //配置PC05为LPUART0_RX
}

/******************************************************************************
* EOF (not truncated)
******************************************************************************/




回答 +关注 16
3067人浏览 2人回答问题 分享 举报
2 个回答

您需要登录后才可以回复 登录 | 注册