stm32 寄存器操作一看就会

1. 寄存器是什么?

 可以查百度查看详情。。。。。。。。。的总结:在嵌入式里面寄存器非常非常重要重,就是实现软硬件的接口,几乎所有的功能操作都是通过操作寄存器来实现的。

2. 寄存器操作,点亮一盏led灯。

以stm32f103为例,点亮PB8控制的led灯,PB8输出高电平led灯亮,输入低电平led灭。

查看参考手册,一定学会阅读手册。

操作分为四步。

第一步 开启外设时钟使能寄存器,当外设时钟没有启用时,软件不能读写外设寄存器数值。返回值始终为0x00.


第二步 配置引脚工作模式,推挽输出。



第三步就是控制引脚电平输出。查看手册寄存器的ODR和BSRR(BRR只能清楚寄存器)都可以控制输出。相对来说控制BSRR更快一点,因为控制bsrr是直接写寄存器,而控制ODR需要先读出寄存器,然后操作后,再写入寄存器。


第四步,最后一步,查看存储映像图结合上面图中的偏移地址,准去的找到寄存器的地址。


接下来让我们用代码实现,点亮一张led灯。

/*

定义寄存器,三个寄存器,时钟RCC_APB2ENR,配置GPIOB_CRH,输出GPIOB_BSRR

*/

#define   RCC_APB2ENR   *((volatile unsigned int *) (0x40021000 + 0x18))

#define   GPIOB_CRH        *((volatile unsigned int *) (0x40010C00 + 0x04))

#define  GPIOB_BSRR       *((volatile unsigned int *) (0x40010C00 + 0x10))

int  main(void)

{

//开启时钟

RCC_APB2ENR  | = 1<<3;

//配置推挽输出

GPIOB_CRH  &= 0xFFFFFFF0;

GPIOB_CRH  |= 0x00000003; // 3 = 0011  注意 crh默认值0x44444444

 //点亮led

       GPIOB_BSRR = 1<<8;

while(1)

{

}

    return 0;

}

注: 第一次写这个,若有不对的地方,请斧正。

猜你喜欢

转载自blog.csdn.net/yangyaokun0220/article/details/80166221