打印

GD32F303的GPIO口配置为AF输入会导致电平改变,最终无法触发

[复制链接]
4483|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 liangzheng63 于 2018-11-8 15:43 编辑

我在使用TIMER和SPI的时候,需要将IO口配置为AF模式,即该IO口连向了TIMER外设或SPI外设。

  • 当使用TIMER的输入引脚TIMERx_ETI(TIMER的外部触发引脚)输入电平时,配置不同的GPIO口速度会导致TIMERx_ETI线上的电平发生不同变化,最后甚至无法正常触发TIMERx的事件。
  • 当我把SPI的配置为从模式,即SCK也为输入时,将SCK与TIMERxETI相连(即外部的信号来同时控制SCK与TIMERxETI),会导致线上的电平更低,最终无法使用。
  • 甚至在只配置IO口的情况下(即不初始化SPI和TIMER),该情况也是一模一样的

如图所示:原始信号(高电平为3.32V):


一、当GPIO口配置为50MHz
  • 外部信号只连接SCK或TIMERxETI(高电平为1.17V):
  • 外部信号同时连接SCK和TIMERxETI(高电平为0.54V):

二、当GPIO口配置为10MHz
  • 外部信号只连接SCK或TIMERxETI(高电平为2.35V):
  • 外部信号同时连接SCK和TIMERxETI(高电平为0.98V):

三、当GPIO口配置为2MHz
  • 外部信号只连接SCK或TIMERxETI(高电平为3.13V):
  • 外部信号同时连接SCK和TIMERxETI(高电平为2.92V):


测试芯片使用的是GD32F303CC,我感到很是奇怪,为什么AF电路会钳低输入电平呢,这将会导致在外部信号根本不能触发AF电路的电平改变,而在使用STM32F303的时候不会发生这种事情,这问题也真是比较刁难,找了好久才找到原来和AF电路配置的速率相关。

可从测试结果看出来,要想完成外部信号同时控制从机SCK,TIMERxETI的话,在10MHz下是无法完成的,只能在2MHz下来完成。那么,毕竟从机SCK、TIMERxETI都是AF输入接口,是否配置的频率会影响施密特触发的结果?


问题:
  • 修改AF速率,会拉低电平的原因是?
  • 10MHz的外部输入接于2MHz的AF输入配置下是否有风险?
  • 有更好的解决方案让电平不被接低,从而正常工作触发的吗?

希望GD的工程师能看到,或碰过这个问题的水友能提提建议
测试代码:
main.zip (767 Bytes)


沙发
labasi| | 2018-11-8 14:19 | 只看该作者
AF模式是什么模式呀

使用特权

评论回复
板凳
GONGO| | 2018-11-8 14:28 | 只看该作者
本帖最后由 GONGO 于 2018-11-8 15:05 编辑

修改一下,看一下 user manual 中的寄存器配置,
CTL0[1:0] = 改成 In input mode(Floating input / Input with pull-up / pull-down) 选一种,

MD0[1:0] = 必须是 00 ,代表输入,其他都是输出模式




你把模式配成了输出模式当然不行了!


使用特权

评论回复
地板
liangzheng63|  楼主 | 2018-11-8 14:48 | 只看该作者
GONGO 发表于 2018-11-8 14:28
修改一下,把模式改成 In input mode(Floating input / Input with pull-up / pull-down)看一下 user man ...

不是的,我配置的就是AFIO output,指的输入是指配置成该模式后与外设相连,外设将该引脚视为输入引脚,就像帖子里最后一个图的Alternate Function Input一样

使用特权

评论回复
5
liangzheng63|  楼主 | 2018-11-8 15:41 | 只看该作者
本帖最后由 liangzheng63 于 2018-11-8 17:13 编辑
GONGO 发表于 2018-11-8 14:28
修改一下,看一下 user manual 中的寄存器配置,
CTL0[1:0] = 改成 In input mode(Floating input / Inpu ...

问题解决了,谢谢 GONGO和王工!

看 GONGO 的画重点才发现了这个异处,GD32F303里是叫AFIO output 的,这个规则与GD32F103、STM32F103是相同的,即只有确定外设使用该IO口输出,才将其配置为Alternate function output mode,如果外设为输入时,则需配置为Input mode。

而STM32F303是这样描述的:

叫做Alternate function mode,只要是和外设要使用的IO口,配置为该Alternate function mode将IO交给外设管理,应该是当外设使用该IO口作为输入时,会在外设内部切断输出线路。

出现帖子里的原因就是我将STM32F303其配置成了Alternate function mode,将代码转到GD32F303上时,该寄存器位又对应了Alternate function output mode,导致输入信号与外设的输出线共线,才出现了上面这些滑稽的测试。

STM32F303寄存器异变的太多了,我没愣神,真是一字之差啊,还以为GD32F303可以像STM32F103向GD32F103替换一样,浪费了一天多时间找问题,算是给后来的人提个醒吧。

使用特权

评论回复
6
xiaoqizi| | 2018-11-8 16:24 | 只看该作者
感觉是不是寄存器的配置有问题呀

使用特权

评论回复
7
木木guainv| | 2018-11-8 16:26 | 只看该作者
有没有可能跟外部硬件连接也有关系啊

使用特权

评论回复
8
liangzheng63|  楼主 | 2018-11-8 17:18 | 只看该作者
xiaoqizi 发表于 2018-11-8 16:24
感觉是不是寄存器的配置有问题呀

恩,就是寄存器的问题,STM32的寄存器规则变得多,有些特别小的点就很难注意到差别,且GD32F303与STM32F303差别还是挺大的

使用特权

评论回复
9
smilingangel| | 2018-11-10 18:16 | 只看该作者
这个用示波器的来监控的就很一目了然了的

使用特权

评论回复
10
vibra2016| | 2018-11-25 10:44 | 只看该作者
配置不同的GPIO口速度会导致TIMERx_ETI线上的电平发生不同变化,最后甚至无法正常触发TIMERx的事件。

使用特权

评论回复
11
tomyoct| | 2018-11-30 21:56 | 只看该作者
那个10M的时候,向下的那个尖尖的波形是什么原因呢?

使用特权

评论回复
12
tomyoct| | 2018-11-30 21:56 | 只看该作者
labasi 发表于 2018-11-8 14:19
AF模式是什么模式呀

配置为特殊功能IO。

使用特权

评论回复
13
tomyoct| | 2018-11-30 21:57 | 只看该作者
vibra2016 发表于 2018-11-25 10:44
配置不同的GPIO口速度会导致TIMERx_ETI线上的电平发生不同变化,最后甚至无法正常触发TIMERx的事件。 ...

那是肯定的,我们实际运行的时候是不变的,固定为一个速度的。

使用特权

评论回复
14
johson4| | 2022-6-9 15:17 | 只看该作者
tomyoct 发表于 2018-11-30 21:56
那个10M的时候,向下的那个尖尖的波形是什么原因呢?

振铃

使用特权

评论回复
15
畅畅爱妈咪| | 2023-4-4 10:36 | 只看该作者

有什么办法可以消除这个振铃现象吗?

使用特权

评论回复
16
caoenq| | 2023-4-6 08:52 | 只看该作者
AFIO这里,GD的芯片与STM32的芯片有较大的区别。

使用特权

评论回复
17
我是代理有需要GD的吗交个朋友13242085214

使用特权

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

本版积分规则

3

主题

11

帖子

0

粉丝