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

STM32 关于GPIO的问题集锦

[复制链接]
zengwh 发布时间:2012-5-8 10:43
1、关于GPIO9 u4 E( P' h% \8 H( T  H
问:STM32IO口初始化为输入浮空,那管脚是高电平还是低电平呢?  ~0 d# C! C7 Y" e. O1 {
答:既不是高电平也不是低电平,悬空的意思是没有使用的状态。
, F. `+ A4 G1 z/ [2、有关stm32f103 端口复用的问题?, W5 R# i9 s" n
问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:
' }% j; L% R7 J! H; ~. I
PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);; z/ P! M  j7 G. _% b! Q
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBENABLE);) e0 D' T  O; C9 j
当我要使用I2C1的重定义时,我要打开,4 c2 F0 f5 n' n$ R4 a. }  f. t* p
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);( q2 J! [  M( E) y3 S- I2 X- f
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBENABLE);
+ D/ v  U' m) c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIOENABLE);! ?% u5 Y& w  G4 s
这样理解对不对?! c, |6 Z% u# g" \. }( n2 y
8 l' H# h; v  F
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么?
6 Q5 v8 h, V0 D/ a: [9 O+ r. e. k
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?
9 L, V0 |6 v( [

6 g% x1 Y$ b: l+ c( J$ @答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。
0 Q. M* A6 k  O* |1 t
# |+ w9 F/ }1 c' X! L& z, f3、AFIO重映射的操作步骤是什么?; _$ Q9 A* X# a) |% E6 W+ J
答:使能被重新映射到的I/O端口时钟使能被重新映射的外设时钟使能AFIO功能的时钟 (勿忘!) 进行重映射$ `! a8 _8 B' g* B

) t; B6 T' I" \8 e1 [- I/ T
" h7 }4 ?' D( Z1 D1 G4、配置IO口的频率问题( |4 v5 D8 W9 C  s$ ?- i/ s
& t  L" X3 S$ p* _) Q8 q. p5 U: m; _
配置IO口的频率时,为什么只给一个IO口配置?
' J6 e1 U  M) mGPIO_InitStructure.GPIO_Speed 这个结构体的成员始终为GPIO_Speed_50MHz 配置其他io口时也默认用50MHz 。
( v' c  P4 h/ t- Y9 D0 V% u9 k $ u: F) h2 d- N" {
% g! L& P& a* E7 J6 ~
: Z* r6 _9 M7 P, d! Q
5、请问怎样开始STM32W108CBU64芯片的PB5引脚外设输入中断?% \1 S, D  k& \
7 ]4 Z- W0 P0 C; {. @
问:有没有这么一个例程,有开启外设中断和中断函数的? $ g) K6 A# X: F
最佳答案:看了下datasheet,PB5复用的功能为PB5, ADC0, TIM2CLK, TIM1MSK,相关的中断应该有,就看你配置为什么外设了。
7 \3 N3 A9 h1 O" }9 ^
; d0 V3 q6 J0 D) k+ @) f0 w( O# h
6、STM32F101 Tamper Pin 使用问题- F& E" r9 t& M2 \. D- z

, q% E+ i" c" ]问:请教各位大虾:STM32F101 BKP当中的Tamper Pin该如何初始化!?; F& _, f7 E) Y& |6 m
答:当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。 ● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 详见:BKP_CSR0 W- g9 L6 U& Z8 D" k$ \) K# H
" |1 N) y3 P5 v
7、有关stm32f103 端口复用的问题?
% f! d; ^8 _1 f( ^# V8 l. B* L问:在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子:
& Z2 A0 d5 Z) E1 L( v7 I0 s/ FPB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
# G) B" V: m, g7 ~! R4 u! a% YRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); " o" X+ C* M# p% d+ q$ J/ s# A
当我要使用I2C1的重定义时,我要打开, ; @' b9 L9 N; @" v" c3 `0 v, e* W" a
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); 4 A$ q% U. t$ c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
" Y7 p. e- x: E& m$ M$ @5 LRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
$ s  H0 j: @! `8 d: S# n) q1 t这样理解对不对? ! _2 i9 g$ I7 W0 O
有的人说当用的芯片自带的外设时都要打开 AFIO 时钟,但我用到usart1时没有打开AFIO 时钟,照样能用usart,这是为什么? " N* S% W, M- |- a( L
总之问这个问题的根本原因是AFIO的时钟要在什么情况下打开?
; d- [3 H9 M! Q, ~8 W9 F
答:1、串口必须要打开AFIO时钟,不然不能工作。可能你的初始化函数、RCC配置中有开启的地方。 2、AFIO在你需要使用某一模块时,比如你想使用GPIOC,这个时候要打开GPIOC模块的时钟。 3、关闭I2C而不是关闭I2C模块的总线,如果你想使用普通模式,就要把I2C模块关闭以后,重新配置GPIOB模块,就可以正常使用了。
+ b+ X  [  y7 K. d( ?7、STM32里面,设置GPIO_Mode_IPU 有什么用
+ `; x0 \5 {8 e问:中断的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);                                    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
) |% ?2 R: ~# wGPIO口设置里面有:        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9;/ _7 k& o) \, |( D7 F) e* p* G2 c
                                GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;2 F# f* p% O9 a9 b) W" k& `
                                GPIO_Init(GPIOB, &GPIO_InitStructure);
! C  q/ C. A# M7 l7 k我想问的是,这两组设置必须同时存在吗?# M$ _! ^# @' L; R
答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);          3 N" h+ i" T/ g' Y9 x. X$ s- F0 v
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);  N( ]7 B- N& T: q3 G! F4 C
STM32中这两句话的意思是PB口的8、9管脚作为外部中断的触发信号,所以Pin_8和Pin_9就要设置成输入的模式,而GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;中IPU是指IO口的工作模式是带上拉输入,这个和具体的电路有关,总之如果选择某个IO口作为外部中断的触发信号,就必须配置这个IO口为输入模式,不然无法触发中断  Q2 Q$ n( R/ E, y/ `, X

# j  f1 B8 J( ^+ b6 c8、stm32中GPIO口的最大输出速度如何理解?
  i9 p& E! o3 K: J; n- T问:stm32中GPIO口的最大输出速度如何理解?
, V" d# F7 e1 R: v& ^答:1、是这样的,2M、10M和50M是指GPIO口的采样频率。不知这样理解对不对,我就是这样做的。6 z. `5 Q3 z7 w6 ?2 i; J
         2、我通过PB6采集80KBPS/S的方波,通过中断计采集,完全胜任。( }# r& v/ n! x; l
9、STM32 GPIO 弱上拉能做输入输出吗* j+ L# x( [; }! f# k5 Y8 `
问:STM32 GPIO 弱上拉能做输入输出吗?/ m0 }$ U) d$ A- S' L
答:32只有上拉输入,用在外部连接的是下路输出的,这样才能正确读取。输出的话一般用推挽和开漏,推挽用于一般的驱动,开漏一般加上拉电阻像三极管集电极那样驱动较大电流。
, A0 K: h1 i+ t1 Z: ?' B9 ^10、STM32语句:GPIO->ODR^=0X02 是怎么执行的?实现什么功能?
6 p+ T0 ~! d" }/ v& W9 ~( L& F问:是GPIO端口的数据存在ODR寄存器,该数据与0x02异或再存在ODR中吗?
: p' B# \  g6 W, J答:ODR是stm32的IO端口输出数据寄存器,该寄存器31-16位始终读为0,15-0位输出数据。GPIO->ODR^=0X02 是输出数据与0x02异或,即输出数据的第二位如果与1相同,该位置0,反之出1,因此实现取反,输出数据保存在ODR,每执行一次输出数据的第二位取反一次。8 K7 V* D# R1 p) f
10、GPIO配置速度- t4 A2 R  f) q  C" a+ Y8 p
问:stm32中的GPIO如果设置成了输入模式,还需要配置GPIO_Speed么?( ^. W0 @! X7 t3 U" N# Y9 o
答:输入模式可以不用配置速度,但是输出模式必须确定最大输出频率。
: b% W) K9 T' }! V- X# q/ H5 F4 v11、stm32 GPIO输入电平检测
5 ?5 `8 C/ `! d) r. u9 T4 V问:GPIO两个引脚,模式都初始化为输入弱上拉,给其中一个引脚接4.7V的电压,IDR对应的值为1;给另一个引脚接5.13V的电压,IDR对应的值却为0;
( Q7 P- e) n& Z答:检查一下是否使能了相应GPIO的时钟,是否有这样一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否则读出的值不可预测。: d6 q+ ^3 W& Z; h  L) C
12、关于STM32中GPIO寄存器IDR和ODR数据
4 t" @1 ]1 i7 k5 N$ F8 q问:STM32中GPIO寄存器IDR和ODR数据是不是同步的?为什么我用GPIO_SetBits函数设置管脚的时候,IDR和ODR同时改变,怎么使得只改变ODR的数据,而不改变IDR的数据?谢谢!) n3 y; Y: Q& e* B: T' [: V
答:IDR寄存器的数据时实时反映IO口的状态,当然设置ODR,IO的状态也跟着改变,除非强制人为地设置。比如,ODR设置为1,而强制将对应的IO口接地,这时IDR就和ODR不一致;或者将ODR设置0,而强制降对应IO口接VCC,这时也不一致。. r7 g. P  h3 @& l$ X* g* E( L) v% r; M
13、用STM32,有六个GPIO口(不在同一组)要相同信号输出,请问怎么设置?
" Z9 t+ ~. j" c+ q6 i问:例如GPIOE的pin10重映射到TIM1,设置好TIM1的PWM信号输出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要输出与GPIOE的pin10相同的信号,请问大侠怎么设置?; Y8 ?5 i) t! z$ S. m5 Y
答:用定时器中断吧,把PWM的脉宽配置成定时中断,把GPIO引脚都配置好,相应时钟都使能,然后到定时器中断函数中做相同的处理。/ c+ I* w6 D2 x9 W
14、关于GPIO_WriteBit与GPIO_SetBits
3 K, i9 Q4 l9 W2 g0 [问:GPIO_WriteBit与GPIO_SetBits有什么区别
' W% C1 g2 Q9 F, m3 h$ O+ m1 ?答:可以用man命令查看区别- @* |6 T6 c  O! b/ J  v5 n# f
man ioctl :9 T1 B2 K8 E# k8 j8 E2 n
NAME
9 Z7 {  y9 h/ l3 [       ioctl - control device
  I. h; U0 l4 W$ x$ P- [+ ^8 Fman write :. J' ^& u7 {; u7 W
NAME* v& S! |2 X# ~7 Y! ]; s
       write - write to a file descriptor2 b) f: l- t* j( ], R9 E4 A) z
15、关于GPIO_InitTypeDef GPIO_InitStructure
$ _$ O  M3 R0 Z问:这句话什么意思?
: U+ y% d: J( d5 y: k! A, ?' z答:声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,stm32里面初始化GPIO用的吧。。设置完了GPIO_InitStructure里面的内容后在GPIO_Init (GPIO_TypeDef 。. L. f* G! v- [# ?
*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括号里后面那个就是你问题里面声明的那个结构体。
' j/ d4 u; g5 V# R* s7 ]# U16、关于 STM32的IO口能不能像51的IO口那样直接控制Px口输出  r+ D- D0 B8 H3 D# j4 S
问:大家好,STM32的IO口能不能像51的IO口那样直接控制Px口输出?比如我要用51控制器段数码管,只要给Px口送十六进制数值就可以了?请问STM32可以吗?' ]$ y  Q. E6 S
答:可以的,举2个例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;这其中的GPIOx表示IO号的号码,BRR/BSRR表示相就IO口的控制寄存器,就按这个格式操作就行了。
. q6 H! i: @6 |9 R 17、关于stm32芯片IO端口配置
5 L7 O; Y7 X+ P' `9 [; A问:stm32芯片 IO端口配置为浮空输入时,能不能读取端口上的电平状态。
0 t/ H: B" \  ^答:STM32的输入状态寄存器GPIOx_IDR和输出状态寄存器和GPIOx_ODR的读取是不受端口配置影响的。 4 n: H% c3 I$ ?0 f5 x/ Z8 \) R
! s4 x- e4 S2 p# ?) l7 i- w
18、stm32 JTAG和普通IO复用问题2 o6 }2 q( G5 ?6 E, }- t  J
  _! E2 P( I0 V; n
问:stm32 JTAG和普通IO复用,当软件设置为普通IO时,还能用JTAG下载软件吗。" ]( p* y) e+ I' U5 o
答:能。因为在下载的时候,通过RESET时序进入了下载模式了。但是注意硬件的接法不要强制拉高拉低,也不要让其芯片的输出脚接过来。这样就会影响到jtag了。
4 }9 c0 V4 W. @5 a$ _+ _$ p  B3 C: v: s( \
收藏 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
好东西,谢谢了。
, {- j9 S4 _. J3 h3 V9 w3 [1 j
" K; ]8 i! S1 ~$ `期望继续汇总。。。
天使♀的☆宇★翼 回答时间: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* h* i' R: y7 k+ p1 ^- ~
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 手机版