OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4663|回复: 3

关于 官方库函数下 直接操纵寄存器的疑惑

[复制链接]

16

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2012-10-29
在线时间
0 小时
发表于 2013-4-5 12:03:52 | 显示全部楼层 |阅读模式

    我之前是直接操作寄存器来学习开发stm32的,最近在使用官方库来学习stm32.

 

 1.像RCC->APB2RSTR,SysTick->CTRL,GPIOx->CRL,USART1->SR等,这些寄存器是否可以在库函数线直接使用?
 2.为什么stm32数据手册上寄存器GPIOA_CRL是这样写的而在程序中我们写作GPIOA->CRL,编译器在哪里做了进行了这些对应变换?

 请各位牛人和原子哥帮忙指点下,谢谢!

 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2386
金钱
2386
注册时间
2012-11-22
在线时间
403 小时
发表于 2013-4-5 12:26:03 | 显示全部楼层
库函数里面寄存器操作都是封装在某个函数里面的,直接调用那个函数进行配置。比如配置某个IO口:
void LedConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIOC
GPIO_InitStructure.GPIO_Pin   = LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
这样就ok了。

GPIOA->CRL的意思是GPIOA这个结构体中的CRL的意思,就是这样用。
比如:
typedef struct

{

  vu32 CRL;  //0

  vu32 CRH;  //偏移量4

  vu32 IDR;  //偏移量8

  vu32 ODR;

  vu32 BSRR;

  vu32 BRR;

  vu32 LCKR;

} GPIO_TypeDef;

 

#define GPIOA_BASE            ((u32)0x40010800)  //GPIOA的基地址为0x40010800

#define GPIOA   (GPIO_TypeDef *)  GPIOA_BASE;  //强制类型转换为GPIO_TypeDef类型的指针

 

这样在操作GPIOA的寄存器时只要这样写就可以了

读: X="GPIOA-">CRL;     写:GPIOA->CRL=X;  

或  读: X=(*GPIOA).CRL;     写:(*GPIOA).CRL =X;  

 

当然,要达到上述目的也可以采用如下方式

#define GPIOA_ CRL  0x40010800

#define GPIOA_ CRH  0x40010804

#define GPIOA_ IDR  0x40010808

#define GPIOA_ ODR  0x4001080C

#define GPIOA_ BSSR  0x40010810

#define GPIOA_ LCKR  0x40010814

很明显,第一种书写方式更加正规化,且当定义多个GPIO时,只要将其它GPIO的基地址强制转换为该结构类型的指针即可。
态度决定一切
回复 支持 反对

使用道具 举报

16

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2012-10-29
在线时间
0 小时
 楼主| 发表于 2013-4-5 14:17:30 | 显示全部楼层
回复【2楼】冰封嗜魔:
---------------------------------
在调用库函数时,可以偶尔使用像RCC->APB2RSTR,SysTick->CTRL,GPIOx->CRL,USART1->SR等?谢谢
回复 支持 反对

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2386
金钱
2386
注册时间
2012-11-22
在线时间
403 小时
发表于 2013-4-5 16:09:51 | 显示全部楼层
回复【3楼】天亮了187:
---------------------------------
可以直接写寄存器的
态度决定一切
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表