文章目录
一、环境搭建
1、硬件
1、stm32f103板一个
2、面包板
3、LED灯三个
4、串口连接器
5、计算机
2、软件
keil软件
二、基于寄存器方式点亮流水灯
1、创建工程
1、打开keil,点击Project,选择New uVision Project,选择一个文件夹
0x40021018)
//----------------GPIOA配置寄存器 -----------------------
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOA_ODR *((unsigned volatile int*)0x4001080C)
//----------------GPIOB配置寄存器 -----------------------
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00)
#define GPIOB_ODR *((unsigned volatile int*)0x40010C0C)
//----------------GPIOC配置寄存器 -----------------------
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
#define GPIOC_ODR *((unsigned volatile int*)0x4001100C)
//延时函数
void Delay()
{
u32 i=0;
for(;i<10000000;i++);
}
int main(void)
{
RCC_APB2ENR|=1<<2|1<<3|1<<4; //APB2-GPIOA、GPIOB、GPIOC外设时钟使能
GPIOA_CRL&=0xFFF0FFFF; //设置位 清零
GPIOA_CRL|=0x00020000; //PA4推挽输出
GPIOA_ODR&=~(1<<4); //设置初始灯为灭
GPIOB_CRL&=0xFF0FFFFF; //设置位 清零
GPIOB_CRL|=0x00200000; //PB5推挽输出
GPIOB_ODR&=~(1<<5); //设置初始灯为灭
GPIOC_CRH&=0xF0FFFFFF; //设置位 清零
GPIOC_CRH|=0x00200000; //PC13推挽输出
GPIOC_ODR&=~(1<<13); //设置初始灯为灭
while(1){
//A灯
GPIOA_ODR|=1<<4; //A4高电平
Delay();
GPIOA_ODR&=~(1<<4); //A4低电平
//B灯
GPIOB_ODR|=1<<5; //PB5高电平
Delay();
GPIOB_ODR&=~(1<<5); //PB5低电平
//C灯
GPIOC_ODR&=~(1<<13); //PB5低电平
Delay();
GPIOC_ODR|=1<<13; //PB5高电平
}
}
5、编译运行
三、基于标准库创建工程
1、下载标准库
st公司官方下载地址https://www.st.com/zh/embedded-software/stsw-stm32108.html
2、创建keil文件并配置标准库
1、创建项目
创建步骤与前面一致,注意在这直接关掉,不需要在这配置库函数,后续自己配置
2、将下载好的标准库中的文件复制到你创建的工程文件中
3、接着,在Keil种新增文件组:点击
依次添加各个文件
4、接着,点击魔术棒,点击C++ -> include path 添加文件路径非常重要
依次添加
3、编写主函数
#include "stm32f10x.h"
void GPIO_Init(void);
int main(void) {
GPIO_Init(); // 初始化GPIO管脚
while (1) {
GPIO_SetBits(GPIOA, GPIO_Pin_4); // 点亮A4管脚
GPIO_SetBits(GPIOB, GPIO_Pin_5); // 点亮B5管脚
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 点亮C13管脚
// 延时一段时间
for (volatile int i = 0; i < 1000000; i++);
GPIO_ResetBits(GPIOA, GPIO_Pin_4); // 关闭A4管脚
GPIO_ResetBits(GPIOB, GPIO_Pin_5); // 关闭B5管脚
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 关闭C13管脚
// 延时一段时间
for (volatile int i = 0; i < 1000000; i++);
}
}
void GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOA、GPIOB和GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// 配置A4管脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置B5管脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 配置C13管脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
4、编译运行
5、总结
LED流水灯实验是基于STM32F103标准外设库的一个基础实验,通过这个实验,我们可以了解如何使用STM32F103的标准外设库来控制LED灯的亮灭和模式。
STM32F103标准外设库提供了对芯片上各种外设的控制能力,包括GPIO(通用输入输出)外设。