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

STM32 关于GPIO的问题集锦

[复制链接]
pwdzsj 发布时间:2015-10-17 17:20
7 V2 X4 Y3 d' q3 X: J* s
1、关于GPIO
3 m, m4 @0 Y2 u/ R/ |( y% Q
# e, I  a  _3 X6 `9 `$ g问:STM32的IO口初始化为输入浮空,那管脚是高电平还是低电平呢?
* k; [, V0 z/ T7 D
7 c! A9 K/ b  {答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。1 p! q* O3 Q" m( d8 k
' N0 G: Q" |/ s+ W$ n' w' V$ {
2、有关stm32f103 端口复用的问题?& Z1 `" q5 t* }$ U& e$ d

0 l( |3 v2 S2 n8 N; e$ s问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:& {7 N  H+ A) z/ S+ s
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);8 w  C- D6 K2 c# D3 ?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);# F- B; R7 L8 t
当我要使用I2C1的重定义时,我要打开,$ O+ d$ T5 W+ z5 ]9 H5 h1 C" u
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);  h% m0 a& W7 L
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);8 l8 Z! w5 K$ H& M8 v# z" Q
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
; p/ c; Q/ Q: }  q5 Y$ P6 M  V这样理解对不对?
& \1 \1 l* c6 {) S" U2 w. ?, }  r* C& Z! k% j& ]- e3 m
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么?
6 f3 c% |% @* |. l0 W7 r总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?
' A  h2 Q/ G% }8 t) C- K
8 F( N: H! K1 S' k答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。
2 o0 \9 `8 C, M3 s
. o; u& r1 _2 Z6 [2 c# I  d/ h! n+ M3 }' f- F! v1 @! ^, X
3、AFIO重映射的操作步骤是什么?9 O% D' i3 n6 i: l8 M0 ?% J/ `5 N2 }

, G; b3 `5 B8 e) N答:使能被重新映射到的I/O端口时钟使能被重新映射的外设时钟使能AFIO功能的时钟 (勿忘!) 进行重映射
) I3 X* K1 H. u4 a$ j" ?/ Z3 ?# t5 b5 n& N. D9 w3 T
  k$ i) K* ?5 p+ u3 D7 {5 }" [
4、配置IO口的频率问题! m9 P4 N: O/ U; v, O

4 N1 W% z: T4 D; V问:配置IO口的频率时,为什么只给一个IO口配置?
0 S1 P7 W0 ]- O, k! d6 [* G6 q答:GPIO_InitStructure.GPIO_Speed 这个结构体的成员始终为GPIO_Speed_50MHz 配置其他io口时也默认用50MHz 。
1 E9 j$ R, v4 B% J# \) ?  & W* U/ U  v" E# ~% c% g
5、请问怎样开始STM32W108CBU64芯片的PB5引脚外设输入中断?( Y( I" @8 I! M5 D5 Y: B
3 ?  k* y! O8 w& c% o. ~1 T
问:有没有这么一个例程,有开启外设中断和中断函数的?
& Q5 T. a* z8 Z. o3 _最佳答案:看了下datasheet,PB5复用的功能为PB5, ADC0, TIM2CLK, TIM1MSK,相关的中断应该有,就看你配置为什么外设了。
$ n% a3 P! i+ \9 h( e6 O0 X1 T6 I9 W/ f( i2 W
6、STM32F101 Tamper Pin 使用问题& w! k% l3 a  q+ A

! f+ f! I$ l. e问:请教各位大虾:STM32F101 BKP当中的Tamper Pin该如何初始化!?, r! u9 k# y' C( J& K
答:当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。 ● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 详见:BKP_CSR2 R4 X7 O# E4 o5 h7 T1 l+ H
) _: X4 O5 G. j3 s3 W
7、有关stm32f103 端口复用的问题?5 {% S: ?: `+ K# n
问:
& N, d  u% Z5 `: X在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: # A% u4 `# H5 }0 _) j
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); . ^/ x6 q2 S8 L+ h& Q
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 6 c; T% b0 K# O& L
当我要使用I2C1的重定义时,我要打开,
8 U. W  M' D4 M& }3 ?RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
1 c* F3 R- d. y( P& A/ q. m+ {. [RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); ! U# q( c7 H' C
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3 H, F2 T% N; a1 }5 `1 \5 b! P这样理解对不对?
  w2 r8 i% V4 r/ S有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么? " S" R, K7 W" K7 Q9 U: A
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开? 9 Z% X# z( `" s% M$ K9 B
答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。
9 S0 ^& V$ ?  }' j* V* ]7、STM32里面,设置GPIO_Mode_IPU 有什么用
6 E$ }9 Z8 V  @1 J% G& W" _+ X4 e问:中断的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);                                    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);6 ^1 b" W" J" ?7 A/ C- C8 }
GPIO口设置里面有:        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;
  b1 f% v  e8 \/ P, o# j' c* q$ P! P                                GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;' O( H1 S5 w9 `
                                GPIO_Init(GPIOB, &GPIO_InitStructure); 2 J$ p4 s# t( L, f. p( _
我想问的是,这两组设置必须同时存在吗?
. Y; e. d6 n& h2 c答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);         
9 J; t4 `) V7 h. A      GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);, d0 N1 o6 X( |+ j& M" l. r5 y
STM32中这两句话的意思是PB口的8、9管脚作为外部中断的触发信号,所以Pin_8和Pin_9就要设置成输入的模式,而GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;中IPU是指IO口的工作模式是带上拉输入,这个和具体的电路有关,总之如果选择某个IO口作为外部中断的触发信号,就必须配置这个IO口为输入模式,不然无法触发中断
) C! H# w3 j* H* B( @1 {
' u& j, K/ d: H, ]. W8、stm32中GPIO口的最大输出速度如何理解?: z7 \; w( \! ~5 G. Y# m! `$ ]
问:stm32中GPIO口的最大输出速度如何理解?
; x, E1 H" X# i/ r; i. L8 f  P答:1、是这样的,2M、10M和50M是指GPIO口的采样频率。不知这样理解对不对,我就是这样做的。
9 y  D' O7 {# V         2、我通过PB6采集80KBPS/S的方波,通过中断计采集,完全胜任。
9 t! F- D% Y4 ]) M; ^/ ]% E9、STM32 GPIO 弱上拉能做输入输出吗8 z3 S* X. l$ a% H
问:STM32 GPIO 弱上拉能做输入输出吗?  q# x8 T" l' d5 Z! L' O3 e
答:32只有上拉输入,用在外部连接的是下路输出的,这样才能正确读取。输出的话一般用推挽和开漏,推挽用于一般的驱动,开漏一般加上拉电阻像三极管集电极那样驱动较大电流。
/ z1 d5 G' `9 ^2 D$ L- X& B10、STM32语句:GPIO->ODR^=0X02 是怎么执行的?实现什么功能?+ @8 P9 M( n  }$ k
问:是GPIO端口的数据存在ODR寄存器,该数据与0x02异或再存在ODR中吗?
9 j$ C, D  }) G7 Q5 [答:ODR是stm32的IO端口输出数据寄存器,该寄存器31-16位始终读为0,15-0位输出数据。GPIO->ODR^=0X02 是输出数据与0x02异或,即输出数据的第二位如果与1相同,该位置0,反之出1,因此实现取反,输出数据保存在ODR,每执行一次输出数据的第二位取反一次。
! D( J& [9 b) l8 E0 G( A10、GPIO配置速度7 H% ]! P" N  i. N  [  Q
问:stm32中的GPIO如果设置成了输入模式,还需要配置GPIO_Speed么?
. G3 Q7 Z/ g$ O8 c2 W/ B3 c答:输入模式可以不用配置速度,但是输出模式必须确定最大输出频率。
7 T+ A( W) N% j3 w: o1 G! m; ]1 ?11、stm32 GPIO输入电平检测
2 F( D' b  k3 E, P" t问:GPIO两个引脚,模式都初始化为输入弱上拉,给其中一个引脚接4.7V的电压,IDR对应的值为1;给另一个引脚接5.13V的电压,IDR对应的值却为0;: K) g9 G) f. k9 G) I9 m* M8 {
答:检查一下是否使能了相应GPIO的时钟,是否有这样一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否则读出的值不可预测。
- ], ?' _& {( A  k6 O" v12、关于STM32中GPIO寄存器IDR和ODR数据
! M, \7 g5 X0 I问:STM32中GPIO寄存器IDR和ODR数据是不是同步的?为什么我用GPIO_SetBits函数设置管脚的时候,IDR和ODR同时改变,怎么使得只改变ODR的数据,而不改变IDR的数据?谢谢!
3 H: z. u5 J- A答:IDR寄存器的数据时实时反映IO口的状态,当然设置ODR,IO的状态也跟着改变,除非强制人为地设置。比如,ODR设置为1,而强制将对应的IO口接地,这时IDR就和ODR不一致;或者将ODR设置0,而强制降对应IO口接VCC,这时也不一致。
4 Y- [9 w1 z- o5 K2 r13、用STM32,有六个GPIO口(不在同一组)要相同信号输出,请问怎么设置?
+ K+ y/ Z5 J3 {6 i; ]6 f- y问:例如GPIOE的pin10重映射到TIM1,设置好TIM1的PWM信号输出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要输出与GPIOE的pin10相同的信号,请问大侠怎么设置?
: U1 q# X* a0 v* t答:用定时器中断吧,把PWM的脉宽配置成定时中断,把GPIO引脚都配置好,相应时钟都使能,然后到定时器中断函数中做相同的处理。
) a" v2 t0 ?3 ~% q+ i& ?/ |1 h14、关于GPIO_WriteBit与GPIO_SetBits
! X) j# r6 F1 ]" ]) `5 x' ?9 R! c问:GPIO_WriteBit与GPIO_SetBits有什么区别
4 |: x3 |2 q' X5 C7 w' c; s答:可以用man命令查看区别
/ `  D& Z0 p; D6 K& ~  Uman ioctl :
9 G( Q8 f) S6 N8 iNAME- N& G# N) V) Y! l: D
       ioctl - control device7 W7 w( n: i2 s
man write :
5 O! I5 y- ?/ o6 v1 |1 Q' vNAME6 r' c7 v- s. E: `+ Y. P
       write - write to a file descriptor. J1 P; x2 r. x) x5 K2 @  O
15、关于GPIO_InitTypeDef GPIO_InitStructure/ x, ^1 e2 r, z# {# m3 F8 q
问:这句话什么意思?# R7 w% V0 u; z2 D
答:声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStructure里面的内容后在GPIO_Init (GPIO_TypeDef 。
: O9 u* t, L8 D4 q$ b, u. B*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声明的那个结构体。! c* A/ N* N2 r# T1 D
16、关于 STM32的IO口能不能像51的IO口那样直接控制Px口输出
( |/ w* t2 G3 {% D0 D5 o4 j问:大家好,STM32的IO口能不能像51的IO口那样直接控制Px口输出?比如我要用51控制器段数码管,只要给Px口送十六进制数值就可以了?请问STM32可以吗?
; q+ B. g1 I9 e) s( v6 s答:可以的,举2个例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;这其中的GPIOx表示IO号的号码,BRR/BSRR表示相就IO口的控制寄存器,就按这个格式操作就行了。& a+ o7 z4 y0 h$ _5 p5 n6 [
17、关于stm32芯片IO端口配置
' b# u' p: _# T. \问:stm32芯片 IO端口配置为浮空输入时,能不能读取端口上的电平状态。
/ e/ Z2 r: g" k  T5 w: Q( F! Q答:STM32的输入状态寄存器GPIOx_IDR和输出状态寄存器和GPIOx_ODR的读取是不受端口配置影响的。
+ ^, }, H3 o8 {* n6 e$ {2 \8 p. I# r& ^0 n5 P% Q% w9 q0 H3 j% i
18、stm32 JTAG和普通IO复用问题8 V' r5 D, K1 S* R
. [5 ?5 p8 B4 l% @& Q& ?; ~
问:stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗。
( C' E6 q+ S+ ^7 }  ~  x答:能。因为在下载的时候,通过RESET时序进入了下载模式了。但是注意硬件的接法不要强制拉高拉低,也不要让其芯片的输出脚接过来。这样就会影响到jtag了。! _) ]' i* G+ r7 P

% V* d: E% V( m
收藏 3 评论6 发布时间:2015-10-17 17:20

举报

6个回答
anger0925 回答时间:2015-10-17 22:38:38
总结的很全
disheng4688 回答时间:2015-10-18 09:23:22
学习                                    
ruilimeng 回答时间:2015-10-20 23:51:29
谢谢分享!
foxglove 回答时间:2015-10-21 08:17:44
STM32 关于GPIO的问题集锦
cheng1117 回答时间:2015-10-21 09:33:28
学习 了
yanhaijian 回答时间:2015-10-21 09:39:29
研究的很细。

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版