一、开发环境。
Windows10系统
Keil uVision5
二、开发板为stm32f103c8t6
三、main.c的代码。
#include "stm32f10x.h" // 包含STM32F10x系列微控制器的头文件。
// 以下是一个已经被注释掉的原始延时函数,使用简单的空操作循环实现。
// void Delay(__IO uint32_t nCount)
// {
// for (; nCount!= 0; nCount--);
// }
// 微秒级延时函数
void Delay_us(uint32_t xus)
{
SysTick->LOAD = 72 * xus; // 根据系统时钟设置SysTick的自动重装值,这里假设系统时钟为72MHz。
SysTick->VAL = 0x00; // 清空当前计数值,准备开始新的计时。
SysTick->CTRL = 0x00000005; // 设置SysTick的控制寄存器,选择HCLK作为时钟源,并使能定时器。
while(!(SysTick->CTRL & 0x00010000)); // 等待SysTick计数到0,即等待指定的微秒数过去。
SysTick->CTRL = 0x00000004; // 关闭SysTick定时器,停止计数。
}
// 毫秒级延时函数,通过调用微秒级延时函数实现。
void Delay_ms(uint32_t xms)
{
while(xms--)
{
Delay_us(1000); // 调用微秒级延时函数,实现1毫秒的延时。
}
}
// 秒级延时函数,通过调用毫秒级延时函数实现。
void Delay_s(uint32_t xs)
{
while(xs--)
{
Delay_ms(1000); // 调用毫秒级延时函数,实现1秒的延时。
}
}
int main(void)
{
// 使能GPIOC端口的时钟,以便使用该端口的引脚。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置GPIOC的第13个引脚(PC13)为推挽输出模式,用于控制LED。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 指定要初始化的引脚为PC13。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置引脚模式为推挽输出。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚的速度为50MHz。
GPIO_Init(GPIOC, &GPIO_InitStructure); // 根据GPIO_InitStructure初始化GPIOC。
while (1) // 创建一个无限循环。
{
// 点亮LED:将PC13置为高电平。
GPIO_SetBits(GPIOC, GPIO_Pin_13);
// 使用毫秒级延时函数实现100毫秒的延时。
Delay_ms(300);
// 熄灭LED:将PC13置为低电平。
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
// 再次使用毫秒级延时函数实现100毫秒的延时。
Delay_ms(300);
}
}
四、效果展示。
stm32f103c8t6板载小灯闪烁