论坛首页 > 交流专区 > 技术交流 > 分享一个STM32F103VCT6通过FSMC...
查看:119  |  回复:0
分享一个STM32F103VCT6通过FSMC访问FPGA的操作
PeterPan
6
主题
19
回复
发表于Sun Sep 30 14:55:45 CST 2018   |  只看该作者 1# 电梯直达


STM32F103V系列带FSMC的必须是VCT6及以上的型号,低配的V8T6和VBT6型号不带,48脚C系列和64脚R系列也不带FSMC。
以STM32F103VCT6的FSMC对应的IO口如下:

数据总线(16根)
DB0  : PD14
DB1  : PD15
DB2  : PD0
DB3  : PD1
DB4  : PE7
DB5  : PE8
DB6  : PE9
DB7  : PE10
DB8  : PE11
DB9  : PE12
DB10 : PE13
DB11 : PE14
DB12 : PE15
DB13 : PD8
DB14 : PD9
DB15 : PD10

地址总线(8根)
AB16 : PD11
AB17 : PD12
AB18 : PD13
AB19 : PE3  (本程序中未用到)
AB20 : PE4  (本程序中未用到)
AB21 : PE5  (本程序中未用到)
AB22 : PE6  (本程序中未用到)
AB23 : PE2  (本程序中未用到)

控制线(3根)
WR   : PD5
RD   : PD4 
CS0  : PD7

在本程序中,地址线只用到了AB16~AB18三根,可表示2^3=8个地址。
数据总线是16位的,可同时读写2Byte的数据。

需要注意的是:

void FSMC_FPGA_WriteByte(u8 WriteAddr,u16 data)
{
*((unsigned short int*)(Bank1_SRAM1_ADDR + (WriteAddr << 17))) = data;
}

u16 FSMC_FPGA_ReadByte(u8 ReadAddr)
{
ReadAddr = ReadAddr+1; //这个很重要
return ( *((unsigned short int*)(Bank1_SRAM1_ADDR + (ReadAddr << 17))) );
}

因为是16位的数据总线,所以地址要右移16+1=17位。
当读取FPGA寄存器时,地址要+1,我也不知道为什么,求大神解答。



程序如下:STM32通过FSMC读取FPGA寄存器.rar 

 
回复 收藏
  举报
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部