OpenEdv-开源电子网

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

STM32F429,用FMC和FSMC读写显存和FPGA

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
发表于 2024-12-13 11:25:39 | 显示全部楼层 |阅读模式
我想问下有没有人用STM32F429,用FMC读写显存(SDRAM BANK2区)操控LCD,又用FSMC读写外部FPGA(Bank1区),请问这样可行吗?不行的话,应该如何解决一个系统中既要读写显存操控LCD,又要读写FPGA?万分感谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3343

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8458
金钱
8458
注册时间
2020-5-11
在线时间
3899 小时
发表于 2024-12-13 20:50:20 | 显示全部楼层
专治疑难杂症
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2024-12-15 18:50:39 | 显示全部楼层
LcwSwust 发表于 2024-12-13 20:50
你得说说为啥不行

STM32F429 比较特殊,它有用 FMC 外设代替了 FSMC 外设的功能,所以它的库文件与其它型号
的芯片不一样,在添加外设文件时,stm32f4xx_fmc.c 和 stm32f4xx_fsmc.c 文件只能存在一个
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2024-12-15 18:51:08 | 显示全部楼层
STM32F429 比较特殊,它有用 FMC 外设代替了 FSMC 外设的功能,所以它的库文件与其它型号
的芯片不一样,在添加外设文件时,stm32f4xx_fmc.c 和 stm32f4xx_fsmc.c 文件只能存在一个。
不知道为什么会这样,能不能解决?
回复 支持 反对

使用道具 举报

12

主题

3343

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8458
金钱
8458
注册时间
2020-5-11
在线时间
3899 小时
发表于 2024-12-15 19:38:44 | 显示全部楼层
yefeng2022 发表于 2024-12-15 18:51
STM32F429 比较特殊,它有用 FMC 外设代替了 FSMC 外设的功能,所以它的库文件与其它型号
的芯片不一样, ...

哦,这么一说我也整不会了,你研究下时序看能否统一用FMC/FSMC中的一种。
专治疑难杂症
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-1-16
在线时间
4 小时
发表于 2024-12-16 12:07:58 | 显示全部楼层
读写FPGA用SPI不行吗?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2024-12-17 09:24:26 | 显示全部楼层
lazyduck 发表于 2024-12-16 12:07
读写FPGA用SPI不行吗?

用FSMC可以用DMA获取FPGA的数据
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2024-12-17 09:26:26 | 显示全部楼层
lazyduck 发表于 2024-12-16 12:07
读写FPGA用SPI不行吗?

SPI的话速度不够,嫌慢
回复 支持 反对

使用道具 举报

17

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2023-5-29
在线时间
125 小时
发表于 2024-12-17 17:18:24 | 显示全部楼层
可以啊,为什么不可以,F429只有FMC,哪有FSMC,片选使能相应的NEx就行了,我现在就在序偶FMC跟FPGA通信数据传输,已经做好了,同样用另一个bank来驱动SRAM,完全没影响啊
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2025-2-13 15:19:04 | 显示全部楼层
流川枫1 发表于 2024-12-17 17:18
可以啊,为什么不可以,F429只有FMC,哪有FSMC,片选使能相应的NEx就行了,我现在就在序偶FMC跟FPGA通信数 ...

你好,能不能把FMC的这部分配置操作发给我参考一下,我现在选择的是PD7作为FMC_NE1的片选,但是一直无法成功读写FPGA。

/* 使能 FMC 时钟 */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE);

GPIO初始化如下对应的FMC复用功能
/*-- SRAM GPIOs Configuration --------------------------------------------------*/
  /*
  +-------------------+------------------+-------------------+
  | PD14 <-> FMC_D0   | PF0  <-> FMC_A0  | PE0  <-> FMC_NBL0 |
  | PD15 <-> FMC_D1   | PF1  <-> FMC_A1  | PE1  <-> FMC_NBL1 |
  | PD0  <-> FMC_D2   | PF2  <-> FMC_A2  | PD4  <-> FMC_NOE  |
  | PD1  <-> FMC_D3   | PF3  <-> FMC_A3  | PD5  <-> FMC_NWE  |
  | PE7  <-> FMC_D4   | PF4  <-> FMC_A4  | PD7  <-> FMC_NE1  |
  | PE8  <-> FMC_D5   | PF5  <-> FMC_A5  |-------------------+
  | PE9  <-> FMC_D6   | PF12 <-> FMC_A6  |
  | PE10 <-> FMC_D7   | PF13 <-> FMC_A7  |
  | PE11 <-> FMC_D8   | PF14 <-> FMC_A8  |
  | PE12 <-> FMC_D9   | PF15 <-> FMC_A9  |
  | PE13 <-> FMC_D10  | PG0  <-> FMC_A10 |
  | PE14 <-> FMC_D11  | PG1  <-> FMC_A11 |
  | PE15 <-> FMC_D12  | PG2  <-> FMC_A12 |
  | PD8  <-> FMC_D13  | PG3  <-> FMC_A13 |
  | PD9  <-> FMC_D14  |
  | PD10 <-> FMC_D15  |

FMC结构体初始化
void FMC_FPGA_Config(void)
{
  FMC_NORSRAMInitTypeDef  FMC_NORSRAMInitStructure;
  FMC_NORSRAMTimingInitTypeDef  p;

  p.FMC_AddressSetupTime =  2;                                                                 
  p.FMC_AddressHoldTime = 1;       
  p.FMC_DataSetupTime = 5;       
  p.FMC_BusTurnAroundDuration = 1;       
  p.FMC_CLKDivision = 2;                       
  p.FMC_DataLatency = 2;                               
  p.FMC_AccessMode = FMC_AccessMode_A;

  FMC_NORSRAMInitStructure.FMC_Bank = FMC_Bank1_NORSRAM1;                                                          FMC_NORSRAMInitStructure.FMC_DataAddressMux = FMC_DataAddressMux_Disable;                     
  FMC_NORSRAMInitStructure.FMC_MemoryType = FMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;       
  FMC_NORSRAMInitStructure.FMC_MemoryDataWidth = FMC_NORSRAM_MemoryDataWidth_8b;               
  FMC_NORSRAMInitStructure.FMC_BurstAccessMode = FMC_BurstAccessMode_Disable;               
  FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low;                       
  FMC_NORSRAMInitStructure.FMC_AsynchronousWait=FMC_AsynchronousWait_Disable;     
  FMC_NORSRAMInitStructure.FMC_WrapMode = FMC_WrapMode_Disable;
  FMC_NORSRAMInitStructure.FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState;  
  FMC_NORSRAMInitStructure.FMC_WriteOperation = FMC_WriteOperation_Enable;               
  FMC_NORSRAMInitStructure.FMC_WaitSignal = FMC_WaitSignal_Disable;                       
  FMC_NORSRAMInitStructure.FMC_ExtendedMode = FMC_ExtendedMode_Disable;
  FMC_NORSRAMInitStructure.FMC_WriteBurst = FMC_WriteBurst_Disable;
  FMC_NORSRAMInitStructure.FMC_ReadWriteTimingStruct = &p;                        
  FMC_NORSRAMInitStructure.FMC_WriteTimingStruct = &p;         

   FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);

  /* Enable FSMC Bank1_SRAM Bank */
  FMC_NORSRAMCmd(FMC_Bank1_NORSRAM1, ENABLE);
}
FPGA的地址定义为
#define FPGA_BANK_ADDR_CMD                  ((uint32_t)0x63FFDFFF)      
#define FPGA_BANK_ADDR_DAT                   ((uint32_t)0x63FFCFFF)

然后就是写FPGA
void FPGA_WR_CMD(u8 index,u8 val)
{   
    *(__IO uint8_t *) (FPGA_BANK_ADDR_CMD) = index;
    *(__IO uint8_t *) (FPGA_BANK_ADDR_DAT) = val;
}


在main()中,直接对FPGA操作,比如:FPGA_WR_CMD(0x04,0xFD);

这样配置操作有什么问题吗?望不吝赐教!感谢!
回复 支持 反对

使用道具 举报

17

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2023-5-29
在线时间
125 小时
发表于 2025-2-14 08:36:09 | 显示全部楼层
yefeng2022 发表于 2025-2-13 15:19
你好,能不能把FMC的这部分配置操作发给我参考一下,我现在选择的是PD7作为FMC_NE1的片选,但是一直无法 ...

数据宽度16位,这个也没看到PB7   ------> FMC_NL
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-10-13
在线时间
2 小时
 楼主| 发表于 2025-2-14 11:12:30 | 显示全部楼层
流川枫1 发表于 2025-2-14 08:36
数据宽度16位,这个也没看到PB7   ------> FMC_NL

谢谢指导,我添加上去了:PB7   ------> FMC_NL;还是一样,不能成功读写FPGA。
回复 支持 反对

使用道具 举报

17

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2023-5-29
在线时间
125 小时
发表于 2025-2-14 11:18:29 | 显示全部楼层
yefeng2022 发表于 2025-2-14 11:12
谢谢指导,我添加上去了:PB7   ------> FMC_NL;还是一样,不能成功读写FPGA。

读写地址宏定义,地址偏移
回复 支持 反对

使用道具 举报

17

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
金钱
351
注册时间
2023-5-29
在线时间
125 小时
发表于 2025-2-14 11:20:18 | 显示全部楼层
把整个工程放出来,只放一个fsmc,FPGA的也看不到,谁知道你怎么改的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-22 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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