crh寄存器_STM32直接操作寄存器

原标题:STM32直接操作寄存器

本来stm32用库函数多么方便,但之前用51都喜欢 ,感觉库函数太方便了,方便到连stm32底层都可以无视掉了。看着手册,觉得直接操作寄存器很简单,但我却自己忽视了一些小细节,(就差一个强制转换,而且这个还是我自己在库函数中看到的)搞到我头大,而且网上没有人认真提出这个问题,这牛角尖钻了我好久。怒了!真的怒了!

正题:就老套的以基本的------点亮一盏灯为例吧。

(1)、如果使用库函数

先得建立好stm32库函数工程模板,然后在模板下这样操作:

main()

{

GPIO_InitTypeDef GPIO_InitStructure; //结构体 初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA , &GPIO_InitStructure);

GPIO_Write(GPIOA,0xff);

while(1);

}

(2)、库函数工程模板下的直接寄存器操作:

当然,库函数下可以直接对寄存器进行操作的。

如:

main()

{

RCC->APB2ENR|=1<<2; //使能PORTA时钟

GPIOA->CRL =0x33333333;

GPIOA->CRH =0x33333333;

GPIOA->ODR =0x0001;

}

(3)、虽然库函数里也可以直接操作寄存器,但总感觉不是自己亲手写的感觉。

所以,还可以不用库函数工程模板,全部自己定义:

#define GPIOCRL (int *)0x40010800 //注意一定要加强制转换(int *)

#define GPIOCRH (int *)0x40010804 // 此处的定义也可以用:int * GPIOCRH = (int *)0x4001804 代替。

#define GPIOODR (int *)0x4001080C

main()

{

//记得先开时钟,此处省略了

*GPIOCRL =0x33333333;

*GPIOCRH =0x33333333;

*GPIOODR =0x0001;

}

【总结】:对于直接操作寄存器,可以很少的代码做出很多的事情,例如一次性配置好多跟IO引脚,而库函数就要写一大堆。但直接寄存器很不方便,要自己计算那些寄存器的值,所以建议一般还是使用库函数好了....不钻牛角尖!

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值