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

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 发布时间:2020-7-12 18:43

举报

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

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

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