你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 关于GPIO的问题集锦

[复制链接]
zengwh 发布时间:2012-5-8 10:43
1、关于GPIO, Y) I5 x! R; m$ v" o/ c
问:STM32的IO口初始化为输入浮空,那管脚是高电平还是低电平呢?
0 w( E" X  ]0 G; w1 ~答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。
( ^$ L/ W( C/ C8 B% Q7 ~. {2、有关stm32f103 端口复用的问题?$ T7 X) Y* j9 J$ j& n& [
问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:
* {$ H& |  \) f4 x) A% b7 O1 S# H2 @
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);( y7 h0 C8 d5 q- W9 U; a
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);! q1 W$ d4 X) C
当我要使用I2C1的重定义时,我要打开,5 p+ M$ _& E4 A; f0 @
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);+ a) c5 D$ W0 H: a
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/ u% ]3 l; F7 A
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
& n5 X$ E  Y8 G& L0 X1 _
这样理解对不对?
( q% c) f( E. p& W# w6 Q7 v

3 W+ {1 a7 |' S# y8 s
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么?
6 O. ]" L- w( u, Z- i  g" X
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?
# A- b# r/ p: s  K6 X9 M! k6 H
& X. ]' t- K0 C$ C9 A3 b
答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。$ O) j9 C% [$ f6 Y) Z1 w5 _
5 S0 ~2 r! r  J& e$ B) y5 I) M: H
3、AFIO重映射的操作步骤是什么?
/ l! Y# d9 P3 T答:使能被重新映射到的I/O端口时钟使能被重新映射的外设时钟使能AFIO功能的时钟 (勿忘!) 进行重映射
" M+ K  t7 q2 N; J " K8 ?3 V9 w4 j. K5 n! }0 F

- ~# s: x9 V5 s/ r. H1 Q: g4、配置IO口的频率问题
3 e' x( u5 f1 w " T' b4 t6 g1 N
问:配置IO口的频率时,为什么只给一个IO口配置?3 m1 K( e2 D" Q$ F. C* B. G
答:GPIO_InitStructure.GPIO_Speed 这个结构体的成员始终为GPIO_Speed_50MHz 配置其他io口时也默认用50MHz 。
, H( a$ V4 }  J0 c6 b
) e, b5 H5 I, N9 g0 \ * c! |# Z% _( g7 V
5 u# Z/ s7 N  L7 ^7 Q
5、请问怎样开始STM32W108CBU64芯片的PB5引脚外设输入中断?3 [4 E+ h9 o- h' w! \) }

3 K- _4 O" B# B4 K问:有没有这么一个例程,有开启外设中断和中断函数的? 0 T4 D7 h- d% ]' Q
最佳答案:看了下datasheet,PB5复用的功能为PB5, ADC0, TIM2CLK, TIM1MSK,相关的中断应该有,就看你配置为什么外设了。
: j( v4 S3 s0 ^! B

: L4 g% ?$ _- r2 B+ |( ^7 A6、STM32F101 Tamper Pin 使用问题4 L9 b4 ~& q& W5 L. _

: J* R+ |" O. w4 ?0 M2 V$ t问:请教各位大虾:STM32F101 BKP当中的Tamper Pin该如何初始化!?& ]8 Q$ H5 `. {2 S
答:当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。 ● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 详见:BKP_CSR
1 O  i. m& w- u# T. f( d' z/ @
0 H5 I! K, [! b5 S' t3 |. {7、有关stm32f103 端口复用的问题?
( z, ~0 o; t9 `# O问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:
& t. Y4 q. B' \$ ?+ z- Y8 mPB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
1 R- |  j; k% _! F0 n  A& ZRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
7 L( T" z+ m  U; R: X: K; @当我要使用I2C1的重定义时,我要打开,
; ?% t: B. T7 c" [: A% eRCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); ; X. i3 t0 C( ?4 u$ v" }! F( P: ^& W( I
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); ' i1 d: o/ v1 w
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
1 q7 L' J, ]$ s- Y这样理解对不对? . F, N6 t3 R. O+ {
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么?
; G, ^* ?5 r5 L' L" i总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?

# ~/ y7 Q- \: e( r' i答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。6 N4 N4 K9 e" o3 i9 K& f8 x
7、STM32里面,设置GPIO_Mode_IPU 有什么用# K1 Q1 f' s% U2 g
问:中断的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);                                    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);2 _. }- C9 w" J! `
GPIO口设置里面有:        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;
+ S$ t+ n9 U' g$ r4 p0 E; j( U+ p                                GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;' Q: b. g& N# J1 X3 r
                                GPIO_Init(GPIOB, &GPIO_InitStructure); 1 |7 g1 p% j7 C! e
我想问的是,这两组设置必须同时存在吗?# f7 Z4 `& t2 b" s
答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);         
) p( J9 I5 L4 J/ y% a+ T1 ~; z" Z      GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);/ k4 T8 G; |2 z) Y, ]5 ]7 ~9 a
STM32中这两句话的意思是PB口的8、9管脚作为外部中断的触发信号,所以Pin_8和Pin_9就要设置成输入的模式,而GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;中IPU是指IO口的工作模式是带上拉输入,这个和具体的电路有关,总之如果选择某个IO口作为外部中断的触发信号,就必须配置这个IO口为输入模式,不然无法触发中断
( p6 q. x. @( V* M' _! r: P
( l; Z- e7 [1 {+ t7 k8 x6 \8、stm32中GPIO口的最大输出速度如何理解?
; ^0 u# X& O5 Z* o问:stm32中GPIO口的最大输出速度如何理解?" y7 H' e9 O% D' `9 X
答:1、是这样的,2M、10M和50M是指GPIO口的采样频率。不知这样理解对不对,我就是这样做的。4 U* |; `; l5 o, ^1 B; e
         2、我通过PB6采集80KBPS/S的方波,通过中断计采集,完全胜任。
5 g  b! T$ T  l* P$ F9 \9 n9、STM32 GPIO 弱上拉能做输入输出吗! A8 D7 o6 w3 `5 i
问:STM32 GPIO 弱上拉能做输入输出吗?& a3 j, ?" R* F0 N6 k/ \$ _  N
答:32只有上拉输入,用在外部连接的是下路输出的,这样才能正确读取。输出的话一般用推挽和开漏,推挽用于一般的驱动,开漏一般加上拉电阻像三极管集电极那样驱动较大电流。+ e# S4 W8 _5 k$ I
10、STM32语句:GPIO->ODR^=0X02 是怎么执行的?实现什么功能?
& \8 M  G; h  Z  Z问:是GPIO端口的数据存在ODR寄存器,该数据与0x02异或再存在ODR中吗?$ C/ w0 v' [: ]
答:ODR是stm32的IO端口输出数据寄存器,该寄存器31-16位始终读为0,15-0位输出数据。GPIO->ODR^=0X02 是输出数据与0x02异或,即输出数据的第二位如果与1相同,该位置0,反之出1,因此实现取反,输出数据保存在ODR,每执行一次输出数据的第二位取反一次。
2 Z2 z& \% @+ }. d" h/ O10、GPIO配置速度2 J0 L8 C) Q4 y
问:stm32中的GPIO如果设置成了输入模式,还需要配置GPIO_Speed么?: A. `/ S( B) ?9 w3 N+ k5 _
答:输入模式可以不用配置速度,但是输出模式必须确定最大输出频率。
5 P7 u+ f: Z1 i  b/ \11、stm32 GPIO输入电平检测
+ o3 M0 |% j& R3 T问:GPIO两个引脚,模式都初始化为输入弱上拉,给其中一个引脚接4.7V的电压,IDR对应的值为1;给另一个引脚接5.13V的电压,IDR对应的值却为0;& E2 o6 @8 L- W' H$ g8 ]! l
答:检查一下是否使能了相应GPIO的时钟,是否有这样一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否则读出的值不可预测。
: j2 s/ @, H% w12、关于STM32中GPIO寄存器IDR和ODR数据. j3 d' U% V- F- t
问:STM32中GPIO寄存器IDR和ODR数据是不是同步的?为什么我用GPIO_SetBits函数设置管脚的时候,IDR和ODR同时改变,怎么使得只改变ODR的数据,而不改变IDR的数据?谢谢!5 G! \5 {- @) x3 O
答:IDR寄存器的数据时实时反映IO口的状态,当然设置ODR,IO的状态也跟着改变,除非强制人为地设置。比如,ODR设置为1,而强制将对应的IO口接地,这时IDR就和ODR不一致;或者将ODR设置0,而强制降对应IO口接VCC,这时也不一致。& [& b- @  r6 n8 \$ ~5 p; N
13、用STM32,有六个GPIO口(不在同一组)要相同信号输出,请问怎么设置?
5 _  g' c: p( J% h% a问:例如GPIOE的pin10重映射到TIM1,设置好TIM1的PWM信号输出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要输出与GPIOE的pin10相同的信号,请问大侠怎么设置?
' h* [8 T) y2 Y7 j( s- }5 g( {/ i. k答:用定时器中断吧,把PWM的脉宽配置成定时中断,把GPIO引脚都配置好,相应时钟都使能,然后到定时器中断函数中做相同的处理。* U5 A& j9 Y7 J; S/ b5 o
14、关于GPIO_WriteBit与GPIO_SetBits
8 |$ J2 d4 \6 d! j- K问:GPIO_WriteBit与GPIO_SetBits有什么区别# y+ _2 w7 Z# {5 t5 B
答:可以用man命令查看区别+ G6 Q2 c9 c+ s9 l! g2 \" s3 r" W% K
man ioctl :' H( G& l" \. q" P; }2 H
NAME6 r, w0 A9 w9 J
       ioctl - control device/ @1 q8 }, Q) w6 K* K1 ]
man write :& S+ x& Y; _& n5 M4 ?
NAME
, t: |4 H, d+ L# Q+ q4 }       write - write to a file descriptor
& M6 f4 v6 j; c$ R* G1 M15、关于GPIO_InitTypeDef GPIO_InitStructure3 Q1 y# p. F) @2 [: U
问:这句话什么意思?5 O3 ~/ U5 e9 {/ C
答:声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStructure里面的内容后在GPIO_Init (GPIO_TypeDef 。
( [4 `6 d6 I) s& x2 D*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声明的那个结构体。6 n! M; w$ m0 ?" W
16、关于 STM32的IO口能不能像51的IO口那样直接控制Px口输出
9 q; K& w( V  u1 P/ ~  j问:大家好,STM32的IO口能不能像51的IO口那样直接控制Px口输出?比如我要用51控制器段数码管,只要给Px口送十六进制数值就可以了?请问STM32可以吗?6 v" n. \( d1 m8 `: }# z
答:可以的,举2个例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;这其中的GPIOx表示IO号的号码,BRR/BSRR表示相就IO口的控制寄存器,就按这个格式操作就行了。
5 @* m; F9 x6 o* d6 B+ T 17、关于stm32芯片IO端口配置* \, n, @1 o: H, @2 _$ m) A, v/ I( u
问:stm32芯片 IO端口配置为浮空输入时,能不能读取端口上的电平状态。
! r$ K2 p$ q3 M5 P! y$ _: f8 |& V# O7 g答:STM32的输入状态寄存器GPIOx_IDR和输出状态寄存器和GPIOx_ODR的读取是不受端口配置影响的。 / ^% Z8 ]) |, G$ u

* x$ u% |. B9 W9 Z; O18、stm32 JTAG和普通IO复用问题. d0 k' x7 n9 h+ B- ~7 r
) S8 ~9 c" H2 K; u8 p) p4 S
问:stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗。% P8 k# w6 ^/ i  U
答:能。因为在下载的时候,通过RESET时序进入了下载模式了。但是注意硬件的接法不要强制拉高拉低,也不要让其芯片的输出脚接过来。这样就会影响到jtag了。
1 c* R( }% `9 w+ n% J$ }3 M- g) I2 |- b6 D. l$ n
赞 收藏 5 评论20 发布时间:2012-5-8 10:43

举报

20个回答
raim8888 回答时间:2016-3-15 09:44:04
其实用串口时可以不打开AFIO时钟除非你重映射了,AFIO时钟在重影射,IO外部中断等才必须打开
orima 回答时间:2016-3-15 10:32:24
好东西,谢谢了。2 o$ P* [" h& C, K" J

3 X- P2 O5 F, W0 I期望继续汇总。。。
天使♀的☆宇★翼 回答时间:2015-5-18 07:57:50
真是好东西,多谢楼主分享
对对-365652 回答时间:2012-6-23 13:03:15

RE:STM32 关于GPIO的问题集锦

好东西,谢谢了。
xiaoxuanfengwu 回答时间:2012-9-19 10:45:54

RE:STM32 关于GPIO的问题集锦

顶一下!GOOD
林子的海角 回答时间:2012-11-16 16:08:00

RE:STM32 关于GPIO的问题集锦

00
sxlong401 回答时间:2012-12-4 10:43:00

RE:STM32 关于GPIO的问题集锦

这个要看看
安电 回答时间:2012-12-19 14:29:52

RE:STM32 关于GPIO的问题集锦

你好,我想问一下GPIO能否配置成SPI接口,因为对我来说SPI接口不太够用啊
hnhdzzc 回答时间:2013-3-25 20:05:29

RE:STM32 关于GPIO的问题集锦

mark
8 j4 z4 Q* A3 s5 _1 ~4 z- N
Motorola-424122 回答时间:2013-3-31 21:01:52

回复:STM32 关于GPIO的问题集锦

真的很好
Chendonghao55 回答时间:2013-12-7 19:28:19

RE:STM32 关于GPIO的问题集锦

Thank you .
李阿飞 回答时间:2013-12-20 13:53:25

RE:STM32 关于GPIO的问题集锦

顶一个,哈哈哈
szruan 回答时间:2014-6-26 10:15:29

回复:STM32 关于GPIO的问题集锦

好东西
霹雳之火 回答时间:2014-7-28 17:55:50

RE:STM32 关于GPIO的问题集锦

进来好好学习学习
outstanding1573 回答时间:2014-8-18 16:43:14

RE:STM32 关于GPIO的问题集锦

看看 顶起
子瓜云鬼 回答时间:2014-8-19 23:10:53

回复:STM32 关于GPIO的问题集锦

好东西  顶一个
老姜鱼儿 回答时间:2015-5-15 21:07:39
mark,非常感谢!
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版