HC32F003C4PA GPIO Output
阅读原文时间:2023年07月11日阅读:1

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

void SystemInit(void)
{
stc_clk_systickcfg_t stcCfg;

 // TODO load trim from flash  
 //hcr 4MHz manual trim.  
 Clk\_SetRCHFreq(ClkFreq4Mhz);//默认内部RCH  4M  
 Clk\_Enable(ClkRCH, TRUE);

 SystemCoreClockUpdate();

 DDL\_ZERO\_STRUCT(stcCfg);  
 stcCfg.bNoRef = TRUE;  
 stcCfg.u32LoadVal = 0xFFFFFF;  
 Clk\_SysTickConfig(&stcCfg);  

}

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

2、接着我们进入main函数

int32_t main(void)
{

//GPIO输出  
//初始化外部GPIO P03为输出、上拉、开漏,P03端口外接LED3  
Gpio\_InitIOExt(, , GpioDirOut, TRUE, FALSE, TRUE, FALSE);  
    Gpio\_InitIOExt(, , GpioDirOut, TRUE, FALSE, TRUE, FALSE);

while ()  
{  
    //输出高电平,LED3灭  
    Gpio\_SetIO(, , TRUE);  
    //delay1ms(1000);

    //输出低电平,LED3亮  
    Gpio\_SetIO(, , FALSE);  
    //delay1ms(1000);  
}  

}

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

/**
*******************************************************************************
** \brief 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 = 低
** \retval 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 = ;
//force set mode, ignore result.
Gpio_SetAnalog(u8Port, u8Pin, FALSE);

//fn  
\*((volatile uint32\_t \*)((uint32\_t)&M0P\_GPIO->P01\_SEL + u8Port \* GPIO\_GPSZ -  + u8Pin \* )) = ;  
//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实现

/**
*******************************************************************************
** \brief GPIO IO输出值设定
**
** \param [in] u8Port IO Port口
** \param [in] u8Pin IO Pin脚
** \param [in] bVal 输出电平高低
**
** \retval 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/

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章