打印
[其他ST产品]

STM32的标准库(HAL库)的例程

[复制链接]
449|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢醇|  楼主 | 2024-2-26 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32的标准库(HAL库)的例程,演示了如何配置系统定时器(SysTick)并使用定时器中断的方式。
这个例程中,我们将SysTick定时器配置为每秒触发一次中断,并在中断中更新一个全局变量来表示经过的秒数。



#include "stm32f4xx_hal.h"

// 全局变量,表示经过的秒数
volatile uint32_t seconds = 0;

// SysTick中断处理函数
void SysTick_Handler(void)
{
    // 每秒钟递增一次
    seconds++;
}

int main(void)
{
    // 初始化HAL库
    HAL_Init();

    // 配置系统时钟
    SystemClock_Config();

    // 配置SysTick定时器
    if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
    {
        Error_Handler();
    }

    // 配置SysTick定时器为1秒一次
    HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);

    // 启动SysTick定时器
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    HAL_SYSTICK_Enable();

    // 主循环
    while (1)
    {
        // 在这里可以执行其他任务
    }
}

// 系统时钟配置函数(由CubeMX生成)
void SystemClock_Config(void)
{
    // 系统时钟配置代码
    // ...
}

// 错误处理函数
void Error_Handler(void)
{
    // 发生错误时的处理代码
    while (1)
    {
        // 在这里可以添加错误处理的代码
    }
}

#ifdef  USE_FULL_ASSERT
// 断言失败处理函数
void assert_failed(uint8_t* file, uint32_t line)
{
    // 发生断言失败时的处理代码
}
#endif /* USE_FULL_ASSERT */



这个例程中,SysTick定时器被配置为每秒触发一次中断。
在中断处理函数SysTick_Handler中,全局变量seconds会递增,表示经过的秒数。
在主循环中,你可以执行其他任务,同时使用seconds变量获取经过的时间。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

1241

帖子

5

粉丝