打印

有没有大什佬知道STM32的FSMC模式A下有没有用到FSMC_NADV(PB7)

[复制链接]
878|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有没有大什佬知道STM32的FSMC模式A下有没有用到FSMC_NADV(PB7)
因为我用FSMC模式A的同时用了TIM4的通道2(PB7)来输出PWM波,结果发现CH1,CH3,CH4都能正常输出,就是CH2(PB7)不能输出

下面的是我配置的FSMC程序,液晶屏能正常使用,但PB7就是不能输出PWM波

tatic void ILI9325_FSMC_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
    FSMC_NORSRAMTimingInitTypeDef  writeTiming;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);            //使能FSMC时钟
    RCC_APB2PeriphClockCmd(ILI9325_BK_CLK|ILI9325_CS_CLK|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|ILI9325_CS_CLK|RCC_APB2Periph_AFIO,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟

     GPIO_InitStructure.GPIO_Pin = ILI9325_BK_PIN;                             //PB0 推挽输出 背光
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           //推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(ILI9325_BK_PORT, &GPIO_InitStructure);
   
    //PG0为FSMC_A10
    GPIO_InitStructure.GPIO_Pin = ILI9325_DC_PIN;     
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;            //复用推挽输出   
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(ILI9325_DC_PORT, &GPIO_InitStructure);
  //PG12为FSMC_NE4
  GPIO_InitStructure.GPIO_Pin = ILI9325_CS_PIN;     
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(ILI9325_CS_PORT, &GPIO_InitStructure);
   
     //PORTD复用推挽输出  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;                 //    //PORTD复用推挽输出  
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //复用推挽输出   
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOD, &GPIO_InitStructure);
      
    //PORTE复用推挽输出  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;                 //    //PORTD复用推挽输出  
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //复用推挽输出   
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOE, &GPIO_InitStructure);

    readWriteTiming.FSMC_AddressSetupTime = 0x01;                      //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
  readWriteTiming.FSMC_AddressHoldTime = 0x00;                    //地址保持时间(ADDHLD)模式A未用到   
  readWriteTiming.FSMC_DataSetupTime = 0x0f;                          // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
  readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  readWriteTiming.FSMC_CLKDivision = 0x00;
  readWriteTiming.FSMC_DataLatency = 0x00;
  readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;     //模式A
   

    writeTiming.FSMC_AddressSetupTime = 0x00;                              //地址建立时间(ADDSET)为1个HCLK  
  writeTiming.FSMC_AddressHoldTime = 0x00;                              //地址保持时间(A        
  writeTiming.FSMC_DataSetupTime = 0x03;                                  //数据保存时间为4个HCLK   
  writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  writeTiming.FSMC_CLKDivision = 0x00;
  writeTiming.FSMC_DataLatency = 0x00;
  writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;              //模式A


  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAMx;                                                    //这里我们使用NE4 ,也就对应BTCR[6],[7]。
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;                 // 不复用数据地址
  FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;                                        // FSMC_MemoryType_SRAM;  //SRAM   
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;                    //存储器数据宽度为16bit   
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;                // FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;                    //  存储器写使能
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;                         // 读写使用不同的时序
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;                         //读写时序
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;                                      //写时序

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);                                                                           //初始化FSMC配置

  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);                                                                              // 使能BANK1
}

使用特权

评论回复

相关帖子

沙发
onceamonth| | 2020-8-6 17:26 | 只看该作者
2.9.9 FSMC with I2C1 and TIM4_CH2
Description
When the FSMC is being used, the NADV signal is set to 1 by default when the alternate
function output is selected for this pin. TIM4_CH2 and the I2C1 SDA signal are in conflict
with the NADV signal.
Workaround
Do not use TIM4_CH2 as an output when the FSMC is being used.
Concerning I2C1, it is possible to use the remap functionality available on the PB8 and PB9
pins. Otherwise, disable the FSMC clock through the "RCC_AHBENR" register prior using
the I2C1.  勘误手册上有写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

376

主题

377

帖子

0

粉丝