你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4633|回复: 1

stm32控制PC卡问题!!!!

[复制链接]

1

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
2020-4-10
发表于 2010-9-29 12:03:58 | 显示全部楼层 |阅读模式
我使用的STM32F103ZCT6 芯片,PC卡使用的CAM(条件接收卡,8位PC卡兼容),硬件接线:
              FSMC                 PC 卡
              A0--A13            A0--A13
              D0--D7             D0--D7
              NEC4_1             CE1
              NIOIS16(接地)     --
              NREG                 NREG
              NIORD                NIORD
              NIOWR               NIOWR
              NOE                   NOE
              NWE                  NWE
              CD                     CD
软件:使用的固件库中提供的结构,初始化如下
        void PCCARD_IO_Init(void)                                             
{                                                                    
    GPIO_InitTypeDef GPIO_InitStructure; 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All&&(!GPIO_Pin_6);
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOD, &GPIO_InitStructure);                                                                   
 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//NWAIT
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//GPIO_Mode_IPU;                    
 GPIO_Init(GPIOD, &GPIO_InitStructure);     
       
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOE, &GPIO_InitStructure);                             
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All&&(!(GPIO_Pin_9|GPIO_Pin_11));
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOF, &GPIO_InitStructure);
 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//CD1
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOF, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//NIOS16
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;//GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOF, &GPIO_InitStructure);
       
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP;                    
 GPIO_Init(GPIOG, &GPIO_InitStructure);              
         
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12; //CD2#
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//;                    
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10|GPIO_Pin_9; //RDX1 TXD1
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//;                    
 GPIO_Init(GPIOA, &GPIO_InitStructure);
                             
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8; //OE1
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;//;                    
 GPIO_Init(GPIOA, &GPIO_InitStructure);                            
 /*OE2,OE3,OE4,OE5*/
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;//;                    
 GPIO_Init(GPIOC, &GPIO_InitStructure);  
 /*PRESET,CAM_PWR*/
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_15|GPIO_Pin_14;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;//;                    
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 /*I2C_SMBA1,RXD3/SDL,TXD3/SDA*/
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;//;                    
 GPIO_Init(GPIOB, &GPIO_InitStructure);    
      

void PCCARD_FSMCConfig(void)
{
 FSMC_PCCARDInitTypeDef FSMC_PCCARDInitStructure;
 FSMC_NAND_PCCARDTimingInitTypeDef p;
 p.FSMC_SetupTime = 3;
 p.FSMC_WaitSetupTime = 3;
 p.FSMC_HoldSetupTime = 3;
 p.FSMC_HiZSetupTime = 0;
 //FSMC_PCCARDInitStructure.FSMC_Bank = ;
 FSMC_PCCARDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Disable; //禁止等待
 FSMC_PCCARDInitStructure.FSMC_AddressLowMapping = FSMC_AddressLowMapping_Direct;//低地址直接映射
        //
        FSMC_PCCARDInitStructure.FSMC_PWID = FSMC_MemoryDataWidth_16b;//数据宽度16位,STM32只能16位访问
        FSMC_PCCARDInitStructure.FSMC_PTYP = FSMC_MemoryType_PCCARD;//卡类型为PCCARD
   
       FSMC_PCCARDInitStructure.FSMC_TCLRSetupTime = 0x0;
 FSMC_PCCARDInitStructure.FSMC_TARSetupTime = 0x0;
 FSMC_PCCARDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
 FSMC_PCCARDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;
 FSMC_PCCARDInitStructure.FSMC_IOSpaceTimingStruct = &p;
 FSMC_PCCARDInit(&FSMC_PCCARDInitStructure);
 FSMC_PCCARDCmd(ENABLE);
 }
2、我的测试程序如下:
#define PCCARD_reg_base   0x98000000 
#define PCCARD_io_base   0x9c000000
RCC_Configuration();
 NVIC_Configuration();
 
PCCARD_IO_Init();
PCCARD_FSMCConfig();
Delay(300);
 GPIO_SetBits(RESET_PORT, RESET);//对卡reset
 Delay(300);
 GPIO_ResetBits(RESET_PORT, RESET);
 
 *(u16*)(PCCARD_io_base ) = N;//这句可运行,但控制线,地址,数据线状态不对
  *(u16*)(PCCARD_reg_base ) = N;//此句运行后,程序就进入FaultISR中去了。
 N = *(u16*)(PCCARD_io_base );
 N = *(u16*)(PCCARD_reg_base );
请各位高手帮我看看,是什么原因?还有一事请教,PC卡的读写模式(IO模式(IOWR,IORD),属性模式(OE,WR),)是使用不同的地址,STM32就能产生不同的读写控制信号吗?
 
回复

使用道具 举报

3

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2019-5-27
发表于 2011-9-20 12:06:39 | 显示全部楼层

回复:stm32控制PC卡问题!!!!

我用NCE4_2控制PCCARD,也是遇到同样问题,NCE4_2,NWE,NOE都没有电平变化
#define Bank_PCCARD_ADDR     Bank4_PCCARD_ADDR 
#define Bank4_PCCARD_ADDR    ((uint32_t)0x90000000)

void PCCARD_Init(void)
{
  FSMC_PCCARDInitTypeDef FSMC_PCCADRInitStructure;
  FSMC_NAND_PCCARDTimingInitTypeDef p;
  p.FSMC_SetupTime = 3;
  p.FSMC_WaitSetupTime = 3;
  p.FSMC_HoldSetupTime = 3;
  p.FSMC_HiZSetupTime = 0;
  FSMC_PCCADRInitStructure;.FSMC_Waitfeature = FSMC_Waitfeature_Disable; //禁止等待
   
  FSMC_PCCADRInitStructure;.FSMC_TCLRSetupTime = 0x0;
  FSMC_PCCADRInitStructure;e.FSMC_TARSetupTime = 0x0;
  FSMC_PCCADRInitStructure;e.FSMC_CommonSpaceTimingStruct = &p;
  FSMC_PCCADRInitStructure;.FSMC_AttributeSpaceTimingStruct = &p;
  FSMC_PCCADRInitStructure;.FSMC_IOSpaceTimingStruct = &p;
  FSMC_PCCARDInit(&FSMC_CPLDInitStructure);
  FSMC_PCCARDCmd(ENABLE);
}


void PCCARD_WriteReg(uint16_t PCCARD_Reg, uint16_t PCCARD_RegValue)
{
  /* Write 16-bit Index, then Write Reg */
  *(__IO uint16_t *)(Bank4_PCCARD_ADDR)  = PCCARD_Reg;
  /* Write 16-bit Reg */
  *(__IO uint16_t *)(Bank4_PCCARD_ADDR) = PCCARD_RegValue;
}

在主程序中调用 PCCARD_WriteReg(0x0008,0x0000);之前已经做好管脚配置和时钟开启的工作了。

使用示波器监控NCE4_2和NWE的波形, 管脚配置和时钟开启后,NCE4_2和NWE都是高电平,这是正常的。但是执行PCCARD_WriteReg(0x08,0x0000)时,NCE4_2和NWE都没有电平变化,请问哪位大侠能指教是何原因呢?是否是
#define Bank4_PCCARD_ADDR    ((uint32_t)0x90000000) 的地址不正确?
谢谢!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版