1. 实验目的
使用寄存器点亮D3,D4,D5,三个LED灯
点灯闪灯实验(三个灯)的步骤如下:
注意:在实验过程中,要确保电流在3~20mA之间,以避免烧坏二极管。同时,确保连接的线路正确无误,以避免发生短路等安全事故。
2. 实验原理
图 3.3.2 LED 灯电路连接图
图中从 3 个 LED 灯的阳极引出连接到 3.3V 电源,阴极各经过 1 个电阻引入至 STM32
的 3 个 GPIO 引脚 PH10、PH11、PH12 中,所以我们只要控制这三个引脚输出高低电平,
即可控制其所连接 LED 灯的亮灭。如果您的实验板 STM32 连接到 LED 灯的引脚或极性不
一样,只需要修改程序到对应的 GPIO 引脚即可,工作原理都是一样的。
我们的目标是把 GPIO 的引脚设置成推挽输出模式并且默认下拉,输出低电平,这样就
能让 LED 灯亮起来了。
3. 主要仪器设备
STM32开发板,keil5软件
4. 实验内容及步骤
1. 使用keil5打开工程
2. 引入stm32f4xx.h头文件
3. 修改main函数,如下:
/*
使用寄存器的方法点亮LED灯
*/
#include "stm32f4xx.h"
void delay(int xms) {
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/**
* 主函数
*/
int main(void)
{
/*开启 GPIOH 时钟,使用外设时都要先开启它的时钟*/
RCC_AHB1ENR |= (1<<7);
/* LED 端口初始化 */
/*GPIOH MODER10清空*/
GPIOH_MODER &= ~( 0x03<< (2*11));
/*PH10 MODER10 = 01b 输出模式*/
GPIOH_MODER |= (1<<2*11);
/*GPIOH MODER10清空*/
GPIOH_MODER &= ~( 0x03<< (2*12));
/*PH10 MODER10 = 01b 输出模式*/
GPIOH_MODER |= (1<<2*12);
/*GPIOH MODER10清空*/
GPIOH_MODER &= ~( 0x03<< (2*10));
/*PH10 MODER10 = 01b 输出模式*/
GPIOH_MODER |= (1<<2*10);
/*GPIOH OTYPER10清空*/
GPIOH_OTYPER &= ~(1<<1*10);
/*PH10 OTYPER10 = 0b 推挽模式*/
GPIOH_OTYPER |= (0<<1*10);
/*GPIOH OSPEEDR10清空*/
GPIOH_OSPEEDR &= ~(0x03<<2*10);
/*PH10 OSPEEDR10 = 0b 速率2MHz*/
GPIOH_OSPEEDR |= (0<<2*10);
/*GPIOH PUPDR10清空*/
GPIOH_PUPDR &= ~(0x03<<2*10);
/*PH10 PUPDR10 = 01b 上拉模式*/
GPIOH_PUPDR |= (1<<2*10);
while(1){
/*PH10 BSRR寄存器的 BR10置1,使引脚输出低电平*/
GPIOH_BSRR |= (1<<16<<10);
GPIOH_BSRR |= (1<<16<<11);
GPIOH_BSRR |= (1<<16<<12);
delay(5000);
/*PH10 BSRR寄存器的 BS10置1,使引脚输出高电平*/
GPIOH_BSRR |= (1<<10);
GPIOH_BSRR |= (1<<11);
GPIOH_BSRR |= (1<<12);
delay(5000);
}
}
// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void){}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。