zoukankan      html  css  js  c++  java
  • HC32F003C4PA GPIO Output

    1、打开启动文件,找到并跳转至SystemInit函数

     1 void SystemInit(void)
     2 {
     3     stc_clk_systickcfg_t stcCfg;
     4 
     5     // TODO load trim from flash
     6     //hcr 4MHz manual trim.
     7     Clk_SetRCHFreq(ClkFreq4Mhz);//默认内部RCH  4M
     8     Clk_Enable(ClkRCH, TRUE);
     9                                 
    10     SystemCoreClockUpdate();
    11 
    12     DDL_ZERO_STRUCT(stcCfg);
    13     stcCfg.bNoRef = TRUE;
    14     stcCfg.u32LoadVal = 0xFFFFFF;
    15     Clk_SysTickConfig(&stcCfg);
    16 }

    系统默认使用内部RCH 4MHz时钟源,关于时钟部分介绍,请查阅《HC32F003系列_HC32F005系列用户手册》

    2、接着我们进入main函数

    int32_t main(void)
    {
      
       
        //GPIO输出
        //初始化外部GPIO P03为输出、上拉、开漏,P03端口外接LED3
        Gpio_InitIOExt(3, 5, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
            Gpio_InitIOExt(3, 6, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
    
        while (1)
        {
            //输出高电平,LED3灭
            Gpio_SetIO(3, 5, TRUE);
            //delay1ms(1000);
    
            //输出低电平,LED3亮
            Gpio_SetIO(3, 6, FALSE);
            //delay1ms(1000);
        }
    }

    main函数中,GPIO外设的初始化函数Gpio_InitIOExt,关于参数配置请查看注释

    /**
     *******************************************************************************
     ** rief   GPIO 初始化2 
     ** 
     ** param   [in]  u8Port             IO Port口
     ** param   [in]  u8Pin              IO Pin脚
     ** param   [in]  enDir              IO 方向(输入或输出)
     ** param   [in]  bPullup            上拉开关
     ** param   [in]  bPulldown          下拉开关
     ** param   [in]  bOdr               开漏开关
     ** param   [in]  bDrive             驱动能力 
     **                                   0 = 高
     **                                   1 = 低
     ** 
    etval     Ok         设置成功
     **             其他值     设置失败
     ******************************************************************************/
    en_result_t Gpio_InitIOExt(uint8_t u8Port, uint8_t u8Pin,
                               en_gpio_dir_t enDir,
                               boolean_t bPullup,
                               boolean_t bPulldown,
                               boolean_t bOdr,
                               boolean_t bDrive)
    {
        //force open clock
        M0P_CLOCK->PERI_CLKEN_f.GPIO = 1;
        //force set mode, ignore result.
        Gpio_SetAnalog(u8Port, u8Pin, FALSE);
    
        //fn
        *((volatile uint32_t *)((uint32_t)&M0P_GPIO->P01_SEL + u8Port * GPIO_GPSZ - 4 + u8Pin * 4)) = 0;
        //ADS
        //setBit((uint32_t)&M0P_GPIO->ADS0 + u8Port * GPIO_GPSZ, u8Pin, 0);
        //dir
        setBit((uint32_t)&M0P_GPIO->P0DIR + u8Port * GPIO_GPSZ, u8Pin, enDir);
        //dr
        setBit((uint32_t)&M0P_GPIO->P0DR + u8Port * GPIO_GPSZ, u8Pin, bDrive);
    
        setBit((uint32_t)&M0P_GPIO->P0PU + u8Port * GPIO_GPSZ, u8Pin, bPullup);
        setBit((uint32_t)&M0P_GPIO->P0PD + u8Port * GPIO_GPSZ, u8Pin, bPulldown);
        setBit((uint32_t)&M0P_GPIO->P0OD + u8Port * GPIO_GPSZ, u8Pin, bOdr);
    
        return Ok;
    }

    最后是GPIO输出高低电平,通过Gpio_SetIO实现

    /**
     *******************************************************************************
     ** rief GPIO IO输出值设定
     **
     ** param [in]  u8Port          IO Port口
     ** param [in]  u8Pin           IO Pin脚
     ** param [in]  bVal            输出电平高低
     **
     ** 
    etval Ok         设置成功
     **         其他值     设置失败
     ******************************************************************************/
    void Gpio_SetIO(uint8_t u8Port, uint8_t u8Pin, boolean_t bVal)
    {
        bVal = !!bVal;
        setBit((uint32_t)&M0P_GPIO->P0OUT + u8Port * GPIO_GPSZ, u8Pin, bVal);
    }

    2020-05-08

    注意:华大MCU资料下载链接   ftp://HdscCustomer:HdscGuest2019!@ftp.hdsc.com.cn/

  • 相关阅读:
    Python
    Html body的滚动条禁止与启用
    wampserver 更改www目录
    Linux下的tar压缩解压缩命令详解
    Linux 重置root密码
    Ubuntu增加一个用户并给普通用户赋予root权限的方法
    redhat系统下三种主要的软件包安装方法
    Linux 添加yum命令
    如何退出 Vim
    Linux ssh开启服务
  • 原文地址:https://www.cnblogs.com/Li-Share/p/12853002.html
Copyright © 2011-2022 走看看