hal库选择滴答时钟函数_【HAL库每天一例】第012例:SYSTICK-系统滴答定时器

本文展示了如何使用STM32 HAL库配置系统滴答定时器(SYSTICK),包括设置系统时钟、配置延时函数基准,并启动系统滴答定时器。
摘要由CSDN通过智能技术生成

/* 包含头文件 ----------------------------------------------------------------*/

#include "stm32f1xx_hal.h"

#include "led/bsp_led.h"

#include "beep/bsp_beep.h"

/* 私有类型定义 --------------------------------------------------------------*/

/* 私有宏定义 ----------------------------------------------------------------*/

/* 私有变量 ------------------------------------------------------------------*/

/* 扩展变量 ------------------------------------------------------------------*/

/* 私有函数原形 --------------------------------------------------------------*/

void SystemClock_Config(void);

/* 函数体 --------------------------------------------------------------------*/

/**

* 函数功能: 主函数.

* 输入参数: 无

* 返 回 值: 无

* 说    明: 无

*/

int main(void)

{

/* 复位所有外设,初始化Flash接口和系统滴答定时器 */

HAL_Init();

/* 配置系统时钟 */

SystemClock_Config();

/* 板载LED初始化 */

LED_GPIO_Init();

/* 板载蜂鸣器初始化 */

BEEP_GPIO_Init();

/* 无限循环 */

while (1)

{

BEEP_ON;

LED1_TOGGLE;

HAL_Delay(500*1000); // 延时一段时间:500ms

BEEP_StateSet(BEEPState_OFF);

LED2_TOGGLE;

HAL_Delay(1000*1000); // 延时一段时间:1s

BEEP_TOGGLE;

LED3_TOGGLE;

HAL_Delay(500*1000); // 延时一段时间:500ms

}

}

/**

* 函数功能: 系统时钟配置

* 输入参数: 无

* 返 回 值: 无

* 说    明: 无

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct;

RCC_ClkInitTypeDef RCC_ClkInitStruct;

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟

HAL_RCC_OscConfig(&RCC_OscInitStruct);

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz

HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

// HAL_RCC_GetHCLKFreq()/1000    1ms中断一次,即HAL_Delay函数延时基准为1ms

// HAL_RCC_GetHCLKFreq()/100000         10us中断一次,即HAL_Delay函数延时基准为10us

// HAL_RCC_GetHCLKFreq()/1000000 1us中断一次,即HAL_Delay函数延时基准为1us

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);  // 配置并启动系统滴答定时器

/* 系统滴答定时器时钟源 */

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* 系统滴答定时器中断优先级配置 */

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值