打印
[STM32F1]

求助:STM32使用SPI1时,PA4无法做普通IO口使用吗?

[复制链接]
2859|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lg75|  楼主 | 2016-8-16 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lg75 于 2016-8-16 11:08 编辑

使用STM32 的PA4脚作为普通IO口来控制CS,但是发现只要执行了SPI_Cmd(SPI1, ENABLE),则后面PA4无法再拉低至V=0v,而是V=2.3v,通过示波器看到在进行读写操作时,通讯过程中PA4有变化,感觉应该是STM32在自动控制PA4。
请高手指教,多谢!多谢!

=====================================================
1. PCB没问题,因为不执行SPI_Cmd(SPI1, ENABLE)时,PA4作为普通IO操作完全正常。
2. 已经将SPI_InitStructure.SPI_NSS = SPI_NSS_Soft。
3.看到网上说要执行SPI_SSOutputCmd(SPI1, ENABLE),但是好像没用哦。
=====================================================


static void W25Q16_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef  SPI_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1, ENABLE);

        /*-----------------端口配置-------------------*/
        /* SPI1_SCK SPI1_MISO SPI1_MOSI*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* FLASH_CS */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

//在没有初始化SPI1时,PA4是可以正常当作普通IO来使用的。
GPIO_SetBits(GPIOA, GPIO_Pin_4);//可以拉高,V=3.3v
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //可以拉低,V=0v


        /*-----------------SPI配置--------------------*/
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
       SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI1, &SPI_InitStructure);

        /* SPI使能 */
        SPI_Cmd(SPI1, ENABLE); //执行过后,则后面PA4无法再拉低至V=0v  
         
//下面这两句无论执行哪一句,都没效果。
//SPI_SSOutputCmd(SPI1, ENABLE);
//SPI_SSOutputCmd(SPI1, DISABLE);

GPIO_SetBits(GPIOA, GPIO_Pin_4);//可以拉高,V=3.3v
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //无法拉低!!!!!! 只能到V=2.3v

}
沙发
玄德| | 2016-8-16 11:10 | 只看该作者

好熟悉的帖子。

使用特权

评论回复
板凳
sjw1716094642| | 2016-8-16 12:44 | 只看该作者
可以的

使用特权

评论回复
地板
lg75|  楼主 | 2016-8-16 14:44 | 只看该作者
唉,都说可以,实测是不行啊,不知道错在哪里,请指教,谢谢

使用特权

评论回复
5
Bermanrep| | 2016-8-16 16:21 | 只看该作者
我觉得是可以的,你看看你程序里这个IO设置的如何

使用特权

评论回复
6
shuiketu| | 2016-8-16 17:19 | 只看该作者
http://blog.csdn.net/chseangs/article/details/4520733
楼主可以参考一下这篇**里介绍的方法。

使用特权

评论回复
7
mmuuss586| | 2016-8-16 17:21 | 只看该作者
       /* FLASH_CS */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
这段程序,放在SPI初始化程序后面看看;  好像是F1的BUG,网上也有其它人反映;

使用特权

评论回复
8
lg75|  楼主 | 2016-8-16 21:10 | 只看该作者
mmuuss586 发表于 2016-8-16 17:21
/* FLASH_CS */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.G ...

试过了,也不行。

使用特权

评论回复
9
lg75|  楼主 | 2016-8-16 21:10 | 只看该作者
shuiketu 发表于 2016-8-16 17:19
http://blog.csdn.net/chseangs/article/details/4520733
楼主可以参考一下这篇**里介绍的方法。 ...

网上的几篇**都看过了,试了也不行。

使用特权

评论回复
10
lg75|  楼主 | 2016-8-17 15:45 | 只看该作者
没有人试过吗?

使用特权

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

本版积分规则

60

主题

205

帖子

2

粉丝