STM32F103点亮LED灯

这篇博客详细介绍了如何使用STM32F103C8T6微控制器点亮LED灯。步骤包括打开GPIO时钟、初始化GPIO口为推挽输出并设置低电平,新建Keil uVision项目,编写C代码,以及连接电路和上传HEX文件。过程中提到了所需的硬件工具和关键代码配置。

使用工具:
stm32f103C8T6
USB转串口
面包板
导线若干
LED3个

一、点灯

点亮LED灯,需要用到GPIO端口。

为了点亮LED灯,需要三个步骤:

打开GPIO口的时钟
初始化GPIO口(选择推挽输出)
设置低电平

1.打开时钟

GPIO的地址:
在这里插入图片描述
时钟的地址:

在这里插入图片描述
在这里插入图片描述
即0x40021018,则打开三个IO口的时钟需要将三个位都置1:

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

// 打开时钟
RCC_APB2ENR |= (1<<3);  // 打开 GPIOB 时钟
RCC_APB2ENR |= (1<<4);  // 打开 GPIOC 时钟
RCC_APB2ENR |= (1<<2);  // 打开 GPIOA 时钟

2. 初始化

GPIO口有八种模式:

输入浮空
输入上拉
输入下拉
模拟输入
开漏输出
推挽式输出
推挽式复用功能
开漏复用功能
这里使用推挽输出
在这里插入图片描述
在这里插入图片描述
端口1-7为低,端口8-15为高。每个引脚由四个位控制。
以GPIOB和0号引脚(B0)为例,将其设置为推挽输出,并设置最大速度为10MHz,则将控制B0的四个位设置为0001:
在这里插入图片描述

#define GPIOB_CRL (*(unsigned int *)0x40010c00)

// 最后四位变为0001
GPIOB_CRL |= (1<<0);  // 最后一位变1
GPIOB_CRL &= ~(0xE<<0);  // 倒数2、3、4位变0

对于GPIOB的B0、GPIOC的C15、GPIOA的A0,设置如下:

#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)

// 配置 GPIO 口为推免输出
// GPIOB----最后四位为0001
GPIOB_CRL |= (1<<0);  // 最后一位变1
GPIOB_CRL &= ~(0xE<<
使用STM32F103点亮LED有多种实现方法和相应教程,以下为你详细介绍: ### 库函数方法 在STM32的库函数里,可通过声明`GPIO_InitTypeDef`结构体来初始化GPIO引脚。具体步骤如下: 1. 使能GPIOA的时钟:`RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);` 2. 定义`GPIO_InitTypeDef`结构体变量`GPIO_InitStructure`,并配置其成员: - `GPIO_Pin`:指定引脚,如`GPIO_Pin_8`。 - `GPIO_Mode`:设置为推挽输出模式`GPIO_Mode_Out_PP`。 - `GPIO_Speed`:速率一般设为`GPIO_Speed_50MHz`。 3. 调用`GPIO_Init`函数初始化GPIOA:`GPIO_Init(GPIOA,&GPIO_InitStructure);` 4. 将指定引脚电平拉低以点亮LED:`GPIO_ResetBits(GPIOA, GPIO_Pin_8);` 以下是示例代码: ```c #include "stm32f10x.h" int main() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_ResetBits(GPIOA, GPIO_Pin_8); while(1) { } //return 0; } ``` ### 通用步骤方法 不管采用何种方式点亮LED,通常都需要以下3个步骤: 1. 使能时钟(AHB、SPB2)。 2. 配置IO口(CRL、CRH寄存器)。 3. 控制IO口(ODR寄存器或BSRR和BRR寄存器)。 ### 寄存器配置方法 对于GPIOB的B0、GPIOC的C15、GPIOA的A0,可进行如下设置: ```c #define GPIOB_CRL (*(unsigned int *)0x40010C00) #define GPIOC_CRH (*(unsigned int *)0x40011004) #define GPIOA_CRL (*(unsigned int *)0x40010800) // 配置 GPIO 口为推挽输出 // GPIOB----最后四位为0001 GPIOB_CRL |= (1<<0); // 最后一位变1 GPIOB_CRL &= ~(0xE<<0); // 倒数2、3、4位变0 // GPIOC----前四位为0001 GPIOC_CRH |= (1<<28); // 第四位变1 GPIOC_CRH &= ~(0xE0000000); // 前三位变0 // GPIOA----最后四位为0001 GPIOA_CRL |= (1<<0); // 最后一位变1 GPIOA_CRL &= ~(0xE<<0); // 倒数2、3、4位变0 // 设置低电平 ``` 通过上述方法和教程,读者能够掌握STM32F103微控制器点亮LED的核心技术,并将其应用于各自的项目中 [^1][^2][^4][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值