从51到32 点亮led

51格式

#include "reg52.h"

void main(void)

{

    P0=0XFE;  //总线操作

}

类比51写32  (先使能时钟,再配置输入输出模式【CRL寄存器】,最后配置IO口 )

1)寄存器编写  GPBB0为灯泡接口

配置时钟 选择APB2,APB2挂载在RCC上,且要打开GPIOB的时钟,所以位3置1

因为地址偏移位0X18, RCC起始地址位0x4002 1000

  所以PB0置0为 * (unsigned int *)  0X4002 1018 |=(1<<3);     //RCC起始地址位0x4002 1000

                                                                   //因为地址偏移位0X18     所以选择地址为0X4002 1018

                                                                          * (unsigned int *)  将 0X4002 1018转化为地址

                                                                 

RCC起始地址

GPIO基地址

   CRL寄存器   (四位为一组,配置GPIOB0则要配置mode0 和 CNF0,选择推挽输出模式,MODE0配置为01,CNF0为00)

                所以配置低四位为 0001

  使用GPIOB端口,起始地址为0X4001

  因为地址偏移位0X00

  所以GPIOB0置0为 * (unsigned int *)  0X4001 0C00 |=((1)<<(4*0));     //GPIOB基地址为0x4001 0c00

                   //因为CRL寄存器偏移0X00     所以选择地址为0X4001 0C00

                  * (unsigned int *)  将 0X4001 0C00转化为地址

                 CRL寄存器四位为一组,配置位0001,且配置PB0,所以1左移4*0位 

              (若配置PB1为推挽输出,则  * (unsigned int *)  0X4001 0C00 |=^((1)<<(4*1));  )

   ODR寄存器  高八位无效 低八位有效

  使用GPIOB端口,起始地址为0X4001

  因为地址偏移位0Ch==0xC0

  所以PB0置0为 * (unsigned int *)  0X4001 0C0C &=^(1<<0);     //GPIOB基地址为0x4001 0c00

                                   //因为ODR寄存器偏移0XC0     所以选择地址为0X4001 0C0C

                                    * (unsigned int *)  将 0X4001 0C0C转化为地址

#include "stm32f10x.h"

int main(void)

{

//使能时钟

* (unsigned int *)  0X4002 1018 |=(1<<3);   

//配置CRL寄存器   配置IO口输出模式

* (unsigned int *)  0X4001 0C00 |=((1)<<(4*0));

//配置ODR寄存器   

   * (unsigned int *)  0X4001 0C0C &=^(1<<0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值