HC32F003C4PAGPIOOutput

编程

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

 

 1void 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/

 

以上是 HC32F003C4PAGPIOOutput 的全部内容, 来源链接: utcz.com/z/516296.html

回到顶部