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

STM32 关于GPIO的问题集锦

[复制链接]
zengwh 发布时间:2012-5-8 10:43
1、关于GPIO
) r# h" ]/ I( Y问:STM32IO口初始化为输入浮空,那管脚是高电平还是低电平呢?
* _: |8 h: n7 i' k" C; T答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。8 ?8 G+ Y* L! o
2、有关stm32f103 端口复用的问题?# s- Y) l) v6 a& b; a
问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:2 E9 }2 s! Q) C& p# r
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
: U5 P8 W8 p$ E& J
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBENABLE);/ o  S1 a; R/ o3 N2 R3 H6 e, @
当我要使用I2C1的重定义时,我要打开,) g7 F4 {$ {2 R0 N8 ^  W9 H
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
% t' f3 l7 L5 Q1 G1 A% H' i
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBENABLE);
7 f5 R0 K0 b3 p! M' N0 b+ ~
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIOENABLE);5 b: U5 j8 r0 b7 B$ ^7 Z
这样理解对不对?
2 Z& [: d/ M( y
. P/ ?8 Q3 \- I% N& y# Z
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么?
4 |% W( [: K( l, g
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?
* U* j" f. k% ^; d. o3 H2 T0 q5 g
" e  }1 D+ B" y# U
答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。1 T& n/ Q; [2 H
# a9 k1 R: f+ @& H
3、AFIO重映射的操作步骤是什么?! i; @# V" F; ~! v. L
答:使能被重新映射到的I/O端口时钟使能被重新映射的外设时钟使能AFIO功能的时钟 (勿忘!) 进行重映射
9 c& K. ]4 n- U/ M( |0 M3 C% B- V. T: H
# R( _4 U0 ?% l; V" \( t
/ I8 v! f& L0 e8 @& M! A4、配置IO口的频率问题
) S- t$ _6 E1 K6 u7 f( o! } 6 P* D7 Q! j( O- K( ?
配置IO口的频率时,为什么只给一个IO口配置?5 x5 E+ Q3 D. K& e% q5 Z( w$ T
GPIO_InitStructure.GPIO_Speed 这个结构体的成员始终为GPIO_Speed_50MHz 配置其他io口时也默认用50MHz 。5 U( g) L  a- x. x% K$ y

1 c2 x3 ~! d. o; ?. M' r+ h
% Y7 u% |1 H& W! v% f; f # u' E+ j7 p/ a3 ]* k7 d. w
5、请问怎样开始STM32W108CBU64芯片的PB5引脚外设输入中断?
) O( ^$ P+ C' ~2 Y( U
& c) _6 N$ S# X0 }' e
问:有没有这么一个例程,有开启外设中断和中断函数的?
, @3 X/ D& D6 N% `最佳答案:看了下datasheet,PB5复用的功能为PB5, ADC0, TIM2CLK, TIM1MSK,相关的中断应该有,就看你配置为什么外设了。
% T, u% z2 n# D8 i

; D: L: x+ a; r& h8 A6 G' ?% A7 i6、STM32F101 Tamper Pin 使用问题# k& x. \; a+ Z

6 O. Z, }1 ~0 {5 Z8 _问:请教各位大虾:STM32F101 BKP当中的Tamper Pin该如何初始化!?
6 M3 y( z" ^/ I/ R答:当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。 ● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 详见:BKP_CSR. ~( W+ K$ g! W

8 A4 P2 t3 {; Q$ R7、有关stm32f103 端口复用的问题?
: F, o- }' i) p5 \8 I5 |. f问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: 7 Q# v$ y) h1 P' O& K, H0 }
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); , d* z3 U  |' z% [. ]+ c2 `
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); & F3 V% Q8 ]" c: z+ Z2 Q' \
当我要使用I2C1的重定义时,我要打开,
. v! L9 c  H  e$ _  eRCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);   {+ h" x2 P* @* j
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); ' f' K' v' P9 X  h/ o
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
5 A6 E9 t1 R& i) z" t8 h# P- J这样理解对不对?
6 K& j$ N# b& Y4 ]8 L6 U: T有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么? 6 z9 q4 [7 P1 y) y3 q- @
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?

, g6 K) h$ X: n8 G2 b+ X答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。7 c$ b7 i! c' i" u& H2 p3 ~
7、STM32里面,设置GPIO_Mode_IPU 有什么用6 \7 z. u* @" C6 ]* f. u
问:中断的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);                                    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);& E1 R+ T7 P( ]  f4 W
GPIO口设置里面有:        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;
6 j1 z, g; w& r1 C9 K! _                                GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;6 c& B# z; G, q' e# {& p' P) w; B
                                GPIO_Init(GPIOB, &GPIO_InitStructure); 0 B, m6 u/ F6 E9 ?: T
我想问的是,这两组设置必须同时存在吗?
$ L! `& e$ V- ^* A答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);          / m! f# i2 E0 g, W
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
4 E; D$ W* k0 F  q$ r1 j& jSTM32中这两句话的意思是PB口的8、9管脚作为外部中断的触发信号,所以Pin_8和Pin_9就要设置成输入的模式,而GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;中IPU是指IO口的工作模式是带上拉输入,这个和具体的电路有关,总之如果选择某个IO口作为外部中断的触发信号,就必须配置这个IO口为输入模式,不然无法触发中断
* o+ b& |/ }( S6 p7 V$ ~5 K # U% j, T8 Z9 r$ b, Y) I5 l8 ?
8、stm32中GPIO口的最大输出速度如何理解?0 u# y( z$ ]( Y% B' r1 s8 `
问:stm32中GPIO口的最大输出速度如何理解?
* T- a  H( J# Z! f+ P答:1、是这样的,2M、10M和50M是指GPIO口的采样频率。不知这样理解对不对,我就是这样做的。
+ i4 R) [% c( n8 B8 t         2、我通过PB6采集80KBPS/S的方波,通过中断计采集,完全胜任。1 O2 d) |) U  S) e
9、STM32 GPIO 弱上拉能做输入输出吗
0 o8 Q; T% q8 n* w$ A5 C问:STM32 GPIO 弱上拉能做输入输出吗?& C$ E. w3 E! j# h9 c) p) u
答:32只有上拉输入,用在外部连接的是下路输出的,这样才能正确读取。输出的话一般用推挽和开漏,推挽用于一般的驱动,开漏一般加上拉电阻像三极管集电极那样驱动较大电流。
* N; h% M1 T. k7 X+ V: i. y10、STM32语句:GPIO->ODR^=0X02 是怎么执行的?实现什么功能?
- E4 F+ k7 c2 F" d问:是GPIO端口的数据存在ODR寄存器,该数据与0x02异或再存在ODR中吗?
9 S: P5 c& o: t+ z  G5 q2 c3 d答:ODR是stm32的IO端口输出数据寄存器,该寄存器31-16位始终读为0,15-0位输出数据。GPIO->ODR^=0X02 是输出数据与0x02异或,即输出数据的第二位如果与1相同,该位置0,反之出1,因此实现取反,输出数据保存在ODR,每执行一次输出数据的第二位取反一次。! w% V4 P  l8 a) z& f, r1 R2 z
10、GPIO配置速度$ `8 {0 d8 P  J; }/ T9 i2 Q3 k' I
问:stm32中的GPIO如果设置成了输入模式,还需要配置GPIO_Speed么?. K+ J& F$ ?0 v4 @; p% z
答:输入模式可以不用配置速度,但是输出模式必须确定最大输出频率。
+ ?4 R+ I  a- a6 x( ?+ O11、stm32 GPIO输入电平检测9 m$ O5 k4 l& U
问:GPIO两个引脚,模式都初始化为输入弱上拉,给其中一个引脚接4.7V的电压,IDR对应的值为1;给另一个引脚接5.13V的电压,IDR对应的值却为0;
7 c: r/ k4 \( _/ l# t( q' X答:检查一下是否使能了相应GPIO的时钟,是否有这样一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否则读出的值不可预测。
; N- d6 B9 w8 I7 M: r! D12、关于STM32中GPIO寄存器IDR和ODR数据
, L( A, `5 [5 y! i3 U8 ^: J6 F( x) C问:STM32中GPIO寄存器IDR和ODR数据是不是同步的?为什么我用GPIO_SetBits函数设置管脚的时候,IDR和ODR同时改变,怎么使得只改变ODR的数据,而不改变IDR的数据?谢谢!
, `4 v9 c3 ?; i4 m, \: {答:IDR寄存器的数据时实时反映IO口的状态,当然设置ODR,IO的状态也跟着改变,除非强制人为地设置。比如,ODR设置为1,而强制将对应的IO口接地,这时IDR就和ODR不一致;或者将ODR设置0,而强制降对应IO口接VCC,这时也不一致。
. s5 L2 ?9 f5 ^0 _9 C3 l13、用STM32,有六个GPIO口(不在同一组)要相同信号输出,请问怎么设置?
2 |! t# S! @' Z问:例如GPIOE的pin10重映射到TIM1,设置好TIM1的PWM信号输出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要输出与GPIOE的pin10相同的信号,请问大侠怎么设置?1 v6 z" r  N! L6 g* V5 l
答:用定时器中断吧,把PWM的脉宽配置成定时中断,把GPIO引脚都配置好,相应时钟都使能,然后到定时器中断函数中做相同的处理。
' Y9 c& Q) j0 @14、关于GPIO_WriteBit与GPIO_SetBits
, V# H- m) O5 _  c1 p! z问:GPIO_WriteBit与GPIO_SetBits有什么区别  h+ q, }6 j! C0 W
答:可以用man命令查看区别
2 J8 T5 W2 {1 v  Z8 @( M; xman ioctl :: ^1 }% X1 C: u* C
NAME
* J* F- D/ A( d+ `" D- n( a       ioctl - control device* O, `+ m1 S3 @& e
man write :
) Z+ Y5 H$ p+ H4 }9 pNAME* {5 m6 Y  U; S/ v0 g
       write - write to a file descriptor
9 Q2 b6 p: q3 ?) `15、关于GPIO_InitTypeDef GPIO_InitStructure
! |! Q: h+ w. p0 [( l问:这句话什么意思?8 H/ b$ p: Q* Q) h4 r$ u: m3 K% h
答:声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStructure里面的内容后在GPIO_Init (GPIO_TypeDef 。
- |3 M0 q/ E) j1 p*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声明的那个结构体。8 B, _/ Q. J! I2 A" f' H, p. v
16、关于 STM32的IO口能不能像51的IO口那样直接控制Px口输出
0 `% c6 ?2 ~3 _* r% l8 {问:大家好,STM32的IO口能不能像51的IO口那样直接控制Px口输出?比如我要用51控制器段数码管,只要给Px口送十六进制数值就可以了?请问STM32可以吗?
1 h1 Y/ ~9 E, F/ ^答:可以的,举2个例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;这其中的GPIOx表示IO号的号码,BRR/BSRR表示相就IO口的控制寄存器,就按这个格式操作就行了。
8 n% s! E1 k1 v7 X0 m' C 17、关于stm32芯片IO端口配置
; o" {+ ~/ a3 z* r! f$ K8 W问:stm32芯片 IO端口配置为浮空输入时,能不能读取端口上的电平状态。) a- x. [+ ^, F/ o( u$ h( {
答:STM32的输入状态寄存器GPIOx_IDR和输出状态寄存器和GPIOx_ODR的读取是不受端口配置影响的。
- y$ g& \2 q! o  Z4 C2 N . D4 ]3 l% K$ ?6 p- V! n$ z
18、stm32 JTAG和普通IO复用问题
2 M5 m: o" X+ s7 r) @1 ~  V  N9 e . T9 ~! q7 C& O8 j2 S" h
问:stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗。
" x4 f. u$ X% |8 s& {答:能。因为在下载的时候,通过RESET时序进入了下载模式了。但是注意硬件的接法不要强制拉高拉低,也不要让其芯片的输出脚接过来。这样就会影响到jtag了。& r% h+ y' h$ S; I
& l3 g7 D3 u8 G* j; L
收藏 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
好东西,谢谢了。
8 }7 D- V6 L4 C1 C) `, z# _: H/ h5 n, ]& Q) B
期望继续汇总。。。
天使♀的☆宇★翼 回答时间: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  i. i7 Z" A: g5 c
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版