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 Cl ...
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,關於參數配置請查看註釋
/** ******************************************************************************* ** \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 = 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實現
/** ******************************************************************************* ** \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:[email protected]/