STM407的GPIO口配置(对比STM32F103)

       本来觉得F407跟F103没啥区别,只是性能更强了一些,仔细了解了一下,还是有差异的,尤其是在GPIO口配置的过程中,下面简单记录下。

1.时钟不同

         STM32F103的GPIO是挂载APB2总线时钟上,而F407是在AHB1总线上(注意是AHB1总线,所以使能函数和时钟地址都要改变),AHB是高速总线,性能相对更好,因此应使用RCC_AHB1PeriphClockCmd(, )函数进行时钟使能。

 上图来源于STM32F4XX参考手册

2.工作模式的配置方式不同

         STM32的GPIO口总共有八种工作模式,F103可直接对GPIO_Mode配置,而STM32F407需要分别对GPIO_Mode,GPIO_OType,GPIO_PuPd进行配置,如下表:

配置

模式

模拟

输入

浮空

输入

下拉输 入

上拉输入

开漏输出

推挽输出

复用开漏输出

复用推挽输出

Mode

AN

IN

IN

IN

OUT

OUT

AF

AF

OType

*

*

*

*

OD

PP

OD

PP

PuPd

NOPULL

NOPULL

DOWN

UP

*

*

*

*

(1)输出的PuPd通常可以分为三种,可以选择上拉,下拉,或者)浮空,可以根据需求进行选择

(2)作为内设的输出时,可根据需求进行引脚复用模式的配置

(3)上表中配置模式选择均为简写,具体配置时应对应GPIO库文件中寄存器地址定义对应的变量。

3.GPIO配置的一般思路

结构体定义——时钟使能——模式选择——速率配置——初始化——设置初值

STM32F103的初始化 

 STM32F407的初始化

4.GPIO端口位的完整的配置表(来源于数据手册,供参考)

GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I)

00:输入(复位状态)

01:通用输出模式

10:复用功能模式

11:模拟模式

GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..I)

0:输出推挽(复位状态)

1:输出开漏

GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I/)

00:无上拉或下拉

01:上拉

10:下拉

11:保留

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
配置STM32F103CB的GPIO为外部中断模式,需要进行以下步骤: 1. 首先,需要在RCC时钟配置中使能GPIO的时钟,可以使用以下代码: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOX, ENABLE); 其中,GPIOX是具体要配置GPIO所在的端,例如,若要配置PA0,则GPIOX为GPIOA。 2. 接下来,需要配置GPIO对应的Pin脚为输入模式,可以使用以下代码: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_X; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOX, &GPIO_InitStructure); 其中,GPIO_Pin_X是具体要配置的Pin脚对应的编号,例如,若要配置PA0,则GPIO_Pin_X为GPIO_Pin_0。 3. 然后,需要配置NVIC中断向量表和优先级分组,可以使用以下代码: NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_X); NVIC_InitStructure.NVIC_IRQChannel = EXTIx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = X; NVIC_InitStructure.NVIC_IRQChannelSubPriority = Y; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 其中,NVIC_PriorityGroup_X是中断优先级分组,X和Y是具体的优先级设置,EXTIx_IRQn是外部中断线对应的中断向量表编号。 4. 最后,需要配置EXTI外部中断线,可以使用以下代码: EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line_X; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_XYZ; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); 其中,EXTI_Line_X是外部中断线编号,例如,若要配置PA0,则EXTI_Line_X为EXTI_Line0;EXTI_Trigger_XYZ是触发模式,包括EXTI_Trigger_Rising、EXTI_Trigger_Falling和EXTI_Trigger_Rising_Falling。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值