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

STM32F103ZET6的FSMC接口配置调试TFT LCD屏相关注意事项

[复制链接]
gaosmile 发布时间:2020-7-12 18:43
STM32F1系列单片机有多种外设,外设配置方式比较一致,一般是使能外设所在GPIO口时钟、使能外设的时钟,在禁止外设的情况下配置外设的时序以及中断和DMA等。大部分的外设配置相对简单,但是FSMC接口因为配置比较复杂,往往让一些初学者一头雾水。本文记录了本人在STM32F103ZET6的FSMC接口配置调试TFT LCD屏相关注意事项。
1   FSMC接口GPIO配置

  1. /** FSMC GPIOConfiguration
  2.   PF0  ------> FSMC_A0
  3.           ------> LCD_RS: 0: Reg,1:Data
  4.   PE7  ------> FSMC_D4
  5.   PE8  ------> FSMC_D5
  6.   PE9  ------> FSMC_D6
  7.   PE10  ------> FSMC_D7
  8.   PE11  ------> FSMC_D8
  9.   PE12  ------> FSMC_D9
  10.   PE13  ------> FSMC_D10
  11.   PE14  ------> FSMC_D11
  12.   PE15  ------> FSMC_D12
  13.   PD8  ------> FSMC_D13
  14.   PD9  ------> FSMC_D14
  15.   PD10  ------> FSMC_D15
  16.   PD14  ------> FSMC_D0
  17.   PD15  ------> FSMC_D1
  18.   PD0  ------> FSMC_D2
  19.   PD1  ------> FSMC_D3
  20.   PD4  ------> FSMC_NOE
  21.           ------> LCD_RD    Default:1,Value:0  
  22.   PD5  ------> FSMC_NWE
  23.            ------> LCD_WR  Default:1,Value:0
  24.   PG12  ------> FSMC_NE4
  25.              ------>LCD_CS  Default:1,Value:0
复制代码
微信图片_20200712184021.jpg
2 初始化FSMC时序

  1. /* FSMC initializationfunction */
  2.   FSMC_NORSRAM_TimingTypeDef Timing;
  3. SRAM_HandleTypeDef hsram1;

  4.   hsram1.Instance = FSMC_NORSRAM_DEVICE;
  5.   hsram1.Extended =FSMC_NORSRAM_EXTENDED_DEVICE;
  6.   /* hsram1.Init */
  7. hsram1.Init.NSBank = FSMC_NORSRAM_BANK4;
  8. hsram1.Init.DataAddressMux =FSMC_DATA_ADDRESS_MUX_DISABLE;
  9. hsram1.Init.MemoryType=FSMC_MEMORY_TYPE_NOR;
  10. hsram1.Init.MemoryDataWidth =FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  11. hsram1.Init.BurstAccessMode =FSMC_BURST_ACCESS_MODE_DISABLE;
  12. hsram1.Init.WaitSignalPolarity =FSMC_WAIT_SIGNAL_POLARITY_LOW;
  13. hsram1.Init.WrapMode =FSMC_WRAP_MODE_DISABLE;
  14. hsram1.Init.WaitSignalActive =FSMC_WAIT_TIMING_BEFORE_WS;
  15. hsram1.Init.WriteOperation =FSMC_WRITE_OPERATION_ENABLE;
  16. hsram1.Init.WaitSignal =FSMC_WAIT_SIGNAL_DISABLE;
  17. hsram1.Init.ExtendedMode =FSMC_EXTENDED_MODE_DISABLE;
  18. hsram1.Init.AsynchronousWait =FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  19. hsram1.Init.WriteBurst =FSMC_WRITE_BURST_DISABLE;
  20.   /* Timing */
  21. Timing.AddressSetupTime = 0x04;
  22. Timing.AddressHoldTime = 0x02;
  23. Timing.DataSetupTime = 0x08;
  24. Timing.BusTurnAroundDuration = 0x00;
  25. Timing.CLKDivision = 0x00;
  26. Timing.DataLatency = 0x00;
  27. Timing.AccessMode = FSMC_ACCESS_MODE_B;  后面数值决定读写屏快慢。
复制代码


    注意点:

1  因为STM32的地址是32bit的,数据是按照8bit组织的,如果lcd的数据选择8bit的话,地址A0就是正常的输出,如0x60000000输出A0=0;  0x6000 0001输出A0=1;对应数据是byte;如果lcd的数据选择16bit的话,地址A0就,如0x60000000输出A0=0;  而0x60000002对应A0=1;对应数据是word,也就是说每两个原来基于byte结构的地址对应一个地址线上实际的word长度的地址;

  1. #define Bank1_LCD_D   ((uint32_t)0x6C000002)    //DispData ADDR
  2. #define Bank1_LCD_C   ((uint32_t)0x6C000000)   //DispReg ADDR

  3. void LCD_WR_REG(uint16_t index)
  4. {       *(__IOuint16_t *) (Bank1_LCD_C) = index;}

  5. uint16_t  LCD_READ_DATA(void)
  6. {       uint16_ta = 0;
  7.         a=*(__IOuint16_t *) (Bank1_LCD_D); //L
  8.         return a;
  9. }
复制代码
2    Image2LCD软件转换时注意扫描方式和数据位宽度,以及高低为顺序。
微信图片_20200712184035.jpg
实际效果:
微信图片_20200712184039.jpg


收藏 1 评论1 发布时间:2020-7-12 18:43

举报

1个回答
goyhuan 回答时间:2020-7-13 14:02:46
“如果lcd的数据选择16bit的话,地址A0就,如0x60000000输出A0=0;  而0x60000002对应A0=1;对应数据是word”

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版