STM32
工程创建编写教程
1,新建工程(用的keil5)
-
点击Project选择第一个
-
然后选择存放项目的文件夹(工程名最好取做Project)
-
选择开发对应的芯片
-
在工程文件夹里面新建三个文件夹Start、User、Library(这一步是将文件加入到工程文件夹里) //详细看视频
-
点击堆箱子按钮添加相应文件(配置头文件环境) //详细看视频
-
点击魔术棒按钮选择C/C++选项,将添加到三个文件添加到include Paths里去,并在define里填写USE_STDPERIPH_DRIVER
-
然后在旁边的debug选项里找到Use选择ST-Link Debugger,并在旁边的设置里找到Flash Download,勾上Reset and Run,确定OK
2,封装函数
主函数入口
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h" //下面添加各种自己编写的头文件
#include "LED.h" //LED灯的函数都写在这里
int main(void)
{
LightSensor_Init(); //先初始化
LED_Init();
while(1) //代码本体进行while循环一直执行
{
//while循环里面进行逻辑编写以及函数调用
LED1_ON //调用led1号灯亮起函数
delay_ms(500) //延时函数
LED1_OFF //调用led1号灯熄灭函数
}
}
初始化函数
如果要使用按钮,LED灯,蜂鸣器,光敏电源都在相应C代码里写初始化函数,然后在main.c文件里调用
LED.c
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //初始化时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //可以选择8种输入输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; //选择输出引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率
GPIO_Init(GPIOA, &GPIO_InitStructure); //指定外设初始化
GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);
}
函数编写
同样写在
LED.c
void LED1_ON(void) //开灯函数
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
void LED1_OFF(void) //关灯函数
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
头文件编写
头文件LED.h里进行函数声明,这里不进行阐述,然后在主函数里引用该头文件
调试
持续学习更新ing
功能源代码
LED灯闪烁
main.c代码
#include "stm32f10x.h" // Device header
#include "Delay.h" //延时函数库
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPO_InitStructure; //初始化结构体
GPO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPO_InitStructure.GPIO_Pin = GPIO_Pin_0; //0号引脚
GPO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPO_InitStructure);//
/*
这四个函数经常使用,需了解参数及使用
GPIO_ReSetBits
GPIO_SetBits
GPIO_WriteBits
GPIO_Weite
*/
while(1)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); //亮灯
Delay_ms(500); //延时
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); //灭灯
Delay_ms(500);
}
}
RED流水灯
main.c代码
#include "stm32f10x.h" // Device header
#include "Delay.h" //延时函数库
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPO_InitStructure; //初始化结构体
GPO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPO_InitStructure.GPIO_Pin = GPIO_Pin_All; //0号引脚
GPO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPO_InitStructure);//
/*
这四个函数经常使用,需了解参数及使用
GPIO_ReSetBits
GPIO_SetBits
GPIO_Writes
GPIO_Weite
*/
while(1)
{
GPIO_Write(GPIOA, ~0x0001); //第1位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0002); //第2位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0004); //第3位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0008); //第4位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0010); //第5位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0020); //第6位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0040); //第7位点亮其余都关闭
Delay_ms(100); //延时
GPIO_Write(GPIOA, ~0x0080); //第8位点亮其余都关闭
Delay_ms(100); //延时
}
}
蜂鸣器
工程项目新建Haedware文件夹
#include "stm32f10x.h" // Device header
#include "Delay.h" //延时函数库
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPO_InitStructure; //初始化结构体
GPO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPO_InitStructure.GPIO_Pin = GPIO_Pin_12; //0号引脚
GPO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPO_InitStructure);//
while(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12); //第1位点亮其余都关闭
Delay_ms(100); //延时
GPIO_SetBits(GPIOB, GPIO_Pin_12); //第2位点亮其余都关闭
Delay_ms(100); //延时
}
}
文件目录
-
/Hardware:硬件驱动目录
-
/Start:启动文件目录
-
/Library:驱动文件目录
-
/User:代码文件/配置文件目录
工具
:工程编写工具
:该工具放到工程文件夹里可以删除编译产生的中间文件