STM32L476rg CubeIDE 项目中无法识别 SystemCoreClockUpdate() 函数

问题描述 投票:0回答:1

我正在学习 Udemy RTOS 课程,它是关于如何在 stm32 上从头开始构建 RTOS,因此在观看视频时,我调用了 SystemCoreClockUpdate() 函数,但编译器无法识别它,我将这些路径添加到项目中坐次: -CMSIS/包括 -CMSIS/核心/包括 -CMSIS/设备/ST/STM32L4xx/包括 该函数在 system_stm32l4xx.c 中声明,并在 system_stm32l4xx.h 文件中声明为 extern 原型 我应该包括什么才能使这项工作有效? 这是代码

#include "stm32l476xx.h"
#include "uart.h"
#include <stdint.h>
#include <stdio.h>

void SystemClockConfig(void);
void DelayS(uint32_t seconds);

volatile uint32_t tick;
volatile uint32_t _tick;

int main(void) {

    SystemClockConfig();
    while(1)
    {
        printf("hello");
        DelayS(1);
    }
}

void SystemClockConfig(void) {
    SystemCoreClockUpdate();
    SysTick_Config(SystemCoreClock / 100U);
    __enable_irq();
}

void SysTick_Handler(void) {
    ++tick;
}
uint32_t getTick(void) {
    __disable_irq();
    _tick = tick;
    __enable_irq();
    return _tick;
}

void DelayS(uint32_t seconds) {
    seconds *= 100;
    uint32_t temp = getTick();
    while ((getTick() - temp) < seconds) {
    }

}

我尝试包含 system_stm32xx.h 和 core_cm4.h 但没有任何改变

c compiler-errors stm32 stm32cubeide
1个回答
0
投票

我应该包括什么才能使这项工作成功?我尝试过包括 system_stm32xx.h 和 core_cm4.h 但没有任何改变

由于该函数不打算从应用程序代码中调用,因此没有标头包含其原型。

只需在 main 之前添加原型即可。

void SystemCoreClockUpdate(void);

Udemy老师有建议你这样做吗?:

uint32_t getTick(void) {
    __disable_irq();
    _tick = tick;
    __enable_irq();
    return _tick;
}

32 位读取在 Cortex-M 目标上是原子的,您不必禁用中断(顺便说一句,只有在极其必要时才应该这样做)

如果您使用 freeRTOS,请勿自行禁用中断 -

taskENTER_CRITICAL()
taskEXIT_CRITICAL()

© www.soinside.com 2019 - 2024. All rights reserved.