/*Copyright 2019 Benjamin Vedder benjamin@vedder.seThis file is part of the VESC firmware.The VESC firmware is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The VESC firmware is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program. If not, see <http://www.gnu.org/licenses/>.*/#include "timer.h"#include "ch.h"#include "hal.h"#include "stm32f4xx_conf.h"// Settings#define TIMER_HZ 1e7void timer_init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);uint16_t PrescalerValue = (uint16_t) ((SYSTEM_CORE_CLOCK / 2) / TIMER_HZ) - 1;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 0xFFFFFFFF;TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);TIM5->CNT = 0;TIM_Cmd(TIM5, ENABLE);}uint32_t timer_time_now(void) {return TIM5->CNT;}float timer_seconds_elapsed_since(uint32_t time) {uint32_t diff = TIM5->CNT - time;return (float)diff / (float)TIMER_HZ;}/*** Blocking sleep based on timer.** @param seconds* Seconds to sleep.*/void timer_sleep(float seconds) {uint32_t start_t = TIM5->CNT;for (;;) {if (timer_seconds_elapsed_since(start_t) >= seconds) {return;}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。