STM32点亮LED(寄存器)

1.使能时钟

      stm32有AHB,APB1,APB2三条时钟总线,我们的外设就挂在在这三条总线下,所以当用到某个外设时,我们需要打开相应的外设的时钟.

      以APB2为例:我们需要用到GPIOB,则让对应的位为1.    RCC->APB2ENR|=1<<3

,STM32点亮LED(寄存器)_第1张图片

2.配置相应的模式

   GPIOX_CRL: 端口配置低寄存器

    GPIOX_CRH:端口配置高寄存器

                   每四位控制一个IO口,CRL控制低八位(0~7)IO口,CRH控制高八位(8~15)

                   低两位MODEy[1:0]:00输入模式,01输出模式的最大速度10MHz,10输出模式的最大速度2MHz,11输出模式的最大速度50MHz(低两位决定了输入输出模式,并且在输出模式下还决定了输出速度)

                   高两位CNFy[1:0]:

       当为输入模式时:00模拟输入,01浮空,10上拉/下拉输入模式(ODR决定上拉下拉),11保留

        当为输出模式时:00通用推挽输出,01通用开漏输出,10复用推挽输出,11复用开漏输出

     STM32点亮LED(寄存器)_第2张图片

CRL寄存器:

STM32点亮LED(寄存器)_第3张图片

例如需要配置GPIOB第五引脚:(注意第五引脚是第六个引脚)

   GPIOB->CRL&=0xff0fffff    //将pin5对应的四个控制位清零,其他保持不变

   GPIOB->CRL|=0x00300000   //设置pin5引脚为推挽输出,最大翻转速度为50MHz

  (以上配置的是通用推挽输出,同理我们可以通过改变CRL的值来配置不同的输入输出模式,当需要配置上拉和下拉时我们需要将ODR对应位置0或1)

   例如需要将GPIOB_Pin5设为上拉输入:GPIOB->CRL&=0xff0fffff;  GPIOB->CRL|=0x00800000;  GPIOB->ODR=1<<5;

 

3.端口输出高低电平

ODR寄存器:

      STM32点亮LED(寄存器)_第4张图片

该寄存器只用到了低16位,因为我们的芯片只有16脚,所以高位没用到,当我们需要将某引脚置1或0,只需要左移相应的引脚,例如第0引脚则左移0,第1引脚左移1.依次类推

GPIOB->ODR=1<<5;

 

程序:

#include "stm32f10x.h"

 int main(void)
 {    
    RCC->APB2ENR=1<<3;
     GPIOB->CRL&=0xff0fffff;
     GPIOB->CRL|=0x00300000;
     GPIOB->ODR=0<<5;     
 }
 
 

 

     

你可能感兴趣的:(STM32,stm32)