STM32笔记(一)(寄存器)——跑马灯实验

IO口的使用

    ☆STM32的IO口可以由软件配置成一下八种模式:

        1、输入浮空

        2、输入上拉

        3、输入下拉

        4、模拟输入

        5、开漏输出

        6、推挽输出

        7、推挽式复用功能

        8、开漏复用功能

    ☆每个IO口可以自由编程,但IO口寄存器必须按照32位字被访问。STM32的每个IO端口都有7 个寄存器来控制,分别是:

        配置模式的2个32位的端口配置寄存器CRL和CRH;

        2个32位的数据寄存器IDR和ODR;

        1个32位的置位 / 复位寄存器BSRR;

        1个16位的复位寄存器BRR;

        1个32位的锁存寄存器LCRR;

    其中CRL和CRH控制每个IO口的模式及输出速率。

☆STM32的IO口位配置表:

STM32笔记(一)(寄存器)——跑马灯实验_第1张图片

☆STM32输出模式配置:

STM32笔记(一)(寄存器)——跑马灯实验_第2张图片

☆端口低配置寄存器CRL:

STM32笔记(一)(寄存器)——跑马灯实验_第3张图片

STM32笔记(一)(寄存器)——跑马灯实验_第4张图片

☆该寄存器复位值为0X4444 4444,复位值就是配置端口为浮空输入模式。

☆STM32的CRL控制着每组IO端口(A~G)的低八位模式

        常用配置为:0X0—模拟输入模式(ADC用)

                             0X3—表示推挽输出模式(做输出口用,50M速率)

                             0X8—表示上/下拉输入模式(做输入口用)

☆☆CRH的作用和CRL完全一样,CRL控制低八位输出口,CRH控制高八位输出口。

☆跑马灯原理图:

STM32笔记(一)(寄存器)——跑马灯实验_第5张图片

☆led.c代码

#include "led.h"

void LED_Init(void)
{
	RCC->APB2ENR|=1<<2;       	 
	RCC->APB2ENR|=1<<5;     
  	 
	GPIOA->CRH&=0XFFFFFFF0; 
	GPIOA->CRH|=0X00000003; 	 
        GPIOA->ODR|=1<<8;     
											  
	GPIOD->CRL&=0XFFFFF0FF;
	GPIOD->CRL|=0X00000300;
	GPIOD->ODR|=1<<2;     
}

☆led.h代码

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

#define LED0 PAout(8)	// PA8
#define LED1 PDout(2)	// PD2	

void LED_Init(void);			 				    
#endif

☆main函数代码

#include "sys.h"
#include "usart.h"		
#include "delay.h"	
#include "led.h" 


int main(void)
{		 
	Stm32_Clock_Init(9); 	
	delay_init(72);	     	
	LED_Init();		  	 	
	while(1)
	{
		LED0=0;
		LED1=1;
		delay_ms(300);

		LED0=1;
		LED1=0;
		delay_ms(300);
	}	 
}

 

你可能感兴趣的:(STM32)