OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22561|回复: 17

如何使用stm32的spi3端口?是不是把spi1端口的配置修改一下就行了,还要什么 重映射吗?

[复制链接]

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2011-11-3 10:43:49 | 显示全部楼层 |阅读模式
如何使用stm32的spi3端口?是不是把spi1端口的配置修改一下就行了,还要什么 重映射吗? 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-11-28
在线时间
6 小时
发表于 2016-4-8 15:07:21 | 显示全部楼层
SPI3的端口因为有JTAG端口存在,因此在使用时候需要禁用JTAG端口,打开复用AFIO时钟,然后禁用JTAG,保留SWD即可。
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
回复 支持 3 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-11-3 10:45:58 | 显示全部楼层
先做.
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-11-3 11:51:33 | 显示全部楼层
注意SPI1是在APB2的,SPI2是在APB1的,SPI3是在APB1的,所以初始化外设时钟时注意一下就可以,其他的只要把SPI1改成SP3就可以正常工作,还有硬件的SPI3对应的IO口,呵,我有做过SP1改成SPI2的
void  SPI2_Initaize(void)
{  
SPI_InitTypeDef   SPI_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

/* Configure SPI2 pins: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);


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_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);  
}

//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI2_ReadWriteByte(u8 TxData)
{
u8 retry=0;  
/* Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
{
retry++;
if(retry>200)return 0;
}   
/* Send byte through the SPI2 peripheral */
SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据
retry=0;
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); //检查指定的SPI标志位设置与否:接受缓存非空标志位
{
retry++;
if(retry>200)return 0;
}        
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据     
}
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-11-3 14:16:19 | 显示全部楼层
回复【3楼】suqingxiao:
---------------------------------
spi3你试过吗?spi2我是调通了,貌似修改一下用到spi3上不工作。不知道什么原因?
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-11-3 14:35:17 | 显示全部楼层
你的ST芯片有没有SPI3?
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-11-3 15:16:59 | 显示全部楼层
深回复【4楼】esteem:
---------------------------------

什么型号?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-11-3 17:19:35 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
F107VBT6
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
 楼主| 发表于 2011-11-3 17:27:07 | 显示全部楼层
回复【5楼】suqingxiao:
---------------------------------
我的芯片当然有spi3了,是F107VBT6
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2011-11-3 18:01:40 | 显示全部楼层
有就是可以用的.
你的不能用,要嘛就是软件上设计有问题,要嘛就是硬件连接有问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2013-11-12
在线时间
29 小时
发表于 2014-7-7 17:17:27 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,我用的zet6的,spi2调通了,但是照着改成spi1,就连输出都没有了是怎么回事啊
备注:时钟中初始化改成了APB2了的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2014-7-7 18:04:25 | 显示全部楼层
回复【10楼】jiushibuzhidao:
---------------------------------
我们例程就有SPI1的初始化代码哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-4-18
在线时间
5 小时
发表于 2016-1-22 11:06:35 | 显示全部楼层
正点原子 发表于 2014-7-7 18:04
回复【10楼】jiushibuzhidao:
---------------------------------
我们例程就有SPI1的初始化代码哦。

我最近也是遇到同样的这个问题,通过你给的那个SPI2程序的配置,修改成SPI3,不管怎么试就没有反应,发数据时监控数据寄存器是没有变化的。
找不到原因而在,求解答!
申明:所使用的STM32是带有SPI3功能的。
回复 支持 反对

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2015-4-12
在线时间
7 小时
发表于 2016-5-7 20:47:02 | 显示全部楼层
正点原子 发表于 2014-7-7 18:04
回复【10楼】jiushibuzhidao:
---------------------------------
我们例程就有SPI1的初始化代码哦。

请问原子哥,对SPI1初始化的程序是在哪个例程里面啊?
回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2012-7-26
在线时间
31 小时
发表于 2016-10-20 20:01:48 | 显示全部楼层
maximus811009 发表于 2016-4-8 15:07
SPI3的端口因为有JTAG端口存在,因此在使用时候需要禁用JTAG端口,打开复用AFIO时钟,然后禁用JTAG,保留SW ...

就是这个问题,解决了!
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-10-8
在线时间
13 小时
发表于 2016-10-25 22:53:28 | 显示全部楼层
maximus811009 发表于 2016-4-8 15:07
SPI3的端口因为有JTAG端口存在,因此在使用时候需要禁用JTAG端口,打开复用AFIO时钟,然后禁用JTAG,保留SW ...

正解,困扰我好长时间的问题终于解决了,十分感谢前辈,之前看过STM32的参考手册,上面说是SPI3和JTAG部分引脚是共用的,应该禁用JTAG,保留SWD,我当时错误的的理解为不要用JTAG方式下载,直接用SWD下载,或者用JTAG方式下完程序,把JTAG线拔了就可以了。但是没有想到需要在程序里面用函数来禁用。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2018-11-13
在线时间
31 小时
发表于 2018-11-13 10:58:33 | 显示全部楼层
我也遇到这个问题,但是F107和F103不同的就是107还需要将引脚重映射。
Alternate functionSPI3_REMAP = 0 SPI3_REMAP = 1
SPI3_NSS PA15PA4
SPI3_SCK PB3PC10
SPI3_MISOPB4PC11
SPI3_MOSIPB5PC12







void SPI3_Init(void)
{
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE );       
        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI3, ENABLE );
        GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
       
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //选择了串行时钟的稳态:时钟悬空高
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //数据捕获于第二个时钟沿
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;                //定义波特率预分频的值:波特率预分频值为256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式
        SPI_Init(SPI3, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
        SPI_Cmd(SPI3, ENABLE); //使能SPI外设
       
        SPI3_ReadWriteByte(0xff);//启动传输                 
}   


回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2022-2-7
在线时间
9 小时
发表于 2022-5-14 10:06:55 | 显示全部楼层
maximus811009 发表于 2016-4-8 15:07
SPI3的端口因为有JTAG端口存在,因此在使用时候需要禁用JTAG端口,打开复用AFIO时钟,然后禁用JTAG,保留SW ...

谢谢啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表