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

[复制链接]
9203|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 | 显示全部楼层
 楼主| GilbertWu 发表于 2015-6-3 16:55 | 显示全部楼层
icecut 发表于 2015-6-3 15:54
你设置复用试试.应该是可以拆出来用的.

不行啊
我先使能的SPI,然后把MISO对应的引脚设AF_PP,输出了低电平,但是过了一会居然变成了高阻态了,这是神马情况!
mmuuss586 发表于 2015-6-3 18:59 | 显示全部楼层
不要配置为SPI引脚就可以了
icecut 发表于 2015-6-3 20:26 | 显示全部楼层
GilbertWu 发表于 2015-6-3 16:55
不行啊
我先使能的SPI,然后把MISO对应的引脚设AF_PP,输出了低电平,但是过了一会居然变成了高阻态了, ...

如果每一个引脚都能分别配置,就是可以拆.如果统一配置,那就拆不了.
实在不行就软件模拟 spi
戈卫东 发表于 2015-6-3 20:33 | 显示全部楼层
没有试过。
关注。
diweo 发表于 2015-6-3 20:53 | 显示全部楼层
本帖最后由 diweo 于 2015-6-3 20:55 编辑

配置SPI为单工通信模式试试看。
sinemn 发表于 2015-6-4 13:03 | 显示全部楼层
正在学32,学习大神们的经验
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那边是不是关输出了。
 楼主| 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使用,而不能再当做其他复用使用了??
 楼主| GilbertWu 发表于 2015-6-8 20:00 | 显示全部楼层
而且使能了SPI之后(SPI_Direction_1Line_Tx和主机模式),MISO这个引脚一直是高组态,就算配置成了GPIO_Mode_AF_PP,也还是高阻态。只有配置成非复用的,如GPIO_Mode_Out_PP,才能输出高电平会低电平
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
mark0668 发表于 2015-6-8 23:56 | 显示全部楼层
如果没有AF 设置的话是不行的,F1没有AF设置所以不行
 楼主| GilbertWu 发表于 2015-6-9 10:10 | 显示全部楼层
谢谢楼上几位,我最后还是自己用软件模拟了SPI了,这样就不用使能正真的SPI了,MISO这根线也能用在定时器输出上了
HORSE7812 发表于 2015-6-10 08:49 | 显示全部楼层
Cvdog 发表于 2016-5-14 16:09 | 显示全部楼层
it_yrj 发表于 2017-3-1 13:28 | 显示全部楼层
看来我对手册还是了解的不够多,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部