OpenEdv-开源电子网

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

回馈帖--STM32F4的SPI双机通信成功

[复制链接]

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
发表于 2013-9-10 10:40:26 | 显示全部楼层 |阅读模式
    


图1
STM32F4的外设例程库里的SPI双机通信写的较复杂,理解起来费劲。
今天早上终于把SPI的双机通信验证通过了,MARK一下。


图2
头文件里宏定义

图3
疑惑解答一:
SPI1的引脚映射可以是不是在不同组的两个SPI1映射吗,如一个A口,一个B口吗?
答: 可以,只需打开引脚复用功能就可,无需其他设置。

疑惑解答二:
SPI1的PB3,PB4是JTAG引脚,可以当作正常的IO口吗?
答: 不可以,需禁用JTAG引脚功能,详细见STM32F4参考手册的6.3.2章节,可以配置成JTAG-DP Disabled and SW-DP Enabled。

  连线见图1,从机通信的程序见图2和图3,采用的SPI1,主机的SPI配置类似,只是把从机模式改成主机模式就行。
  下一步接着调SPI的DMA的配置。









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

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-9-16 13:57:07 | 显示全部楼层
如果从机是DSP其他的MCU,那时钟需要配置吗?
而且STM32只有8个预分频值可选.
回复 支持 0 反对 1

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-9-10 21:27:42 | 显示全部楼层
不错,恭喜啊
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

19

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2011-3-23
在线时间
5 小时
发表于 2013-9-15 18:00:31 | 显示全部楼层
回复【楼主位】yongyooh:
---------------------------------
我现在用STM32F4 SPI+DMA不成功!! 请指教
但是我单独用SPI发送是没有问题的,想你赐教下
 DMA_DeInit(DMA1_Stream7);
   /* DMA1 Stream6 channe4 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;  //DMA1 拥有1~7,DMA2拥有1~5;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SPI3->DR;//外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&aTxBuffer;//内存地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//DMA传输方向 内存到外设
  DMA_InitStructure.DMA_BufferSize =3;//设置DMA在传输时缓存区的长度
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//设置DMA的外设递增模式,一个外设1
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//设置DMA的内存递增模式1
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据长度 长8bit
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//内存数据字长  8bit
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//设置DMA的传输模式:连续不断的循环模式 这里使用正常模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA优先级别最高,一共有四种
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //不能内存到内存传输   2    
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;//2
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA1_Stream7, &DMA_InitStructure);
 /* Enable DMA SPI TX Stream */
  DMA_Cmd(DMA1_Stream7,ENABLE);
  DMA_Cmd(DMA1_Stream7,ENABLE);

  /* Enable DMA SPI RX Stream */
//  DMA_Cmd(DMA1_Stream0,ENABLE);

  /* Enable SPI DMA TX Requsts */
  SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE);

  /* Enable SPI DMA RX Requsts */
 // SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Rx, ENABLE);
  /* Enable the SPI peripheral */
  SPI_Cmd(SPI3, ENABLE); 
  DMA_ITConfig(DMA1_Stream7,DMA_IT_TC,ENABLE);//打开中断传输完成中断
//配置中断优先级
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
回复 支持 反对

使用道具 举报

0

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2013-8-25
在线时间
12 小时
发表于 2013-9-15 18:39:19 | 显示全部楼层
mark党
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-15 22:08:26 | 显示全部楼层
回复【3楼】苹果:
---------------------------------
  看了你的DMA配置,没啥问题, 除了FIFO那个使能外。你定义的TxBuffer数组呢?用示波器看输出呀!参考我的另一个帖子!
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-16 11:30:24 | 显示全部楼层
回复【5楼】keyway:
---------------------------------
  持续跟踪我的动态,实际的例子去官网下载!
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-16 11:30:52 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
   谢谢版主,请多多关照!
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-9-16 13:47:52 | 显示全部楼层
你好,请问SPI作从机需要设置预分频值吗?
从机不是没有时钟,由主机提供的吗?
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-9-16 13:53:18 | 显示全部楼层
回复【9楼】lansing1648:
---------------------------------
    从机跟主机设置一样,只是主从改一下就行。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-10-16
在线时间
0 小时
发表于 2014-2-19 15:37:13 | 显示全部楼层
楼主: G15 是不是应该是PA15 G6干啥用的?
回复 支持 反对

使用道具 举报

41

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2014-2-20 08:13:45 | 显示全部楼层
回复【12楼】jade_yw:
--------------------------------
后面两个引脚初始化不要看,没什么具体意义。SPI1的引脚定义已经在宏定义里定义了,上面截图没有截图,请参照参考手册。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2012-10-16
在线时间
0 小时
发表于 2014-3-28 09:52:48 | 显示全部楼层
回复【13楼】yongyooh:
---------------------------------
嗯,好的
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2013-7-16
在线时间
71 小时
发表于 2015-5-11 10:02:44 | 显示全部楼层
回复【3楼】苹果:
---------------------------------
请问楼主的F407 SPI双机DMA通信出来了吗?
回复 支持 反对

使用道具 举报

32

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2015-11-19
在线时间
38 小时
发表于 2016-3-28 23:24:50 | 显示全部楼层
你好,能够分享一下你的代码吗?
回复 支持 反对

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-4
在线时间
15 小时
发表于 2016-7-2 10:54:58 | 显示全部楼层
楼主,可否给个例程
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2015-12-26
在线时间
29 小时
发表于 2016-11-29 14:25:14 | 显示全部楼层
不错  最近也在搞spi双机通讯
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-1-9
在线时间
13 小时
发表于 2017-3-23 14:37:22 | 显示全部楼层
楼主可否分享个例程
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
636
金钱
636
注册时间
2017-3-17
在线时间
42 小时
发表于 2017-3-23 15:40:55 | 显示全部楼层
恭喜恭喜
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 09:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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