1. 新建固件库工程文件
1.1 找到一个固件库模板
1.2 打开 KEIL5 新建工程
最终效果:
1.3 添加相关文件
- STARTUP:添加Libraries——>CMSIS——>startup中的启动文件
- USER:添加固件库的User文件夹中的.c文件
- CMSIS:添加Libraries——>CMSIS文件夹中的.c文件
- DOC:添加固件库中Doc文件夹的readme.txt
- FWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件
最终效果:
1.4 手动添加其他文件路径进来
打开stm32f0x.h文件
Ctrl + F 查找 stm32f10x_conf
2. STM32固件库点灯
2.1 在 User 底下创建 led 文件夹,led 文件夹创建 led.c .h 文件
2.2 将 led.c 加入 USER 组
2.3 添加 led.h 路径
2.4 在 led.h 头文件中声明 LED_Init()函数(直接复制void LED_Init(void) + ;号)
2.5 点灯开始
2.5.1 使能APB2时钟
在 FWLIB 组中寻找 rcc.c,在 rcc.c 中寻找 rcc.h,找到函数复制粘贴。
Ctrl + F 查找 RCC_APB2Periph ,复制 RCC_APB2Periph_GPIOC
右键 Go To
2.5.2 配置结构体
注意:步骤一(使能APB2时钟)图片中函数 RCC_AHBPeriphClockCmd()函数复制错了,正确的应该为:
RCC_APB2PeriphClockCmd()
2.5.3 初始化GPIOC13
GPIOx:GPIOC ,x = C *GPIO_InitStruct:第二步配置的结构体,要取地址 &
2.6 main 函数调用 初始化 LED_Init () 、 拉低电平 GPIO_ResetBits ()
led.h、led.c 和 main.c
led.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef led_init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
led_init.GPIO_Mode = GPIO_Mode_Out_PP;
led_init.GPIO_Pin = GPIO_Pin_13;
led_init.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &led_init);
}
led.h
#include "stm32f10x.h"
void LED_Init(void);
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
int main()
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOC , GPIO_Pin_13);
}
}
3. LED 闪烁
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i=10000;
while(i--);
}
}
int main()
{
LED_Init();
GPIO_SetBits(GPIOC , GPIO_Pin_13);
while(1)
{
GPIO_ResetBits(GPIOC , GPIO_Pin_13);
delay(1000);
GPIO_SetBits(GPIOC , GPIO_Pin_13);
delay(1000);
}
}
4. 呼吸灯
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i=10;
while(i--);
}
}
int main()
{
unsigned char i=0;
unsigned int t=1;
unsigned char flag=1;
LED_Init();
while(1)
{
if(flag==1)
{
for(i=0;i<10;i++)
{
GPIO_ResetBits(GPIOC , GPIO_Pin_13);
delay(t);
GPIO_SetBits(GPIOC , GPIO_Pin_13);
delay(501-t);
}
t++;
if(t==500)
{
flag=0;
}
}
if(flag==0)
{
for(i=0;i<10;i++)
{
GPIO_ResetBits(GPIOC , GPIO_Pin_13);
delay(t);
GPIO_SetBits(GPIOC , GPIO_Pin_13);
delay(501-t);
}
t--;
if(t==1)
{
flag=1;
}
}
}
}
|