参考网友——正点原子之寄存器操作STM32F103ZE
寄存器操作:实验1 LED流水灯
 STM32 IO简介  作为所有开发板的经典入门实验,莫过于跑马灯了。 该实验的关键在于如何控制STM32的IO口输出。了解了STM32的IO口如何输出的,就可以实现跑马灯了。通过这一节的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。 STM32的IO口可以由软件配置成8种模式: 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏复用功能 每个IO口可以自由编程,单IO口寄存器必须要按32位字被访问。STM32的很多IO口都是5V兼容的,这些IO口在与5V电平的外设连接的时候很有优势,具体哪些IO口是5V兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。 STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这里我们仅介绍常用 的几个寄存器,我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。 CRL和CRH控制着每个IO口的模式及输出速率。 
 该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可以得出:STM32的CRL控制着每个IO端口(A~G)的低8位的模式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。 CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。这里我们对CRH就不做详细介绍了。
  给个实例,比如我们要设置PE2,3,4,5位为推挽输出。
代码如下: GPIOE->CRL&=0XFF0000FF;
  GPIOE->CRL|=0X00333300;//PE2,3,4,5推挽输出
  GPIOE->ODR|=0X003C;    //PE2,3,4,5输出高 通过这3句话的配置,我们就设置了PE2,3,4,5推挽输出。 ODR是一个端口输出数据寄存器,只用了低16位。
led.c文件部分内容:
//初始化PE2,3,4,5推挽输出.并使能PORTE时钟      
//LED IO初始化
void LED_Init(void)
{
 RCC->APB2ENR|=1<<6;    //使能PORTE时钟       
      
             
 GPIOE->CRL&=0XFF0000FF;
 GPIOE->CRL|=0X00333300;//PE2,3,4,5推挽输出
 GPIOE->ODR|=0X003C;      //PE2,3,4,5输出高 
}
led.h文件部分内容:
//LED端口定义
#define LED0 PEout(2)// PE2
#define LED1 PEout(3)// PE3 
#define LED2 PEout(4)// PE4
#define LED3 PEout(5)// PE5
void LED_Init(void);//初始化
主函数:
int main(void)
{      
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 LED_Init();      //初始化与LED连接的硬件接口
 while(1)
 {
  LED0=0;
  LED1=1;
  delay_ms(300);
  LED0=1;
  LED1=0;
  delay_ms(300);
 }  
}
详情请登录网友——正点原子官方论坛http://www.openedv.com/forums/list.htm或下载《STM32不完全手册V2.0》 
源代码:实验1 LED流水灯.rar

 
					
				 
			
			
			
						
			 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

