arm-STM32GPIO配置的问题??

问题描述

STM32GPIO配置的问题??

GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB,ENABLE); //外设时钟配置,

开启GPIOB和GPIOD的时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure); //配置GPIOB口

请问STM32的GPIO端口配置,最后一条语句,如果我想同时配置GPIOA和GPIOB,能这么写吗?为什么?谢谢
GPIO_Init(GPIOA | GPIOB, &GPIO_InitStructure); //配置GPIOB口

解决方案

GPIOA和GPIOB在stm32f10x.h这个文件里是两个地址,所以你这么写会导致地址不对,当然了这是我的猜测,详细的还是看源代码吧,看看GPIO_Init内部是怎么实现的

解决方案二:

不能,
看这里
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
再看这里
#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000)
#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400)
#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800)
#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)

(GPIOA | GPIOB) 就是让GPIOA和GPIOB 按位或。最终会成为
(AHB1PERIPH_BASE + 0x0000)|(AHB1PERIPH_BASE + 0x0400),得到(AHB1PERIPH_BASE + 0x0400)
而不是将GPIOA和GPIOB分别初始化。这样只是会将GPIOB初始化,程序可能没有语法错误,但是会出现逻辑错误。

时间: 2025-01-21 07:15:40

arm-STM32GPIO配置的问题??的相关文章

Qtopia-2.2.0 ARM的配置和交叉编译

我们提供的 qtopia-2.2.0 源码包位于 linux\linux-source\qtopia-2.2.0-Real6410.tar.bz2,解压这个源码包到 Ubuntu 的主目录下,得到 qtopia-2.2.0-Real6410,进入 qtopia-2.2.0-Real6410 目录运行以下配置: echo yes | ./configure -qte '-embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zli

Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试

Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文档本着开源精神,基于LGPL协议发布:因网上开源的单片机.微控制器开发平台信息很少,故:因用ARM公司的KeiluVision开发环境开:因Eclipse是一个       Eclipse + CDT + YAGARTO + J-Link,STM32 开源开发环境搭建与调试 作者 :Chongqin

从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux

下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下. 其中涉及的内容较多,很多东西不再详述,如需深入研究请查阅相关资料(百度或谷歌一下一大堆).开发环境:Fedora 9交叉编译工具链:arm-linux-gcc 4.3.2 with EABI嵌入式Linux内核版本:2.6.29.4-FriendlyARM.昨天写贴子的时候具体记不清了,今天起来启动开发板用uname -r查一下,就是

Ramdisk文件系统的制作与调试运行

开发环境:Fedora 9交叉编译工具链:arm-linux-gcc 4.3.2 with EABI嵌入式Linux内核版本:2.6.29.4-FriendlyARM.昨天写贴子的时候具体记不清了,今天起来启动开发板用uname -r查一下,就是叫做2.6.29.4-FriendlyARM,帖子已经改好了.本文就是友善之臂的2.6.29.4-FriendlyARM的那个版本的内核的基础上改的.其它版本的应该也类似,仅供参考.开发板:mini2440-128M Nand FlashBootload

I.MX6 make menuconfig进入x86模式

/************************************************************************ * I.MX6 make menuconfig进入x86模式 * 说明: * make menuconfig不会自动进入arm内核配置模式,总是进入x86内核模式. * 左栋帮忙解决. * * 2017-4-6 深圳 南山平山村 曾剑锋 *********************************************************

如何在ARM linux嵌入式环境下配置Arduino的开发环境

问题描述 如何在ARM linux嵌入式环境下配置Arduino的开发环境 因为某些原因需要在ARM linux下设置一个arduino的开发环境,需要在获得代码之后将代码编译并且将代码下载到板子上.之前我有看到过arduino官网上有放出linux32 的源程序,不知道支不支持arm环境,还是要通过源代码编译文件后才能用? 解决方案 你改一下它的MakeFile,把gcc改成交叉编译试试~

ARM平台上蓝牙协议栈Bluez的移植使用和配置

前言 blue简介 蓝牙(Bluetooth),或称为蓝芽,是一种新式的无线传送协议,最初由爱立信创制,后来由蓝牙特别兴趣组订定技术标准.据说因为此技术尚在萌芽的阶段,故将Bluetooth以"蓝牙"的中文译名在台湾地区进行商业的注册,不过根据英文本身的意义直译,还是"蓝牙"较为贴切. 蓝牙用于在不同的设备之间进行无线连接,例如连接计算机和外围设施,如:打印机.键盘等,又或让个人数字助理(PDA)与其它附近的PDA或计算机进行通信.目前市面上具备蓝牙技术的手机选择非

ARM Cortex-A15处理器架构与iPad3性能/配置前瞻

随着2012年3月7日的临近,关于苹果新一代iPad的消息也越来越多,不过相对以往的各种猜测五花八门的盛况不同,此次新一代iPad的很多具体的功能和性能参数的预测消息已经比较统一,这是因为这些功能在iPad2发布之前苹果就早有准备,例如Retina级别的屏幕达到2048x1536分辨率,已经在iPhone4S上使用的Siri等等.但最近争议较大的是,最新的处理器是苹果A6,或是 A5X.今天,我们也抱着一颗八卦的心,又以科学严谨的态度,来预测一下iPad3配置到底是哪样啊?理论上说,下文绝对不是

Fedora 20具有新的网络配置功能并且支持 ARM 设备

为了修复一些 bug 从而增强系统稳定性,在连着跳票几周后,最新的 Fedora Linux 终于要在12月份出来了.Fedora 是一款为 RHEL 做软件测试用的开源操作系统(即 Red Hat 公司会将那些在 Fedora 系统运行稳定的软件版本吸收到 RHEL 系统中 -- 译者注),这次更新将会带来什么样的变化呢?让我们来看一下. 早在10月末,Fedora 项目就宣布 Fedora 20 正式版要延迟一周发布(Fedora 项目计划在每年的4月和10月发布新的版本,但几乎每次都在跳票