• 嵌入式STM32F1学习-驱动led灯(寄存器版本)


    STM32F1的IO可以配置成8种模式,三种最大输出速度。也就是每组IO口有7个寄存器,也就是说7个寄存器可以控制一组16个IO口。

    这个7个寄存器分别是:

    位配置寄存器,主要是:模式的选择以及输出速度的选择。

    GPIOx_CRL

    GPIOx_CRH

    数据寄存器,主要是:一个是输入数据寄存器。一个是输出数据寄存器。

    GPIOx_IDR

    GPIOx_ODR

    一个32位置位/复位数据寄存器

    GPIOx_BSRR

    一个16位复位寄存器

    GPIOx_BRR

    一个32位锁存器

    GPIOx_LCKR

     

    假设:PB5和PE5和外部的LED相连。通过配置相应的寄存器来驱动LED灯。

    寄存器版本步骤是三部:

    第一步:使能IO端口时钟。

    在配置 STM32 外设的时候,任何时候都要先使能该外设的时钟。 GPIO 是挂载在 APB2 总线上的外设,相应的寄存器是:APB2  外设时钟使能寄存器(RCC_APB2ENR)

    GPIOB与GPIOE是在寄存器:RCC_APB2ENR的第三位和第六位。我们只需要把相应的位设置为1即可。

     

    通过查找相应的寄存器使能GPIOB。

    RCC->APB2ENR  |= 1<<3 ;     //一般情况下我们不直接赋值,主要是为了保持其他位不变。

    同样我们可以使能GPIOE:RCC->APB2ENR  |= 1<<6;

     

    第二步:初始化IO口模式

    在使能了相应的端口以后,我们需需要设置相应的IO口模式。配置模式有2个32位的寄存器CRL和CRH。GPIOB与GPIOE都是低八位,因此只需要我们配置寄存器CRL。

    每个IO口需要配置4位,低两位输出模式选择,高两位是配置模式。

     

    选择模式:输出模式,最大速度50MHZ。复用推挽输出。

    程序可以写成:

    在我们设置相应的位之前,我们先把要设置的位清零。(利用和1相与不变,和0相与清零)

    GPIOB->CRL &=0xFF0FFFFF;

    然后选择模式:

    GPIOB->CRL |=0x00300000;      //PB5的工作模式

    初始化我们设置输出为1,通过寄存器ODR设置。

    GPIOB->ODR |= 1<<5; 

    同样可以设置GPIOE的模式以及PE5的状态。

    GPIOE->CRL &=0xFF0FFFFF;

    GPIOE->CRL |= 0x00300000;      //PE5的工作模式

    GPIOE->ODR |= 1<<5; 

     

    第三步骤:操作IO口

    操作寄存器ODR或者寄存器BRR/BSRR.

    通过配置PB5和PE5相应输出寄存器ODR的位置位或者清零。

    GPIOE->ODR |= 1<<5; 

    调用延时函数delay;

    GPIOB->ODR &= ~(1<<5);

     

    或者配置寄存器BRR/BSRR.

    通过BSRR的低16位置1,
    GPIOB->BSRR |= 1<<5;

    调用延时函数delay;

    通过BSRR的低16位置0,
    GPIOB->BRR |= 1<<5;

     

    【补充C语言操作符号】

    CRL寄存器所有位清零:  GPIOB->CRL &= 0x0;

    CRL寄存器所有位置1:   GPIOB->CRL |=  0xFFFFFFFF

    CRL寄存器的第1位置1:GPIOB->CRL |= 1<<1;

    CRL寄存器的第1位清零:GPIOB->CRL &= ~(1<<1) ;

    CRL寄存器的第0-3位设置成A,其他保持不变:  GPIOB->CRL |=  0x0000000A;(为了举例,没有实际意义)

     创客学院全新视频尽在:www.makeru.com.cn

    嵌入式学习交流群:561213221

  • 相关阅读:
    MATLAB(2)——小波工具箱使用简介
    unity Changing Game View background color
    opengl剪裁空间和视口空间中不遵从右手定则,而是遵从左手定则
    vc2010, fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt解决办法
    Xcode, does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE) 解决办法
    in App Purchases一个注意事项
    unity, Invoke延迟执行
    unity UGUI text font size对性能影响较大
    bullet, iOS真机编译错误error: identifier or immediate expression expected解决方法
    unity,实现屏幕后处理的两种方法
  • 原文地址:https://www.cnblogs.com/huan-huan/p/8316182.html
Copyright © 2020-2023  润新知