【STM32F1例程1】GPIO输出驱动LED

自我介绍    

    这篇文章是我作为博客的第一篇文章,自己也将尝试经常更新相关博客,学的不是很优秀,也是督促自己通过博客的方式不断学习更多的技术,我也会发布除嵌入式以外其他领域的知识内容,大家一起学习,有错误或者问题希望大家积极指出批评。

 正式开始

     接下来是正式的内容,看到题目相信大家都不陌生,嵌入式专业超级入门级的一个小测试,先点个灯!!!关于STM32F1的开发板,不做过多的介绍,全网资料一大堆哦!!并且这个测试,
无需连外部杜邦线,用STLINK 下载程序,全速运行,可以看到LED D1(PB4引脚驱动)能200ms间隔闪烁。

代码片段

main.c

#include "delay.h"
#include "sys.h"


//LED 初始化PB4
void GPIO_Config_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能PB端口时钟使能
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 //PB4 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB4
 GPIO_ResetBits(GPIOB,GPIO_Pin_4);						  //PB4 输出低
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE ); //配置复用时钟
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //全功能SW+JTAG,禁用JTRST,PB4可用
	
}

//主函数,采用外部8M晶振,72M系统主频,可以在void SetSysClock(void)函数中选择主频率设置
int main(void)
 {	
	
	 delay_init();	    	//延时函数初始化,通过Systick中断实现1ms延时功能  
	 GPIO_Config_Init();	//初始化GPIO,PB4配置成推挽输出
	 
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_4);//PB4输出低
		delay_ms(100);//等待100ms
		GPIO_SetBits(GPIOB,GPIO_Pin_4);//PB4输出高
		delay_ms(100);
	}
 }

可以提供delay.c

#include "delay.h"

//初始化延迟函数
//当使用OS的时候,此函数会初始化OS的时钟节拍
//配置等待时间单位为1ms
void delay_init(void)
{
	if(SysTick_Config(SystemCoreClock / 1000))//systick中断配置,1ms进入中断一次,stm32f10x_it.c 文件中的SysTick_Handler函数中调用计数
  { 	
		
  }
}								    


static __IO uint32_t TimingDelay;//时间计数值
//1ms延时
void delay_ms(__IO uint32_t  nTime)
{	 		  	  
  TimingDelay = nTime;

  while(TimingDelay != 0);
 	    
} 

//1ms被调用一次
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  { 
    TimingDelay--;
  }
}

sys.c

#include "sys.h"

//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI  
void WFI_SET(void)
{
	__ASM volatile("wfi");		  
}
//关闭所有中断
void INTX_DISABLE(void)
{		  
	__ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
	__ASM volatile("cpsie i");		  
}
//设置栈顶地址
//addr:栈顶地址
 __asm void MSR_MSP(u32 addr) 
{
   MSR MSP, r0			
    BX r14
}

这只是一个简单的小测试哦,希望刚刚接触的同学第一次小小的实验可以很顺利!!!

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: STM32F1标准例程是指针对STMicroelectronics公司的STM32F1系列微控制器开发的一套标准程序代码,通过使用这套例程,开发者可以快速启动并进行STM32F1的开发工作。 STM32F1标准例程为开发者提供了各种功能和模块的实现方法,包括但不限于GPIO控制、定时器和计数器、PWM输出、UART通信、SPI和I2C通信等。这些例程是根据STM32F1系列微控制器的特性和功能设计的,并且经过STMicroelectronics官方的验证和测试。 使用STM32F1标准例程可以实现快速开发和验证。开发者可以在例程中找到许多已经编写好的代码段,根据自己的需求进行修改和定制,从而快速实现特定功能。此外,例程还提供了详细的注释和说明,开发者可以借助这些信息更好地理解代码实现的原理和逻辑。 另外,为了方便开发者使用,STMicroelectronics还提供了一套完整的开发工具链,包括STMCubeMX配置工具、MDK-ARM开发环境等。开发者可以使用这些工具与STM32F1标准例程结合,提高开发效率。 总之,STM32F1标准例程是一套方便开发者使用和定制的代码集合,能够帮助开发者快速启动并实现STM32F1系列微控制器的各种功能。通过使用这些例程,开发者可以节省大量的时间和精力,快速开发出高质量的应用程序。 ### 回答2: stm32f1标准例程是指STM32F1系列微控制器的官方示例代码。它提供了一系列标准例程,展示了STM32F1系列微控制器的各种功能和应用方案。这些例程覆盖了各个核心模块,包括时钟控制、GPIO控制、中断处理、定时器、串口通信、ADC转换、PWM输出等。通过学习和使用这些例程,可以快速了解和上手STM32F1系列微控制器。 标准例程通常有详细的代码注释,结构清晰,易于学习和理解。用户可以通过官方网站或官方提供的软件开发工具下载和使用这些例程。首先,用户需要根据自己的需求选择合适的例程,并下载到开发环境中。然后,根据例程的指导和注释,进行初始化配置和功能实现。用户可以根据自己的需求进行修改和扩展,以满足具体应用的要求。 使用STM32F1标准例程可以节省开发时间,提高开发效率。它为开发者提供了一个学习和实践的平台,帮助他们快速掌握STM32F1系列微控制器的使用方法和开发技巧。同时,标准例程还提供了一些经典应用的范例,可以供开发者参考和借鉴,快速完成项目开发。 总之,STM32F1标准例程是一套官方提供的示例代码,用于演示和学习STM32F1系列微控制器的各种功能和应用方案。通过使用这些例程,开发者可以快速上手STM32F1系列微控制器,提高开发效率,并实现各种应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会计算机的g_c__b

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

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

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

打赏作者

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

抵扣说明:

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

余额充值