gpio_typedef_请教高手: 本人刚接触STM32,定义了GPIO_TypeDef* GPIOx,则GPIOx表示一个指针吗?为何不是用*GPIOx == GPIO...

在STM32编程中,GPIOA定义为GPIO_TypeDef类型的指针,用于访问GPIO寄存器。在固件库中,一些文件如stm32f10x.h中,GPIOA_BASE被映射为GPIOA的实际地址。对于初学者,面对众多外设函数可能会感到困惑。建议通过阅读库文件的英文注释和实践快速上手。在使用过程中,通常需要根据具体应用配置固件库函数的参数。关于`#ifdef __cplusplus`,这是为了让C++编译器能够正确处理C语言编写的头文件,使C++与C语言代码兼容。
摘要由CSDN通过智能技术生成

匿名用户

1级

2012-04-20 回答

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

这是在stm32f10x.h里定义的,看这个定义你就应该明白了,GPIOA本身也是一个指针

追问:

谢谢你的回答!想再请教个几个问题

1 因为资料库里面各个外设的函数实在太多,都搞到头脑好混乱的感觉,本人又需要短时间内把它弄懂并会使用它,有什么好的办法吗?

2 那些库里面的文件具体有那些是不用我们修改直接拿来用的?那些是需要我们自己在用的过程需要修改的呢?

3 另外几乎每个文件里面都有 #ifdef __cplusplus

extern "C" {

#endif

可我没找到程序里那个地方定义了__cplusplus 啊?这又是怎么回事呢?

谢谢

追答:

第一个问题:http://wenku.baidu.com/view/a7f51720192e45361066f5d0.html,打开这个链接,是固件库的使用方法,但是是3.3版本的。

其实给你个最好的建议,我个人认为是最快的,就是看源文件中每个固件库上方的英文注释,能让你最快入手,另外,加几个QQ群,问问群里的高手。

第二个问题,是需要在用的过程修改的,固件库里的函数是通用的,但是你要根据你的具体环节配置,比如说,你要配置GPIOA的第9,10脚为USRAT1的TX和RX,就需要调用函数,但是具体的参数要自己改

第三个问题:

我曾经回答过别的网友,这里粘贴过来给你看看:

我们的C语言有个进化版,叫C++,这个想必楼主知道,Keil MDK是支持C++编程的,也就是说,你可以用C语言或者C++写你的程序,都可以。

但是,有一个问题,就是头文件的问题,C语言写的头文件C++是不认识的,需要转换一下,这个转换的方法就是加上extern "C"

#ifdef __cplusplus

extern "C" {

这句话意思是,如果你定义了“__cplusplus”这个宏,说明你的意图是想在C++文件中调用这个头文件,我前头说了,C语言的头文件C++是不认识的,怎么办呢,就加上

extern "C" {。。。。。}

告诉C++文件,大括号里面的东西是用C语言写的,然后C++文件就认识了,就能调用这个头文件里的东西了,

extern "C" {

的存在,使得C语言和C++能更好的结合的一块。

以上是个人的实践心得,回答完毕!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值