Arduino millis()在stm32

8 microcontroller arduino stm32 milliseconds stm32f0

我想尝试将一些Arduino库移植到stm32.在Arduino中,millis()返回自引导以来的毫秒数.在stm32中是否有等效的功能?我正在使用stm32f0 MCU.

And*_*own 11

SysTick是为此目的提供的ARM核心外设.根据您的需求进行调整:

首先,初始化它

// Initialise SysTick to tick at 1ms by initialising it with SystemCoreClock (Hz)/1000

volatile uint32_t counter = 0;
SysTick_Config(SystemCoreClock / 1000);
Run Code Online (Sandbox Code Playgroud)

提供中断处理程序.您的编译器可能需要使用其他属性修饰中断处理程序.

SysTick_Handler(void) {
  counter++;
}
Run Code Online (Sandbox Code Playgroud)

这是你的millis()功能,不可能更简单:

uint32_t millis() {
  return counter;
}
Run Code Online (Sandbox Code Playgroud)

一些警告要注意.

  1. SysTick是一个24位计数器.它将包裹溢出.在比较值或实现延迟方法时请注意这一点.

  2. SysTick源自处理器核心时钟.如果您使用核心时钟,例如减速以节省电量,则必须手动调整SysTick频率.

  • 生成1ms滴答的硬件计数器可能是24位,但这几乎不重要.您的代码用于计算它们的变量是一个32位无符号整数,因此它将基于此溢出,而不是更小的. (2认同)

nbo*_*out 6

你可以用 HAL_GetTick(): this function gets current SysTick counter value (incremented in SysTick interrupt) used by peripherals drivers to handle timeouts.