STM32F103C8T6 使用直接寄存器操作点亮 LED 灯
STM32F103C8T6 使用直接寄存器操作点亮 LED 灯
本文将介绍如何使用直接寄存器操作的方式控制 STM32F103C8T6 的 GPIO,并提供点亮 LED 灯的代码示例。
1. 确定 LED 连接的 GPIO 引脚
首先,需要确定 LED 连接到 STM32F103C8T6 的哪个 GPIO 引脚。假设 LED 连接到 GPIOA 的引脚 4 (PA4)。
2. GPIO 寄存器
STM32F103C8T6 的 GPIO 端口 A 的寄存器地址为 0x40010800,其中:
- GPIOA_CRL (0x40010800): 控制 GPIOA0-GPIOA7 的模式和配置。* GPIOA_CRH (0x40010804): 控制 GPIOA8-GPIOA15 的模式和配置。* GPIOA_IDR (0x40010808): 读取 GPIOA 的输入数据。* GPIOA_ODR (0x4001080C): 设置 GPIOA 的输出数据。* GPIOA_BSRR (0x40010810): 用于原子操作设置或清除 GPIOA 的输出数据。* GPIOA_BRR (0x40010814): 用于清除 GPIOA 的输出数据。
3. 代码实现
要使用直接寄存器操作点亮 LED,我们需要进行以下步骤:
- 将 GPIOA 的时钟使能。2. 将 PA4 配置为输出模式。3. 向 GPIOA_BSRR 寄存器的对应位写入 '1',将 PA4 拉高,点亮 LED。
以下代码示例展示了如何使用直接寄存器操作点亮 LED:c// 使能 GPIOA 的时钟RCC->APB2ENR |= (1 << 2);
// 将 PA4 配置为输出模式 (2MHz)GPIOA->CRL |= (1 << 20); // 设置模式为输出模式 (01)GPIOA->CRL &= ~(1 << 21); // 设置速度为 2MHz (01)
// 将 PA4 拉高,点亮 LED*((volatile uint32_t*)0x40010810) |= (1 << 4);
4. 代码解释
RCC->APB2ENR |= (1 << 2);: 这行代码使能了 GPIOA 的时钟。*GPIOA->CRL |= (1 << 20);: 这行代码将 PA4 的模式设置为输出模式。*GPIOA->CRL &= ~(1 << 21);: 这行代码将 PA4 的速度设置为 2MHz。**((volatile uint32_t*)0x40010810) |= (1 << 4);: 这行代码将 GPIOA_BSRR 寄存器的第 4 位设置为 '1',将 PA4 拉高,点亮 LED。
注意: 使用直接寄存器操作需要对 STM32F103C8T6 的寄存器地址和位定义非常熟悉。建议在实际项目中使用 STM32 标准库或 HAL 库来操作 GPIO,这样代码更易读、易维护。
原文地址: https://www.cveoy.top/t/topic/fNpi 著作权归作者所有。请勿转载和采集!