正点原子的工程都是利用keil,但是既然是hal库,不用cubemx生成代码我觉得发挥不出来hal库的优势,并且利用vscode效率比keil高的多。滴答定时器已经被FreeRTOS占用,hal库的时基利用TIM7,为了防止未知的问题,决定用TIM6实现delay文件夹下的驱动文件。

TIM6挂载在APB1下,此时时钟频率是90Mhz。TIM6配置如下:

新建delay.c

#include "delay.h"
#include "tim.h"

/**
 * @brief  初始化延时(TIM6 已在 CubeMX 配好 1MHz)
 */
void delay_init(void)
{
    HAL_TIM_Base_Start(&htim6);
}

/**
 * @brief  us 延时
 */
void delay_us(uint32_t nus)
{
    uint32_t start = __HAL_TIM_GET_COUNTER(&htim6);

    while ((__HAL_TIM_GET_COUNTER(&htim6) - start) < nus)
    {
        ;
    }
}

/**
 * @brief  ms 延时
 */
void delay_ms(uint16_t nms)
{
    while (nms--)
    {
        delay_us(1000);
    }
}

新建delay.h

#ifndef __DELAY_H_
#define __DELAY_H_

void delay_init(void);
void delay_ms(uint16_t nms);
void delay_us(uint32_t nus);


#endif

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐