系列文章目录
一、GPIO端口的初始化设置三步骤
本次实验采用GPIOA、GPIOB、GPIOC三个端口。该三个端口都属于APB2总线
1.时钟配置
找到时钟使能寄存器映射基地址 找到端口偏移地址以及对应端口所在位置 使能对应端口时钟
#define RCC_APB2ENR *((unsigned volatile int*)0x40021018)
RCC_APB2ENR|=1<<2|1<<3|1<<4;
2.输入输出模式设置
本次实验采用通用推挽输出模式,最高输出时钟频率2Mhz。分别用到A4、B5、C14三个引脚。其中A4、B5属于端口配置低寄存器偏移地址为0x00,C13属于端口配置高寄存器偏移地址为0x04。
配置代码
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00)
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
GPIOA_CRL&=0xFFF0FFFF;
GPIOA_CRL|=0x00020000;
GPIOB_CRL&=0xFF0FFFFF;
GPIOB_CRL|=0x00200000;
GPIOC_CRH&=0xFF0FFFFF;
GPIOC_CRH|=0x00200000;
二、实现代码
led.h
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PBout(5)
#define LED1 PBout(0)
#define LED2 PAout(1)
void LED_Init(void);
#endif
led.c
#include "led.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<3;
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;
GPIOB->ODR|=1<<5;
GPIOB->CRL&=0XFFFFFFF0;
GPIOB->CRL|=0X00000003;
GPIOB->ODR|=1<<0;
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X00000030;
GPIOA->ODR|=1<<1;
}
test.c
#include "sys.h"
#include "delay.h"
#include "D:\code\keil\light2\HARDWARE\LED\led.h"
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
LED_Init();
while(1)
{
LED0=0;
LED1=1;
LED2=1;
delay_ms(1000);
LED0=1;
LED1=0;
LED2=1;
delay_ms(1000);
LED0=1;
LED1=1;
LED2=0;
delay_ms(1000);
}
}
实现LED流水灯
电路连接
烧录
借助FLYMCU下载软件,即可将LED.hex载入
实际效果
|