跑马灯实验-寄存器版本

前言

  • 由于当初没有学好51单片机,导致现在学32困难重重。听老师讲课,感觉自己就在外太空。下面通过跑马灯的例子,串串知识点。

简单了解GPIO

  • 战舰、精英版(stm32f103zet6)都是144脚芯片,有七组IO,GPIOA——GPIOG,每组IO有16个io,一共有16*7=112个io

  • 迷你版(STM32F103RCT6),一共有四组IO口,一共有16*3+3个io
    GPIOA0——GPIOA15
    GPIOB0——GPIOB15
    GPIOC0——GPIOC15
    GPIOD0——GPIOD2

  • GPIO工作方式
    四种输入模式
    输入浮空
    输入上拉
    输入下拉
    模拟输入
    四种输出模式
    开漏输出 (只可以输出强低电平,高电平得靠外部电阻拉高)
    开漏复用功能
    推挽式输出 (可以输出强高低电平,连接数字器件)
    推挽式复用功能
    三种最大翻转速度
    -2MHZ
    -10MHz
    -50MHz
    每组GPIO端口的寄存器包括:
    两个32位配置寄存器(GPIOx-CRL,GPIOx-CRH),
    两个32位数据寄存器(GPIOx-IDR,GPIO-ODR),(均用到低16位,高16位保留。控制16个io )

    一个32位置位/复位寄存器(GPIOx-BSRR), 主要是控制ODR寄存器
    一个16位复位寄存器(GPIOx_BRR),
    一个32位锁定寄存器(GPIOx-LCKR)。

    每个I/o端口位可以自由编程,然而I/o端口寄存器必须换32位字被访问
    (不允许半字或字节访问)
    stm32 引脚说明
    STM32的大部分端口都具有复用功能
    所谓复用,就是一些端口不仅仅可以作为通用IO口,还可以复用一些
    外设引脚,比如PA9,PA10可以复用为STM32的串口1引脚
    作用:最大限度的利用端口资源

    端口重映射功能
    就是可以把某些功能引脚映射到其他引脚。
    比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7
    作用:方便布线。

    所有的IO口都可以作为中断输入

跑马灯代码

  • led.h头文件
#ifndef __LED_H
#define __LED_H
void LED_Init(void);


#endif


  • led.c源文件
#include "led.h"
#include "stm32f10x.h"

void LED_Init(void){
    
    
	RCC->APB2ENR|=1<<3;   //A=A|B ,设置IO端口B的时钟开启
	RCC->APB2ENR|=1<<6;	  //A=A|B ,设置IO端口E的时钟开启
	
	//GPIOB.5
	GPIOB->CRL&=0xFF0FFFFF; //先清零,与0
	GPIOB->CRL|=0x00300000; //设置工作模式为推挽输出,50MHZ
	GPIOB->ODR|=1<<5;   //初始化PB5为高电平
	
	GPIOE->CRL&=0xFF0FFFFF; //先清零,与0
	GPIOE->CRL|=0x00300000; //设置工作模式为推挽输出,50MHZ
	GPIOE->ODR|=1<<5;    //初始化PE5为高电平
}

  • main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
int main(void)
{
    
    
delay_init();
LED_Init();
	while(1){
    
    
		GPIOB->ODR|=1<<5;	//设置PB5为高电平
		GPIOE->ODR|=1<<5;	//设置PE5为高电平
		delay_ms(500);
		
		GPIOB->ODR&=~(1<<5);   //设置PB5为低电平
		GPIOE->ODR&=~(1<<5);  //设置PE5为低电平
		delay_ms(500);

}
	


}

猜你喜欢

转载自blog.csdn.net/sx17860543449/article/details/109705926