轻松点亮第一个STM32F103的LED灯

目录

第一步:初始化函数GPIO

LED的开启与关闭

完整代码


第一步:初始化函数GPIO

void NVIC_Configure(void)
{
	NVIC_InitTypeDef S;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	S.NVIC_IRQChannelSubPriority=1;
	S.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&S);
}

void TIM3_Configure(void)
{
	TIM_TimeBaseInitTypeDef T;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	T.TIM_Prescaler=(7200-1);
	T.TIM_CounterMode=TIM_CounterMode_Up;
	T.TIM_Period=1000;
	TIM_TimeBaseInit(TIM3,&T);
	TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
	TIM_Cmd(TIM3,ENABLE);
}

void LED_Configure(void)
{
	GPIO_InitTypeDef G;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	G.GPIO_Pin = GPIO_Pin_5;
	G.GPIO_Speed = GPIO_Speed_50MHz;
	G.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB,&G);
	LED_Off();
}	


void LED_On( void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void LED_Off( void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}

void LED_Trigger( void)
{
	GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
}

void delay_ms(int32_t ms)
{
	int32_t i;
	while(ms--)
	{
		i=7500;
		while(i--);
	}
}

void TIM3_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
	{
		LED_Trigger();
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
	}
}

LED的开启与关闭

完整代码

这个是一个完整的函数,可以直接使用对应的引脚是正点的战舰版的引脚,自己也可以的更改

#include <stm32f10x.h>

void LED_Off( void); 


void NVIC_Configure(void)
{
	NVIC_InitTypeDef S;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	S.NVIC_IRQChannelSubPriority=1;
	S.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&S);
}

void TIM3_Configure(void)
{
	TIM_TimeBaseInitTypeDef T;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	T.TIM_Prescaler=(7200-1);
	T.TIM_CounterMode=TIM_CounterMode_Up;
	T.TIM_Period=1000;
	TIM_TimeBaseInit(TIM3,&T);
	TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
	TIM_Cmd(TIM3,ENABLE);
}

void LED_Configure(void)
{
	GPIO_InitTypeDef G;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	G.GPIO_Pin = GPIO_Pin_5;
	G.GPIO_Speed = GPIO_Speed_50MHz;
	G.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB,&G);
	LED_Off();
}	


void LED_On( void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void LED_Off( void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}

void LED_Trigger( void)
{
	GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
}

void delay_ms(int32_t ms)
{
	int32_t i;
	while(ms--)
	{
		i=7500;
		while(i--);
	}
}

void TIM3_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
	{
		LED_Trigger();
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
	}
}


int main(void)
{
	uint8_t k;
	//³õʼ»¯
	NVIC_Configure();
	LED_Configure();
	TIM3_Configure();
	for(k=0;k<5;k++)
	{
		LED_On();
		delay_ms(300);
		LED_Off();
		delay_ms(300);
	}
	
	//ÆäËû³ÌÐò
	while(1)
	{
		
	}
	
}

主函数的书写,我这这里用到了定时器的中断,所以看起来稍微复杂了一点

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要基于STM32F103C8T6创建并点亮第一个LED,你需要进行以下步骤: 1. 配置开发环境:首先,你需要安装Keil MDK软件,并确保你的STM32F103C8T6开发板已正确连接到计算机上。 2. 创建新工程:在Keil MDK软件中,选择“File” -> “New Project”来创建一个新的工程。选择适合你的开发板的芯片型号(STM32F103C8T6),并选择一个合适的存储路径。 3. 配置工程设置:在创建工程后,你需要配置一些工程设置。例如,选择合适的编译器、调试器和目标设备等。 4. 编写代码:在Keil MDK软件中,打开新建的工程,并在源文件夹中创建一个新的C文件。在该文件中编写代码来点亮LED。 下面是一个简单的示例代码,用于点亮第一个LED(连接到GPIO Port C的Pin 13): ```c #include "stm32f10x.h" int main(void) { // 使能GPIOC时钟 RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 配置GPIOC Pin 13为推挽输出模式 GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13); GPIOC->CRH |= GPIO_CRH_MODE13; while (1) { // 点亮LED GPIOC->BSRR = GPIO_BSRR_BS13; // 延时一段时间 for (int i = 0; i < 1000000; i++); // 熄灭LED GPIOC->BSRR = GPIO_BSRR_BR13; // 延时一段时间 for (int i = 0; i < 1000000; i++); } } ``` 5. 编译和下载:在Keil MDK软件中,点击“Build”按钮来编译你的代码。如果编译成功,就可以将生成的可执行文件下载到STM32F103C8T6开发板上进行调试和运行。 以上是基于STM32F103C8T6创建并点亮第一个LED的基本步骤。如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Kb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值