小华HC32L196 的UART配置

        使用 PB8-TX,PB9-RX 实现uart输出log信息,废话不多说直接上代码!

#include "ddl.h"
#include "uart.h"
#include "gpio.h"
#include <stdio.h>


void App_UartCfg(uint32_t baud);
void App_PortInit(void);
void App_LedInit(void);

int32_t main(void)
{      
    Sysctrl_SetHCLKDiv(SysctrlHclkDiv1);
    Sysctrl_SetPCLKDiv(SysctrlPclkDiv1);

    App_PortInit();
    App_UartCfg(115200);
    App_LedInit();

    while(1)
    {
        printf("--->uart test\r\n");
        Gpio_SetIO(STK_LED_PORT, STK_LED_PIN); //点亮LED
        delay1ms(1000);
        Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN); //熄灭LED
        delay1ms(1000);
    }

    return 0;
}

//串口引脚配置
void App_PortInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    
    DDL_ZERO_STRUCT(stcGpioCfg);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //使能GPIO模块时钟
    
    ///<TX
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin8, GpioAf7);          //配置PB08 端口为URART0_TX
    
    ///<RX
    stcGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPortB, GpioPin9, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortB, GpioPin9, GpioAf7);          //配置PB09 端口为URART0_RX
}

//串口配置
void App_UartCfg(uint32_t baud)
{
    stc_uart_cfg_t    stcCfg;
    uint32_t u32Pclk;

    DDL_ZERO_STRUCT(stcCfg);
    
    ///< 开启外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0, TRUE); ///<使能uart0模块时钟

    u32Pclk = Sysctrl_GetPClkFreq();
    if(u32Pclk == 0)
    {
        while(1); // 时钟错误处理
    }
    
    ///<UART Init
    stcCfg.enRunMode        = UartMskMode1;          ///<模式1
    stcCfg.enStopBit        = UartMsk1bit;           ///<1bit停止位
    stcCfg.stcBaud.u32Baud  = baud;                  ///<波特率
    stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;       ///<通道采样分频配置
    stcCfg.stcBaud.u32Pclk  = u32Pclk;               ///<获得外设时钟(PCLK)频率值
    Uart_Init(M0P_UART0, &stcCfg);                   ///<串口初始化
}

void App_LedInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); 

    stcGpioCfg.enDir = GpioDirOut;
    ///< 端口上下拉配置->下拉
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdEnable;
    
    ///< LED关闭
    Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
    
    ///< GPIO IO LED端口初始化
    Gpio_Init(STK_LED_PORT, STK_LED_PIN, &stcGpioCfg);
}

int fputc(int ch, FILE* f)
{
    Uart_SendDataPoll(M0P_UART0, ch);
    return (ch);
}

注意点:一定要看复用表的对应关系,选择你原理图对应的TX,RX引脚的复用组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值