01.02.2013, 11:18
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
stm32 + FSMC + ssd1963:?
Который день подряд пытаюсь решить проблему.
Задача: связать stm32f103zet через fsmc c ssd1963 (rfc57a1-fiw-d-000).
Распиновка следующая:
МК ЖКИ
FSMC_А0(PF.0) RS
NWE(PD.5 ) WE
NOE(PD.4) OE
FSMC_D0(PD.14) D0
FSMC_D1(PD.15) D1
FSMC_D2(PD.0) D2
FSMC_D3(PD.1) D3
FSMC_D4(PE.7) D4
FSMC_D5(PE.8 ) D5
FSMC_D6(PE.9) D6
FSMC_D7(PE.10) D7
NE4(PG.12) LCD_CS
PB.2 LCD_RST
PG.8 LCD_RD
PG.15 LCD_UD
Еще на шине FSMC висит is61LV51216-10T, но я ее пока не задействую. хочу проверить оживить индикатор и прочитать регистры с него(так как подсветки пока на него нет). Помогите разобраться, что не так в настройках FSMC?
Код:
|
#define LCD_REG (*((volatile unsigned short *) 0x6C000000))
#define LCD_RAM (*((volatile unsigned short *) 0x6C000001))
void InitTFTGPIO (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |RCC_APB2Periph_AFIO, ENABLE);
/* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
PD.10(D15), PD.14(D0), PD.15(D1) as alternate
function push pull */
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;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
PE.14(D11), PE.15(D12) as alternate function push pull */
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;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/* Set PF.00(A0 (RS)) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);
/*Reset pin config PB.2 (LCD_RST)*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//RESET_PIN; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_Init(GPIOB/*RESET_PORT*/, &GPIO_InitStructure);
}
/*..*/
void InitFSMC (void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
/*-- FSMC Configuration ------------------------------------------------------*/
/* FSMC_Bank1_NORSRAM4 timing configuration */
p.FSMC_AddressSetupTime = 10;
p.FSMC_AddressHoldTime = 1;
p.FSMC_DataSetupTime = 15;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_A;
/* FSMC_Bank1_NORSRAM4 configured as follows:
- Data/Address MUX = Disable
- Memory Type = SRAM
- Data Width = 8bit
- Write Operation = Enable
- Extended Mode = Disable
- Asynchronous Wait = Disable */
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
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_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStru ct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/*Enable FSMC_Bank1_NORSRAM4 */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}
/*================================================= =================*/
uint16_t LCD_ReadReg(uint8_t LCD_Reg)
{
/**
* @brief Reads the selected LCD Register.
* @param None
* @retval : LCD Register Value.
*/
/* Write 16-bit Index (then Read Reg) */
LCD_REG = LCD_Reg;
/* Read 16-bit Reg */
return (LCD_RAM);
}
/*================================================= =================*/
void LCD_WriteCommand(uint8_t cmd)
{
LCD_REG = cmd;
}
/*================================================= =================*/
void LCD_WriteData(uint8_t data)
{
LCD_RAM = data;
}
/*================================================= =================*/
void LCD_WriteCmd(uint8_t cmd, uint8_t data)
{
LCD_REG=cmd;
LCD_RAM=data;
}
void main(void)
{
InitTFTGPIO();
InitFSMC();
/*TFT initialization*/
InitSSD1963();
data=LCD_ReadReg(CMD_GET_ADDR_MODE);
} |
и вот на записи data=LCD_ReadReg(CMD_GET_ADDR_MODE); виснет контрллер. я не правильно читаю или неправильно настроен fsmc? Интуитивно думаю и то, и другое.
А если настраиваю так
Код:
Код:
|
#define LCD_REG (*((volatile unsigned short *) 0x6C000000))
#define LCD_RAM (*((volatile unsigned short *) 0x6C000002))
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; |
тогда у меня зависает котроллер и невозможно отладить программу, выскакивает сообщение "can't halt the core".
помогите рабобраться, что не так.
Последний раз редактировалось Batisto4ka; 01.02.2013 в 11:21.
|
|
|
|
01.02.2013, 11:34
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от Batisto4ka
|
PG.8 LCD_RD
PG.15 LCD_UD
|
Не совсем понятно что это.
У меня тоже этот контроллер подключен к FSMC.
FSMC_D0-D16 -›DB0-DB16
FSMC_NWE-›WR
FSMC_NOE-›RD
FSMC_NE1-›CS
FSMC_A16-›RS(D/C)
И все собственно.
|
|
|
|
01.02.2013, 11:57
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от realid
|
Не совсем понятно что это.
У меня тоже этот контроллер подключен к FSMC.
FSMC_D0-D16 -›DB0-DB16
FSMC_NWE-›WR
FSMC_NOE-›RD
FSMC_NE1-›CS
FSMC_A16-›RS(D/C)
И все собственно.
|
PG.8 LCD_RD
PG.15 LCD_UD
это линии дял ЖКИ scan direction.
у меня 8 битная шина данных для ссд1963.
Я думаю, что у меня что-то в настройках FSMC а именно адрессация, потому что зависает то контроллер не спроста.
Прикрепляю проект полностью.
Последний раз редактировалось Batisto4ka; 01.02.2013 в 12:05.
|
|
|
|
01.02.2013, 12:02
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
У меня настройка(мк STM32F407VG):
Код:
|
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupT ime = 10;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTi me = 10;
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 6;
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAround Duration = 1;
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 2;
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
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_ReadWriteTimingStru ct = &FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/*!‹ Enable FSMC Bank1_SRAM1 Bank */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
#define Bank1_SRAM1_COMM_ADDR ((uint32_t)0x60000000) //FSMC TFT command
#define Bank1_SRAM1_DATA_ADDR ((uint32_t)0x60020000) //FSMC TFT data address line FSMC_A16(RS)
#define WriteDataFSMC(x) *(uint16_t *) (Bank1_SRAM1_DATA_ADDR) = x
#define WriteCommandFSMC(x) *(uint16_t *) (Bank1_SRAM1_COMM_ADDR) = x |
|
|
|
|
01.02.2013, 12:26
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
в ваших настройках принципиальные отличия следующие
1. отличаются тайминги
2.у вас подключен к 1 банку, у меня к 4
3. у вас FSMC_MemoryType = FSMC_MemoryType_PSRAM у меня FSMC_MemoryType_SRAM
4. у вас FSMC_MemoryDataWidth_16b у меня 8 бит.
5. у вас FSMC_ExtendedMode = FSMC_ExtendedMode_Enable у меня Disable.
В связи с этим вопросы.
1. Тайминги для фсмк зависят тольк от контроллера ЖКИ и не зависят от микроконтроллера, котоый сним связывается (у меня stm32f103zet у вас STM32F407VG) ?
2. принципиально ли использование PSRAM или SRAM, как понять какой тип использовтаь, от чего это зависит?
3. если у меня 8 бит фсмк подключено к 8 битной шине жки, это влияет на адрессцию фсмк? правильная ли в таком случае настройка
запись команд (*((volatile unsigned short *) 0x6C000000))
запись данных (*((volatile unsigned short *) 0x6C000001))
если у меня А0 -RS и NE4-LCD_CS ?
4.ExtendedMode разрешен это принципиально сдесь?
|
|
|
|
01.02.2013, 13:05
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от Batisto4ka
|
4.ExtendedMode разрешен это принципиально сдесь?
|
Нет. Мне это понадобилось сделать чтобы подстроить тайминги, иначе глюки были, так как распаян экран на довольно длинном шлейфе.
Сообщение от Batisto4ka
|
1. Тайминги для фсмк зависят тольк от контроллера ЖКИ и не зависят от микроконтроллера, котоый сним связывается (у меня stm32f103zet у вас STM32F407VG) ?
|
Тайминги для fsmc зависят от тактовой и от настроек и конечно они должны соответствовать требованиям для контроллера жки.
Сообщение от Batisto4ka
|
2. принципиально ли использование PSRAM или SRAM, как понять какой тип использовтаь, от чего это зависит?
|
Если честно я так и не понял их отличия.
Сообщение от Batisto4ka
|
3. если у меня 8 бит фсмк подключено к 8 битной шине жки, это влияет на адрессцию фсмк? правильная ли в таком случае настройка
запись команд (*((volatile unsigned short *) 0x6C000000))
запись данных (*((volatile unsigned short *) 0x6C000001))
если у меня А0 -RS и NE4-LCD_CS ?
|
Ну по идее, да.
|
|
|
|
01.02.2013, 13:07
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
а вы поняли по даташиту,как считать тайминги?
можете обьяснить на пальцах?
|
|
|
|
01.02.2013, 13:11
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от Batisto4ka
|
а вы поняли по даташиту,как считать тайминги?
можете обьяснить на пальцах?
|
Так это же кол-во тактов HCLK.
|
|
|
|
01.02.2013, 15:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
Сообщение от Batisto4ka
|
а вы поняли по даташиту,как считать тайминги?
|
а может забыть на время эти тайминги, да забегу я за вами, выедем в парк, лес, на природу? день солнечный, потеплело, да бутерброды/чай/беседа (можно шашлыки/коньяк/кофе), а? соглашайтесь...
|
|
|
|
01.02.2013, 15:44
|
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32 + FSMC + ssd1963:?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:53.
|
|