STM32mini板(正点原子)点灯实验-寄存器版本(GPIO)

使用STM32mini开发板(正点原子)

通过对GPIO口的控制达到跑马灯的实验要求

什么是跑马灯?

本实验中的跑马灯即两个设计在开发板上面的两个LED灯,在STM32mini开发板(正点原子)中接入的IO口为:
LED_0: PA8
LED_1: PD2

GPIO的相关复习

  1. 4种输入模式:
    输入浮空
    输入上拉
    输入下拉
    模拟输入
  2. 4种输出模式:
    开漏输出(带上拉或下拉)
    开漏复用(带上拉或下拉)
    推挽式输出(带上拉或下拉)
    推挽式复用功能(带上拉或下拉)
  3. 3种最大输出速度:
    -2MHz
    -10MHz
    -50MHz
每一组IO口含有10个寄存器,也就是说10个寄存器可以控制一组GPIO口,一组GPIO口有16个IO口。
  1. 2个32位配置寄存器:GPIOx_CRL, GPIOx_CRH
  2. 2个32位配置寄存器:GPIOx_IDR, GPIOx_ODR
  3. 一个32位置位/复位寄存器:GPIOx_BRSS
  4. 一个16位复位寄存器: GPIOx_BRR
  5. 一个32位锁存寄存器:GPIOx_LCKR

假设一个芯片有8个GPIO口,那么它就会有80个寄存器(8×10),128个 IO 口(8×16)

跑马灯硬件连接

Led硬件连接图
MUC连接图

GPIO的输出方式为:推挽输出(上拉)

实验步骤及程序

  1. 使能IO口时钟。配置相关寄存器:RCC->APB2ENR
  2. 初始化IO口模式,配置四个配置寄存器:GPIOx_CRH / GPIOx_CRL
  3. 操作IO口,输出高低电平。配置寄存器GPIOx_ODR 或者 BSRRL / BSRRH

Tip:使用#ifndef #define #endif 格式条件编译,作用是避免头文件内容重复定义

程序:

主函数:main.c

#include "led.h"
#include "stm32f10x.h"

int main(void)
	
{
	LED_Init();
	
}

头文件:led.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

#endif

LED初始化文件:led.c

#include "led.h"
#include "stm32f10x.h"

void LED_Init(void)
{
	//PA8
	RCC->APB2ENR|=1<<2; //时钟使能
	GPIOA->CRH &= ~(0x3); //清零
	GPIOA->CRH |=0x3; //选择A的8口为推挽输出,且输出速度为50MHz
	GPIOA->ODR |=1<<8; //关灯命令
	GPIOA->ODR &=~(1<<8); //点灯命令
	
	//PD2
	RCC->APB2ENR|=1<<5;
	GPIOD->CRL &= ~(0xF<<2*4);
	GPIOD->CRL |=0x3<<2*4;
	GPIOD->ODR |=1<<2;
	GPIOD->ODR &=~(1<<2);

}

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

料子懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值