文章目录
一、环境搭建
1、硬件
1、stm32f103板一个
2、面包板
3、LED灯三个
4、串口连接器
5、计算机
2、软件
keil软件
二、基于寄存器方式点亮流水灯
1、创建工程
1、打开keil,点击Project,选择New uVision Project,选择一个文件夹


2、选择 CPU 型号,根据开发板进行选择

3.在线添加库文件
用寄存器控制 STM32 时,不需要在线添加库文件,可以直接关掉。
2、工程配置
1、点击




点击Settiings


点击确定设置完成
3、添加main.c文件
1、
然后点击保存,建议保存在你创建的工程目录下
2、双击

把你的mian.c文件加入进去
4、编写代码
#include "stm32f10x.h"
//----------------APB2使能时钟寄存器 ---------------------
#define RCC_APB2ENR *((unsigned volatile int*)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(通用输入输出)外设。
150

被折叠的 条评论
为什么被折叠?



