stm32寄存器方式点亮LED仿真

一、实验原理

1.认识Stm32F103C8T6

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。

  • 系列: 主流系列STM32F1
  • 内核: ARM Cortex-M3
  • 主频: 72MHz
  • RAM: 20K(SRAM)
  • ROM: 64K(Flash)
  • 供电: 2.0-3.6V
  • 封装: LQFP48

1.1 命名规则

F表示的是基础型,103表示Stm32基础型。C指引脚数为48引脚,8表示闪存容量为64kB,T是采用QFP封装技术。
在这里插入图片描述

1.2 引脚解读

在这里插入图片描述
在这里插入图片描述

1.3 GPIO介绍

GPIO是通用输入输出口,有8种输入输出模式:

模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部链接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部链接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS

在这里插入图片描述

从上图中,可以看出stm32的所有GPIO外设都连接在APB2外设总线上。

二、点亮LED

2.1 创建工程

在这里插入图片描述
选择stm32F103c8设备
在这里插入图片描述
勾选CMSIS(CMSIS是Cortex Microcontroller Software Interface Standard的缩写,中文为Cortex系列微控制器软件接口标准。)中的CORE,Device中的Startup
在这里插入图片描述
完成后点击ok,添加启动文件。右键Source Group 1,添加
在这里插入图片描述

2.2 配置引脚

首先选择一个GPIO引脚作为输出引脚来连接LED。在STM32F103中,有很多GPIO端口可以选择,本次实验选择GPIOA的引脚0作为输出引脚。

2.3 GPIO端口初始化

GPIO的每个寄存器在使用前都需要进行时钟使能,这样比起全部开启减少了功率消耗。所以第一步需要先将需要用到的寄存器进行使能。查阅数据手册
在这里插入图片描述

在这里插入图片描述
使能对应端口时钟

#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)

RCC_APB2ENR!=1<<2;//将GPIOA使能

2.4 初始化引脚

GPIO寄存器包括有端口配置低寄存器和端口配置高寄存器。A0属于端口配置低寄存器偏移地址为0x00。查表得到GPIOA的基地址为0x40010800
在这里插入图片描述
首先需要先设置GPIOA引脚0的输出模式以及速度,将其设置为推挽输出(为什么要设置为推挽输出呢)

//GPIOA配置寄存器
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
//GPIOA输出数据寄存器
#define GPIOA_ODR *((unsigned volatile int*)0x4001080c)
//GPIOA设置为推挽输出
GPIOA_CRL&=0xFFFFFFF0 //设置位 清零
GPIOA_CRL|=0x00000003 //PA0推挽最快速输出

2.5 编写完整C程序并点灯

2.5.1 硬件配置

  • usb转ttl和stm32的连接
    在这里插入图片描述
    连接如下:
    在这里插入图片描述
    紫色线(GND对应stm32上的GND)
    黑色线(3v3对应stm32上的3v3)
    灰色线(TXD对应stm32上的引脚A10)
    白色线(RXD对应stm32上的引脚A9)
  • 发光二极管连接
    本实验采用的是A0引脚,故将二极管的长脚连接A0,短脚接地。
    在这里插入图片描述

2.5.2 完整程序

//定义每个寄存器
//CPIOA的外设时钟使能寄存器
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
//选择CPIOA0作为点灯输出引脚
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)	//GPIOA配置寄存器
#define GPIOA_ODR *((unsigned volatile int*)0x4001080c) //GPIOA输出数据寄存器

//延时函数
void Delay_ms( volatile unsigned int t){
	unsigned int i,j;
	for(j = 0; j < t; j++){
		for(i = 0; i < 1000 ; i++);
	}
}

int main() {
	RCC_APB2ENR|=1<<2;
	//GPIOA设置为推挽输出
	GPIOA_CRL&=0xFFFFFFF0; //设置位 清零
	GPIOA_CRL|=0x00000003; //PA0推挽最快速输出
	while(1){
		GPIOA_ODR=0x1;
		Delay_ms(5000);
		GPIOA_ODR=0x0;
		Delay_ms(5000);
	}
}

2.5.3 编译烧录

点击keil中的build进行编译,需要在魔法棒中配置debug里生成hex文件,使用mcuisp烧录软件进行烧录。
在这里插入图片描述

2.5.4 最后效果

在这里插入图片描述
总结:经过本次实验,初步认识了stm32,也更清楚了如何阅读数据手册,并在查阅资料的过程中,扩展了新知识。

参考资料:
https://blog.csdn.net/apple_52030329/article/details/127232915?spm=1001.2014.3001.5502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值