STM32点亮LED(寄存器)

1.使能时钟

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

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

,

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复用开漏输出

     

CRL寄存器:

例如需要配置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寄存器:

      

该寄存器只用到了低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;     
 }
 
 

 

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入门->放弃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值