以下是使用 STM32F103C8T6 芯片的延时函数示例代码:

#include "stm32f10x.h"

void delay_ms(uint32_t ms)
{
    for(uint32_t i = 0; i < ms * 1000; i++)
    {
        __NOP(); // 空操作,用来消耗一定的时间
    }
}

int main()
{
    SystemInit(); // 系统初始化

    // 配置GPIO口
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 打开GPIOC时钟
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    while(1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13); // 点亮LED
        delay_ms(1000); // 延时1秒
        GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 熄灭LED
        delay_ms(1000); // 延时1秒
    }
}

在本例中,delay_ms 函数使用循环方式实现延时,每执行一次循环消耗一定的时间,从而实现延时的效果。在循环中使用了一个空操作 __NOP(),这个操作不做任何事情,只是用来占用一定的时间。可以通过调整循环次数来调整延时的时间。需要注意的是,由于循环次数较多,因此这种方式的延时精度较低,适用于一些简单的应用场景。如果需要更高精度的延时,可以使用定时器或者外部晶振等硬件实现。


原文地址: https://www.cveoy.top/t/topic/oSX2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录