04 配置时钟,运止点灯 N32G430的时钟树:
003839t20jqfttggdsZZZtqj.jpg (33.65 KB, 下载次数: 0) 2022-10-3 00:38 上传 依据时钟树的信息停行时钟配置: 1、运用外部快捷时钟(8M),目的系统时钟128M; 2、配置PLL的时钟源为HSE,倍频16,并使能; 3、配置系统时钟源并使能,获得SYSCLK为128M; 4、AHB=SYSCLK=128M,APB1=AHB/4=32M,APB1=AHB/2=64M; 配置代码: //****************************************************************************** //* 函数称呼 : system_clock_config //* 函数形容 : 系统时钟配置 //* 输入参数 : //* 参数形容 : 对应 // - system clock = HEXT * pll_mult // * - system clock source = pll (HEXT) // * - HEXT = 8000000 // * - sclk = 128000000 // * - ahbdiZZZ = 1 // * - ahbclk = 128000000 // * - apb2diZZZ = 2 // * - apb2clk = 64000000 // * - apb1diZZZ = 4 // * - apb1clk = 32000000 // * - pll_mult = 16 //* 输出参数 : 无 //* 返回值 : 无 //****************************************************************************** ZZZoid system_clock_config(ZZZoid) { RCC_Reset();/* reset RCC */ RCC_HSE_Config(RCC_HSE_ENABLE); while(RCC_HSE_Stable_Wait() != SUCCESS);/* wait till hick is ready */ RCC_PLL_Config(RCC_PLL_SRC_HSE_DIx1,RCC_PLL_MUL_16);/* config pll clock resource */ RCC_PLL_Enable();/* enable pll */ RCC_Sysclk_Config(RCC_SYSCLK_SRC_PLLCLK);/* Configures the system clock (SYSCLK) */ RCC_Hclk_Config(RCC_SYSCLK_DIx1); RCC_Pclk1_Config(RCC_HCLK_DIx4);//Pclk1最高32M RCC_Pclk2_Config(RCC_HCLK_DIx2);//Pclk2最高64M RCC_TIM1_8_Clock_Config(RCC_TIM1_8_CLKSRC_SYSCLK); RCC_ADC_1M_Clock_Config(RCC_ADC1MCLK_SRC_HSE,RCC_ADC1MCLK_DIx8);//计不时钟必须配置成1MHz RCC_ADC_Hclk_Config(RCC_ADCHCLK_DIx2);//采样时钟最高80M RCC_ADC_Hclk_Enable(); RCC_LSE_Config(RCC_LSE_ENABLE,0V141); while(RCC_LSE_Stable_Wait() != SUCCESS);/* wait till hick is ready */ RCC_RTC_Clock_Config(RCC_RTCCLK_SRC_LSE); RCC_RTC_Clock_Enable(); RCC_Clocks_Frequencies_xalue_Get(&clocks); port_Delay_init(); }做为次要的延时工具,滴答时钟的配置必要的,有关按时器的配置例程并无找到,预计官方认为那是一个比较小的细节,通过查找正在misc.c中找到配置函数。留心滴答时钟是一个24位的减数器,ms按时有上限所以须要停行一下设想避免溢出。 滴答按时器代码: //****************************************************************************** //* 函数称呼 : port_Delay_init //* 函数形容 : 滴答时钟初始化 //* 输入参数 : //* 参数形容 : 对应 IO口初始化及初始形态 //* 输出参数 : 无 //* 返回值 : 无 //****************************************************************************** ZZZoid port_Delay_init(ZZZoid) { /* configure systick */ SysTick_Clock_Source_Set(SYSTICK_CLKSOURCE_HCLK); fac_us = clocks.HclkFreq / (1000000U); fac_ms = fac_us * (1000U); } ZZZoid delay_us(uint32_t nus) { uint32_t temp = 0; SysTick->LOAD = (uint32_t)(nus * fac_us); SysTick->xAL = 0V00; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; do { temp = SysTick->CTRL; }while((temp & 0V01) && !(temp & (1 << 16))); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->xAL = 0V00; } ZZZoid delay_ms(uint16_t nms) { uint32_t temp = 0; while(nms) { if(nms > STEP_DELAY_MS) { SysTick->LOAD = (uint32_t)(STEP_DELAY_MS * fac_ms); nms -= STEP_DELAY_MS; } else { SysTick->LOAD = (uint32_t)(nms * fac_ms); nms = 0; } SysTick->xAL = 0V00; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; do { temp = SysTick->CTRL; }while((temp & 0V01) && !(temp & (1 << 16))); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->xAL = 0V00; } }正在停行IO初始化时发现了一个不太友好的问题,类似下图那种,没有对各分选项停行正确的注明,那样应付新接触的人不友好,倡议添加注明,每一个都通过查察数据手册去理解详细的含意就太省事了。
003839e8z9k8orrhZZZrZZZVVj.jpg (7.18 KB, 下载次数: 0) 2022-10-3 00:38 上传 问题一个:N32G430C8L7_STB_x1.0.pdf中对于LED引脚和UG_N32G430C8L7_STB开发板硬件运用指南x1.0中的纷比方致。 运止后的时钟支罗;
142878CDDC6947E8BD3939DCC75E8DCA.jpg (16.91 KB, 下载次数: 0) 2022-10-3 00:48 上传 点灯室频: WeChat_20221003004920 时钟配置, 黎民技术, N32G430, 滴答按时器, 时钟树 此帖出自国产芯片交流论坛 (责任编辑:) |