STM32F103C8T6 延时函数实现 - 使用循环方式
以下是使用 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 著作权归作者所有。请勿转载和采集!