STM32f103入门(1) 配置&&点亮Led灯

  • 1 安装keil5 MDK

    • 双击 MDK524a.EXE
    • 安装成功后管理员模式打开
    • CID复制到破解软件 选择ARM
    • 生成代码复制到New License ID Code
    • Add LIC
    • 破解完毕
      STM32f103入门(1) 配置&&点亮Led灯_第1张图片
      STM32f103入门(1) 配置&&点亮Led灯_第2张图片
  • 2安装stm32芯片

    • 可找资料自行安装 如下
      STM32f103入门(1) 配置&&点亮Led灯_第3张图片
  • 3 创建工程

    • Project->new project 本篇芯片为stm32f103
    • 保存到自定义文件夹下
    • 在根目录下创建以下文件夹用来储存环境文件

配置STM32环境
分别储存在

  • User
  • Library
  • Start
  • System
  1. User(用户文件夹):
    这个文件夹是为了用户自己编写的代码而存在的。在这个文件夹中,用户可以编写自定义的应用程序代码,包括配置外设、处理中断、主程序等。
  1. Library(库文件夹):
    这个文件夹中包含了STM32的标准外设库(Standard Peripheral Library,简称SPL)。SPL是STM32官方提供的库文件,方便用户对各个外设进行配置和操作。库文件包含了许多头文件和源文件,用于提供函数和宏定义,以方便用户使用和控制STM32的各个外设。
  1. Startup(启动文件夹):
    这个文件夹中包含了STM32的启动文件,其中最重要的是启动代码(startup code)。启动代码主要是设置芯片的初始状态和初始化相关的处理,如设置中断向量表、堆栈指针初始化、外设时钟初始化等。启动文件夹也包含一些链接脚本和连接文件,用于指导编译和链接的过程。
  1. 在STM32的头文件中,System文件夹通常包含与系统初始化和底层支持相关的内容。以下是System文件夹中可能包含的内容:
    1.系统启动文件(startup文件):
    System文件夹中可能包含与启动代码相关的文件,用于设置芯片的初始状态和初始化处理。这些文件包括启动代码(startup code)、中断向量表等,并可能包含链接脚本和连接文件。
    2. 系统初始化文件:
    System文件夹中可能包含与系统初始化相关的文件,用于设置芯片的各种时钟配置、中断初始化等。这些文件可能包含有关时钟配置、中断向量表初始化、堆栈初始化等的代码。
    3. 系统配置文件:
    System文件夹中可能包含与系统配置相关的文件,用于设置芯片的默认配置和参数。这些文件可能包含有关系统时钟、外设配置等的宏定义和配置数据。
    4. 系统库文件:
    System文件夹中可能包含与系统底层支持相关的库文件,例如提供底层操作函数和宏定义的库文件。
    请注意,System文件夹的具体内容可能因不同的STM32系列和开发工具链而有所差异。上述列举的内容仅是一般情况下可能存在于System文件夹中的内容。具体的内容可能需要根据实际情况和目标芯片的文档进行确认。
  • 4将路径信息以及组配置到keil
  • STM32f103入门(1) 配置&&点亮Led灯_第4张图片
    STM32f103入门(1) 配置&&点亮Led灯_第5张图片STM32f103入门(1) 配置&&点亮Led灯_第6张图片
    STM32f103入门(1) 配置&&点亮Led灯_第7张图片
    STM32f103入门(1) 配置&&点亮Led灯_第8张图片
    STM32f103入门(1) 配置&&点亮Led灯_第9张图片
    然后就可以在main文件中写代码了
    点亮PA0的led灯

#include "stm32f10x.h"
int main(void){
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //ÍÆÃâÊä³ö
	GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	
	while(1){
			
	}
	
}

1. `RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);`
   这行代码是使用`RCC_APB2PeriphClockCmd`函数打开GPIOA外设的时钟。`RCC_APB2PeriphClockCmd`函数用于使能特定外设的时钟,这里使能的是GPIOA外设的时钟。

2. `GPIO_InitTypeDef GPIO_InitStructure;`
   定义了一个名为`GPIO_InitStructure`的结构体变量`GPIO_InitTypeDef`,用于存储GPIO口的初始化参数。

3. `GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Mode`为输出推挽模式。这意味着GPIOA的第0引脚是被配置为输出模式,可以提供高或低电平输出。

4. `GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Pin`为GPIO_Pin_0。这表示要配置的GPIO口引脚为GPIOA的第0引脚。

5. `GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Speed`为50MHz。这表示GPIOA的输出速率被设置为50MHz,即输出电平的切换速度为50MHz。

6. `GPIO_Init(GPIOA, &GPIO_InitStructure);`
   使用`GPIO_Init`函数将上述配置应用到GPIOA外设。该函数将GPIOA的相关参数和配置信息作为参数传递进去,以完成GPIO口的初始化。

7. `GPIO_ResetBits(GPIOA, GPIO_Pin_0);`
   最后一行代码将GPIOA的第0引脚输出拉低,即设置为逻辑低电平。这样可以确保初始化后,GPIOA的第0引脚输出为低电平状态。

STM32f103入门(1) 配置&&点亮Led灯_第10张图片

端口赋值常用函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
对指定端口置0

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
对指定端口置1

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
对指定端口置自定义值(BitsVal = Bit_RESET/Bit_SET)

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

//Led闪烁程序
#include "stm32f10x.h"
#include "Delay.h"
int main(void){
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //ÍÆÃâÊä³ö
	GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	
	while(1){
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
	}
	
}

//开漏输出 
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD; //开漏输出 高电平相当于高阻态没有驱动能力
//低电平有驱动能力


//推免输出
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //推挽输出均有驱动能力

你可能感兴趣的:(单片机,arm,stm32,嵌入式硬件,单片机)