-
1 安装keil5 MDK
- 双击 MDK524a.EXE
- 安装成功后管理员模式打开
- CID复制到破解软件 选择ARM
- 生成代码复制到New License ID Code
- Add LIC
- 破解完毕
-
2安装stm32芯片
- 可找资料自行安装 如下
- 可找资料自行安装 如下
-
3 创建工程
- Project->new project 本篇芯片为stm32f103
- 保存到自定义文件夹下
- 在根目录下创建以下文件夹用来储存环境文件
配置STM32环境
分别储存在
- User
- Library
- Start
- System
- User(用户文件夹):
这个文件夹是为了用户自己编写的代码而存在的。在这个文件夹中,用户可以编写自定义的应用程序代码,包括配置外设、处理中断、主程序等。
- Library(库文件夹):
这个文件夹中包含了STM32的标准外设库(Standard Peripheral Library,简称SPL)。SPL是STM32官方提供的库文件,方便用户对各个外设进行配置和操作。库文件包含了许多头文件和源文件,用于提供函数和宏定义,以方便用户使用和控制STM32的各个外设。
- Startup(启动文件夹):
这个文件夹中包含了STM32的启动文件,其中最重要的是启动代码(startup code)。启动代码主要是设置芯片的初始状态和初始化相关的处理,如设置中断向量表、堆栈指针初始化、外设时钟初始化等。启动文件夹也包含一些链接脚本和连接文件,用于指导编译和链接的过程。
- 在STM32的头文件中,System文件夹通常包含与系统初始化和底层支持相关的内容。以下是System文件夹中可能包含的内容:
1.系统启动文件(startup文件):
System文件夹中可能包含与启动代码相关的文件,用于设置芯片的初始状态和初始化处理。这些文件包括启动代码(startup code)、中断向量表等,并可能包含链接脚本和连接文件。
2. 系统初始化文件:
System文件夹中可能包含与系统初始化相关的文件,用于设置芯片的各种时钟配置、中断初始化等。这些文件可能包含有关时钟配置、中断向量表初始化、堆栈初始化等的代码。
3. 系统配置文件:
System文件夹中可能包含与系统配置相关的文件,用于设置芯片的默认配置和参数。这些文件可能包含有关系统时钟、外设配置等的宏定义和配置数据。
4. 系统库文件:
System文件夹中可能包含与系统底层支持相关的库文件,例如提供底层操作函数和宏定义的库文件。
请注意,System文件夹的具体内容可能因不同的STM32系列和开发工具链而有所差异。上述列举的内容仅是一般情况下可能存在于System文件夹中的内容。具体的内容可能需要根据实际情况和目标芯片的文档进行确认。
- 4将路径信息以及组配置到keil
然后就可以在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引脚输出为低电平状态。
端口赋值常用函数
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; //推挽输出均有驱动能力