打印
[STM32F1]

STM32 使能SPI 没用到MISO,该引脚能用其他复用功能吗

[复制链接]
8059|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GilbertWu|  楼主 | 2015-6-3 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数使能了SPI,没有用到MISO口,画板的时候没注意,将MISO这个引脚连接到需要输出PWM的接口去了,该引脚除了MISO还有T3C1的复用功能。本来想用TIM3这个C1通道输出PWM信号的,结果实际启动了TIM3后完全没有PWM信号。因为接线已经固定,有没有办**常使用这个引脚的T3复用功能呀?:'(
沙发
jar1866| | 2015-6-3 15:31 | 只看该作者
MISO在SPI模式是输入模式的IO口,你改成AFPP复用模式即可给到PWM做输出

使用特权

评论回复
板凳
icecut| | 2015-6-3 15:54 | 只看该作者
你设置复用试试.应该是可以拆出来用的.

使用特权

评论回复
地板
PIGYONG801| | 2015-6-3 16:52 | 只看该作者
可以

使用特权

评论回复
5
GilbertWu|  楼主 | 2015-6-3 16:55 | 只看该作者
icecut 发表于 2015-6-3 15:54
你设置复用试试.应该是可以拆出来用的.

不行啊
我先使能的SPI,然后把MISO对应的引脚设AF_PP,输出了低电平,但是过了一会居然变成了高阻态了,这是神马情况!

使用特权

评论回复
6
mmuuss586| | 2015-6-3 18:59 | 只看该作者
不要配置为SPI引脚就可以了

使用特权

评论回复
7
icecut| | 2015-6-3 20:26 | 只看该作者
GilbertWu 发表于 2015-6-3 16:55
不行啊
我先使能的SPI,然后把MISO对应的引脚设AF_PP,输出了低电平,但是过了一会居然变成了高阻态了, ...

如果每一个引脚都能分别配置,就是可以拆.如果统一配置,那就拆不了.
实在不行就软件模拟 spi

使用特权

评论回复
8
戈卫东| | 2015-6-3 20:33 | 只看该作者
没有试过。
关注。

使用特权

评论回复
9
diweo| | 2015-6-3 20:53 | 只看该作者
本帖最后由 diweo 于 2015-6-3 20:55 编辑

配置SPI为单工通信模式试试看。

使用特权

评论回复
10
sinemn| | 2015-6-4 13:03 | 只看该作者
正在学32,学习大神们的经验

使用特权

评论回复
11
wowow| | 2015-6-4 13:24 | 只看该作者
是可以的,见F1的手册:25.3.4       Configuring the SPI for half-duplex communication。

F1的管脚显如果设成AF_PP,那个管脚上的所有外设都接通,哪个外设使能了那个用。如果两个外设使能了,只要不同时输出也不要紧。例如你这个脚同时使能了SPI的MISO和TIM3_CH1,但SPI的是输入脚,只要忽略收到的数据就行了。
F4的管脚可以设设置切换到哪个外设,更没有问题。
关于你说的变成高阻态,查查TIM3那边是不是关输出了。

使用特权

评论回复
12
GilbertWu|  楼主 | 2015-6-8 19:34 | 只看该作者
wowow 发表于 2015-6-4 13:24
是可以的,见F1的手册:25.3.4       Configuring the SPI for half-duplex communication。

F1的管脚显如 ...

用的是STM32F103C8,实测了真的不行,配置了SPI_Direction_1Line_Tx和主机模式,但是只要一使能SPI,T3C1就无法输出PWM信号。看是不是只能在使用TIM3的时候先把SPI关了才行。
官方使用文件上有一段:
注意: 当SPI_CR1寄存器中的RXONLY位为’0’时,SPI可以工作于只发送模式,接收脚(主设备的MISO,或者从设备的MOSI)可以当作通用IO口使用。因此读数据寄存器时,读不到接收的值。
是不是意味着只能当做普通IO使用,而不能再当做其他复用使用了??

使用特权

评论回复
13
GilbertWu|  楼主 | 2015-6-8 20:00 | 只看该作者
而且使能了SPI之后(SPI_Direction_1Line_Tx和主机模式),MISO这个引脚一直是高组态,就算配置成了GPIO_Mode_AF_PP,也还是高阻态。只有配置成非复用的,如GPIO_Mode_Out_PP,才能输出高电平会低电平

使用特权

评论回复
14
ludl| | 2015-6-8 21:12 | 只看该作者
我之前也在为类似的问题烦心
后来基本搞清楚了
F1系列的MCU某个外设使能后对应的所有引脚除非不用AF,只要设定了AF输出,就都会被这个外设占用
如果有两个外设同时会用到这个引脚,那么会出现冲突
出现冲突时,某些设置的情况下,其中一个(或许也可能多个)仍能正常使用这个引脚

比如我之前有用一个PWM输出,但另一个反相引脚没注意,接到了SPI,基本和你的一样
可以试试TIM的设置参数,比如这几个:
  sConfigOC.OCMode = TIM_OCMODE_PWM2;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
在某些组合下满足PWM要求,又能使用SPI
原因估计是某个组合正好能够避开引脚冲突

另外,F1以外的MCU就不会出这个问题,可以单个引脚remap

使用特权

评论回复
15
mark0668| | 2015-6-8 23:56 | 只看该作者
如果没有AF 设置的话是不行的,F1没有AF设置所以不行

使用特权

评论回复
16
GilbertWu|  楼主 | 2015-6-9 10:10 | 只看该作者
谢谢楼上几位,我最后还是自己用软件模拟了SPI了,这样就不用使能正真的SPI了,MISO这根线也能用在定时器输出上了

使用特权

评论回复
17
HORSE7812| | 2015-6-10 08:49 | 只看该作者
mark

使用特权

评论回复
18
Cvdog| | 2016-5-14 16:09 | 只看该作者
mark

使用特权

评论回复
19
it_yrj| | 2017-3-1 13:28 | 只看该作者
看来我对手册还是了解的不够多,学习了

使用特权

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

本版积分规则

6

主题

28

帖子

1

粉丝