打印

关于IO用作复用功能时的时钟设置注意要点

[复制链接]
12338|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ST_ARM|  楼主 | 2008-7-15 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近来碰到很多客户在使用STM32的外设时,由于IO口被用作复用功能,但是外设的初始化正确,GPIO口初始化正确,外设的时钟也已开启,但是外设无法正常运行。
其中最关键的一项,大多数使用者多没有设置,就是某个IO口被用作外设的接口时,需要开启IO口的复用功能的时钟,即进行外设、IO的时钟使能时,需要如下代码

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_AFIO, ENABLE);    /* GPIOx and AFIO clock enable */
x --- 为对应的GPIO口,如:A、B、C、D、E。

希望用户在使用时,注意该要点!
沙发
utopia779| | 2008-7-26 20:47 | 只看该作者

学习了!

学习了!

使用特权

评论回复
板凳
lianshumou| | 2008-7-28 10:42 | 只看该作者

还好我一看寄存器里有个AFIO的时钟使能

就知不使能它肯定不好使,要不然出了问题可真是很难找啊!

使用特权

评论回复
地板
ijk| | 2008-7-28 11:57 | 只看该作者

AFIO的时钟使能

  AFIO的时钟使能,什么时候是必须的,什么时候不需要?
  有人说,在使用串口时,没有使能AFIO的时钟,串口也能正常工作。

使用特权

评论回复
5
hawk05| | 2008-7-28 12:50 | 只看该作者

太及时了

多谢了,我说怎么不好用那!如果AFIO时钟不设置,软件仿真没问题,硬件仿真就不行了,一直找不到原因,这回明白了,多谢了!

使用特权

评论回复
6
Forever.c| | 2008-8-6 14:31 | 只看该作者

haha!就是它了

以前吃过亏!!

使用特权

评论回复
7
harlemjia| | 2008-8-27 18:07 | 只看该作者

我串口,定时器,AD不设他也照常工作啊 ?

谁能解释一下?

使用特权

评论回复
8
violet520| | 2008-8-28 09:21 | 只看该作者

版主来解释一下

急需版主来解释一下

使用特权

评论回复
9
香水城| | 2008-8-28 10:37 | 只看该作者

关于GPIO端口复用功能的使用

需要使能AFIO时钟的基本原则是:使用到技术参考手册(RM0008)第7.3节介绍的功能所涉及的管脚时,应使能AFIO时钟。但具体哪些情况一定要开启AFIO时钟,手册上确实讲的不清楚,我正在与总部的工程师沟通,试图搞清楚这个问题。

目前最好的办法就是:只要使用IO管脚的复用功能时,始终开启AFIO时钟!

使用特权

评论回复
10
harlemjia| | 2008-8-28 10:38 | 只看该作者

看来版主也不是很清楚这块内容

使用特权

评论回复
11
香水城| | 2008-8-28 10:51 | 只看该作者

搞清楚固然重要,但更重要的是实用

我注重的是解决实际问题,在此基础上才是明白背后的原理,如果原理一时搞不清楚,只要不影响应用,就只好先缓一缓。

我在9楼已经说过,我正在与总部的工程师沟通,等有了结果再回来向大家汇报。

使用特权

评论回复
12
harlemjia| | 2008-8-28 14:42 | 只看该作者

呵呵

感谢热心的版主

使用特权

评论回复
13
lut1lut| | 2008-8-28 15:21 | 只看该作者

同问:我也觉得只有使用到了remap以及

外部中断,还有很少人用到的Cortex-M3的SEV指令时才需要打开AFIO时钟

使用特权

评论回复
14
luckyjjjjj| | 2008-8-28 23:06 | 只看该作者

超过一个复用功能怎么选择

翻遍手册没找到说明,

使用特权

评论回复
15
luckyjjjjj| | 2008-8-28 23:36 | 只看该作者

看ST的库

在那个conf.h里开启外设,打开同一个端口上所有复用的外设,并且都初始化(初始化外设,初始化GPIO,开启外设的时钟,开启IO口复用功能的时钟),会有什么后果,总线fault?
芯片设计时为什么不考虑用多路开关,用户可以通过寄存器配置

使用特权

评论回复
16
violet520| | 2008-8-29 13:57 | 只看该作者

没交代明白

需要权威来解释一下

使用特权

评论回复
17
香水城| | 2008-8-29 14:22 | 只看该作者

任何时候一个管脚只可能有一种功能

实际应用中不可能有一个管脚有超过一个复用功能的情况,所以14、15楼的问题没有意义。

如果你不幸作了15楼说的事情,我很难说清楚有什么后果,至少芯片本身不会损坏,但如果你的外围电路因此误动作造成芯片损坏,只有设计这个电路的人才能知道了。

使用特权

评论回复
18
luckyjjjjj| | 2008-8-29 14:36 | 只看该作者

我想问的是在多个复用功能间选择的问题

按照你们的库,初始化外设和IO,开启时钟,开启外设就可以用了。多个复用功能间选择一个,禁止另外的没有说明,翻遍你们的手册也没找到说明。

使用特权

评论回复
19
香水城| | 2008-8-29 14:43 | 只看该作者

哈哈,常识性的问题

如果你能够理解“任何时候一个管脚只可能有一种功能”是一个基本原则,是一个常识性的基础,“只能选择管脚的多个复用功能中的一个,禁止其他复用功能”也就是一个基本常识了,这种常识性的东西好像不必在手册里明确说明吧。

打个比方,芯片需要加电才能工作,但手册里并没有明确说明这一点,因为没有必要。

使用特权

评论回复
20
luckyjjjjj| | 2008-8-29 15:29 | 只看该作者

可能我意思没表达清楚

我想问的是怎样选择其中一个功能 ,你们的库是这样用的,初始化外设和IO,开启时钟,把外设映射到APB总线上,这就代表这个外设被激活了,你们的手册没找到相关说明。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

844

帖子

1

粉丝