STM32跑马灯实验(寄存器版本)

思路还是:

①:使能IO口时钟。

②:初始化IO口

③:操作IO口,输出高低电平。

首先,我们先看原理图找到其中LED0和1的位置,分别对应PB5和PE5的GPIO口。

我们第一步,先写led.h文件

#ifndef __LED_H
#define __LED_H

void LED_Init(void);


#endif

然后来配置寄存器,写led.c文件

首先,我们先找到使能时钟寄存器

 我们需要使用的是GPIOB和E

 我们将它开启

步骤就是:

可以搜索RCC然后输入寄存器名称RCC->APB2ENR

然后把第3位和第6位打开 就是

RCC->APB2ENR|=1<<3;
 RCC->APB2ENR|=1<<6;

 时钟使能好之后,我们进行IO口初始化,我们接着查手册

去配置GPIO口的初始化

 我们可以看到两个管一个口,底下又有介绍,我们要设置推挽输出,所以只需要0011即可,也就是3,

GPIOB->CRL&=0xFF0FFFFF;//先把其他的清掉
 GPIOB->CRL|=0x00300000;//在设置我们的

然后GPIOE也类似这样设置

    GPIOE->CRL&=0xFF0FFFFF;
    GPIOE->CRL|=0x00300000;

初始化之后我们就得考虑 一开始是不亮的,我们得去找关于电平高低的寄存器

也就是输出

 

    GPIOB->ODR|=1<<5;打开第五位

那么,我们led.c文件就配置好了

#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
	RCC->APB2ENR|=1<<3;
	RCC->APB2ENR|=1<<6;
	//GPIOB.5
	GPIOB->CRL&=0xFF0FFFFF;
	GPIOB->CRL|=0x00300000;
	GPIOB->ODR|=1<<5;
	//GPIOE.5
	GPIOE->CRL&=0xFF0FFFFF;
	GPIOE->CRL|=0x00300000;
	GPIOE->ODR|=1<<5;
}
	

 接着,来写main函数

main函数很简单,也就是一开始让他置于高电平,设置延迟后,关闭。

#include "led.h"
#include "stm32f10x.h"
#include "delay.h"
int main(void){
delay_init();
LED_Init();
	while(1)
	{
		GPIOB->ODR|=1<<5;
		GPIOE->ODR|=1<<5;
		delay_ms(500);
		GPIOB->ODR=~(1<<5);
		GPIOE->ODR=~(1<<5);
		delay_ms(500);
	}
}

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值