一、在keil中配置外设库
1.创建新工程并选择相应的芯片,这里选择为STM32F103C8芯片。
2.在此步骤中不选择任何选项,直接点击OK跳过
3.在Manage Project Items设置中创建SYSTEM、CORE、FWLIB、USER四个文件夹。
4.在SYSTEM文件中将外设库的src文件夹中的所有文件加入。
5.将USER文件夹中导入main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件
6.在FWLIB文件中导入startup_stm32f10x_md.s文件
7.在CORE文件中导入core_cm3.c、system_stm32f10x.c文件,点击ok完成设置
8.点击“魔法棒”选项,在c/c++一栏设置标准库路径
9.在Define一栏中输入以下内容STM32F10X_MD,USE_STDPERIPH_DRIVER,并进行相应设置。
二、实验代码以及运行结果
1.创建bsp_led.h文件并编写相应内容
#ifndef _BSP_LED_H
#define _BSP_LED_H
#include "stm32f10x.h" //要包含固件库的.h文件
#define LED_G_GPIO_PIN GPIO_Pin_0 //定义绿灯管脚号
#define LED_B_GPIO_PIN GPIO_Pin_1 //定义蓝灯管脚号
#define LED_R_GPIO_PIN GPIO_Pin_5 //定义红灯管脚号
#define LED_G_GPIO_PORT GPIOB //定义用到的GPIO
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB//定义RCC时钟寄存器
void LED_GPIO_Config(void); //.c文件中的函数声明
#endif /*_BSP_LED_H*/
2.创建bsp_led.c文件并编写相应内容
#include "bsp_led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //定义变量,方便赋值
RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE); //打开APB2时钟,GPIO挂载在APB2
//GPIO_PIN的部分用或将用到的管脚初始化为一个十六进制数据,原本是三个十六进制
GPIO_InitStruct.GPIO_Pin = (LED_G_GPIO_PIN|LED_B_GPIO_PIN|LED_R_GPIO_PIN); //设置需要用到的管脚,LED_G_GPIO_PIN看.h文件
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式为推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率为50MHz,LED_G_GPIO_CLK看.h文件
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); //加上&,方便取值 //初始化GPIO
}
3.在main.c文件中编写相应内容
#include "stm32f10x.h"
#include "bsp_led.h"
void Delay(uint32_t count)
{
for(;count != 0;count--);
}
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_GPIO_Config(); //GPIO初始化
while(1)
{//LED流水灯,保险起见,点亮其中一个灯时,将其余两个灯都关闭
GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN); //关灯
GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN); //关灯
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //开灯
Delay(0xFFFFFF);
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //关灯
GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN); //关灯
GPIO_ResetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN); //开灯
Delay(0xFFFFFF);
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //关灯
GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN); //关灯
GPIO_ResetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN); //开灯
Delay(0xFFFFFF);
}
4.进行编译
5.实物运行成果
三、Keil的软件仿真观察管脚的时序波形
1.点击Debug栏中进行如下设置
2.使用Debug中如图所示选项进行运行
3.设置示波器选项
4.运行
5.运行结果
由运行结果显示其周期为3.495278s
运行如下: