/*
使用寄存器的方法点亮LED灯
*/
#include "stm32f4xx.h"
/**
* 主函数
*/
int main(void)
{
/*开启 GPIOF 时钟,使用外设时都要先开启它的时钟*/
RCC_AHB1ENR |= (1<<5);
/* LED 端口初始化 */
/*GPIOF MODER6清空*/
GPIOF_MODER &= ~( 0x03<< (2*6));
/*PF6 MODER6 = 01b 输出模式*/
GPIOF_MODER |= (1<<2*6);
/*GPIOF OTYPER6清空*/
GPIOF_OTYPER &= ~(1<<1*6);
/*PF6 OTYPER6 = 0b 推挽模式*/
GPIOF_OTYPER |= (0<<1*6);
/*GPIOF OSPEEDR6清空*/
GPIOF_OSPEEDR &= ~(0x03<<2*6);
/*PF6 OSPEEDR6 = 0b 速率2MHz*/
GPIOF_OSPEEDR |= (0<<2*6);
/*GPIOF PUPDR6清空*/
GPIOF_PUPDR &= ~(0x03<<2*6);
/*PF6 PUPDR6 = 01b 上拉模式*/
GPIOF_PUPDR |= (1<<2*6);
/*PF6 BSRR寄存器的 BR6置1,使引脚输出低电平*/
GPIOF_BSRR |= (1<<16<<6);
/*PF6 BSRR寄存器的 BS6置1,使引脚输出高电平*/
//GPIOF_BSRR |= (1<<6);
while(1);
}
// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{
}
/*********************************************END OF FILE**********************/
STM32寄存器点亮LED
需积分: 0 88 浏览量
更新于2023-04-24
1
收藏 12KB ZIP 举报
STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统设计,尤其在IoT(物联网)和消费电子领域。本教程将详细解释如何通过STM32的寄存器操作来点亮LED。
理解STM32的硬件结构是至关重要的。每个STM32芯片都有多个GPIO(通用输入/输出)端口,这些端口可以配置为输出,以驱动LED等外部设备。例如,我们可能会选择PA0引脚作为我们的LED控制线。PA0属于GPIOA端口,它由一系列的寄存器控制。
在STM32中,GPIO端口的操作主要涉及以下寄存器:
1. GPIOx_MODER(模式寄存器):用于设置GPIO引脚的工作模式,如输入、输出、复用功能等。要将PA0设为推挽输出,我们需要将MODER寄存器的低两位(对应PA0的位)设置为01。
2. GPIOx_OTYPER(输出类型寄存器):设定输出类型,推挽或开漏。对于LED,通常使用推挽输出,因此保持默认值0即可。
3. GPIOx_OSPEEDR(输出速度寄存器):设置GPIO的输出速度,有低速、中速、高速和超高速四种选项。根据LED驱动电流和应用需求选择合适的速度。
4. GPIOx_PUPDR(上拉/下拉寄存器):配置引脚的上拉、下拉电阻状态。对于输出模式,通常设置为无上拉无下拉,即00。
5. GPIOx_BSRR(置位/复位寄存器):用来设置或清除GPIO的输出数据。要点亮LED,我们向BSRR的低16位(BR0)写1,将PA0置位为高电平;熄灭LED则向BSRR的高16位(BS0)写1,将PA0复位为低电平。
编程实现这个过程通常涉及以下步骤:
1. 配置GPIO时钟:在进行任何GPIO操作前,需要开启GPIO端口的时钟。这涉及到RCC(复用功能时钟)寄存器的配置。
2. 初始化GPIO端口:根据上述寄存器设置,编写初始化函数,设置PA0为推挽输出模式,并关闭上拉/下拉。
3. 控制LED:通过读写GPIOx_BSRR寄存器来控制LED的状态。
以下是一个简单的C语言示例:
```c
#include "stm32f1xx.h"
void LED_Init(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 选择PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度设置
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA
}
void LED_ON(void) {
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LED,PA0置位
}
void LED_OFF(void) {
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 熄灭LED,PA0复位
}
```
这个例子展示了如何使用STM32的HAL库初始化和控制LED。实际应用中,你可能还需要处理中断、延时等功能。学习STM32寄存器操作是掌握嵌入式开发的关键一步,它将帮助你更好地理解和控制硬件资源。通过不断地实践和学习,你将在STM32的世界中游刃有余。