Перейти к содержанию

Leo

Members
  • Постов

    140
  • Зарегистрирован

  • Посещение

Информация

  • Пол
    Мужчина
  • Город
    москва

Электроника

  • Стаж в электронике
    1-2 года

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения Leo

Исследователь

Исследователь (4/14)

  • 10 лет  на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме
  • 10 постов на форуме

Последние значки

-3

Репутация

  1. Взял проект из куба добавил запись массива emcpy((uint32_t *) SDRAM_ADD, wdata, 5); но записи не происходит. Может кто-нибудь проверить на своей плате пишет программа в память или я написал что-то не так? CubProba1.7z
  2. AVI-crak Home Я взял документацию по плате и оттуда взял контакты подключения 10 раз перепроверил . Костыль смотрится красиво но для начала проще моя портянка в начале пути. Хотя когда во всём разберусь я к ней вернусь для упрощение настроек. Вы думаете я ошибся в контактах или настройке FMC. Alex Я заметил что SDRAM у вас прописан в stm32f4_flash.ld у меня этого нет может это повлиять на работу.
  3. Alex он скомпилировался но при запуске связь с платой пропала! Я через reset восстановил связь но не понял почему так произошло а заклинило конкретно. AVI-crak Home да пример этот но я его не первый раз встречаю и все утверждают что он рабочий. А плата у меня stm32f429i-disc1 камень stm32f429ZIT6U память IS42S16400J-7TL. Я писал так . Вы хотите чтоб я в кубе проект настроил? RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; /**************************************PD***************************************/ //** PD0 GPIOD->MODER |= GPIO_MODER_MODER0_1;// GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOD->AFR[0] |= (12); //** PD1 GPIOD->MODER |= GPIO_MODER_MODER1_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR1; GPIOD->AFR[0] |= (12<<4); //** PD8 GPIOD->MODER |= GPIO_MODER_MODER8_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR8; GPIOD->AFR[1] |= (12); //** PD9 GPIOD->MODER |= GPIO_MODER_MODER9_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR9; GPIOD->AFR[1] |= (12<<4); //** PD10 GPIOD->MODER |= GPIO_MODER_MODER10_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR10; GPIOD->AFR[1] |= (12<<4*2); //** PD14 GPIOD->MODER |= GPIO_MODER_MODER14_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR14; GPIOD->AFR[1] |= (12<<4*6); //** PD15 GPIOD->MODER |= GPIO_MODER_MODER15_1; GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15; GPIOD->PUPDR &= ~GPIO_PUPDR_PUPDR15; GPIOD->AFR[1] |= (12<<4*7); /***********************************PE******************************************/ //** PE0 (NBL0) GPIOE->MODER |= GPIO_MODER_MODER0_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOE->AFR[0] |= (12); //** PE1 (NBL1) GPIOE->MODER |= GPIO_MODER_MODER1_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR1; GPIOE->AFR[0] |= (12<<4); //** PE7 GPIOE->MODER |= GPIO_MODER_MODER7_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR7; GPIOE->AFR[0] |= (12<<4*7); //** PE8 GPIOE->MODER |= GPIO_MODER_MODER8_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR8; GPIOE->AFR[1] |= (12); //** PE9 GPIOE->MODER |= GPIO_MODER_MODER9_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR9; GPIOE->AFR[1] |= (12<<4); //** PE10 GPIOE->MODER |= GPIO_MODER_MODER10_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR10; GPIOE->AFR[1] |= (12<<4*2); //** PE11 GPIOE->MODER |= GPIO_MODER_MODER11_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR11; GPIOE->AFR[1] |= (12<<4*3); //** PE12 GPIOE->MODER |= GPIO_MODER_MODER12_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR12; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR12; GPIOE->AFR[1] |= (12<<4*4); //** PE13 GPIOE->MODER |= GPIO_MODER_MODER13_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR13; GPIOE->AFR[1] |= (12<<4*5); //** PE14 GPIOE->MODER |= GPIO_MODER_MODER14_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR14; GPIOE->AFR[1] |= (12<<4*6); //** PE15 GPIOE->MODER |= GPIO_MODER_MODER15_1; GPIOE->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15; GPIOE->PUPDR &= ~GPIO_PUPDR_PUPDR15; GPIOE->AFR[1] |= (12<<4*7); /********************************PF******************************************/ //** PF0 GPIOF->MODER |= GPIO_MODER_MODER0_1;// GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOF->AFR[0] |= (12); //** PF1 GPIOF->MODER |= GPIO_MODER_MODER1_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR1; GPIOF->AFR[0] |= (12<<4); //** PF2 GPIOF->MODER |= GPIO_MODER_MODER2_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR2; GPIOF->AFR[0] |= (0x12<<4*2); //** PF3 GPIOF->MODER |= GPIO_MODER_MODER3_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR3; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR3; GPIOF->AFR[0] |= (12<<4*3); //** PF4 GPIOF->MODER |= GPIO_MODER_MODER4_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR4; GPIOF->AFR[0] |= (12<<4*4); //** PF5 GPIOF->MODER |= GPIO_MODER_MODER5_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR5; GPIOF->AFR[0] |= (12<<4*5); //** PF11 (SDNRAS) GPIOF->MODER |= GPIO_MODER_MODER11_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR11; GPIOF->AFR[1] |= (12<<4*3); //** PF12 GPIOF->MODER |= GPIO_MODER_MODER12_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR12; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR12; GPIOF->AFR[1] |= (12<<4*4); //** PF13 GPIOF->MODER |= GPIO_MODER_MODER13_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR13; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR13; GPIOF->AFR[1] |= (12<<4*5); //** PF14 GPIOF->MODER |= GPIO_MODER_MODER14_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR14; GPIOF->AFR[1] |= (12<<4*6); //** PF15 GPIOF->MODER |= GPIO_MODER_MODER15_1; GPIOF->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15; GPIOF->PUPDR &= ~GPIO_PUPDR_PUPDR15; GPIOF->AFR[1] |= (12<<4*7); /*******************************PG*******************************************/ //** PG0 GPIOG->MODER |= GPIO_MODER_MODER0_1;// GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOG->AFR[0] |= (12); //** PG1 GPIOG->MODER |= GPIO_MODER_MODER1_1; GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR1; GPIOG->AFR[0] |= (12<<4); //** PG4 (BA0) GPIOG->MODER |= GPIO_MODER_MODER4_1; GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR4; GPIOG->AFR[0] |= (12<<4*4); //** PG5 (BA1) GPIOG->MODER |= GPIO_MODER_MODER5_1; GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR5; GPIOG->AFR[0] |= (12<<4*5); //** PG8 (SDCLK) GPIOG->MODER |= GPIO_MODER_MODER8_1; GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR8; GPIOG->AFR[1] |= (12); //** PG15 (SDNCAS) GPIOG->MODER |= GPIO_MODER_MODER15_1; GPIOG->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15; GPIOG->PUPDR &= ~GPIO_PUPDR_PUPDR15; GPIOG->AFR[1] |= (12<<4*7); /****************************************PC****************************************/ //** PC0 (SDNWE) GPIOC->MODER |= GPIO_MODER_MODER0_1; GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0; GPIOC->PUPDR &= ~GPIO_PUPDR_PUPDR0; GPIOC->AFR[0] |= (12); /*******************************************PB*****************************************/ //** PB5 (SDCKE1) GPIOB->MODER |= GPIO_MODER_MODER5_1; GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR5; GPIOB->AFR[0] |= (12<<4*5); //** PB6 (SDNE1) GPIOB->MODER |= GPIO_MODER_MODER6_1; GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6; GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR6; GPIOB->AFR[0] |= (12<<4*6);
  4. Хотел узнать есть у кого рабочий пример работы SDRAM на stm32F429 к сожалению правильно работающего не нашёл.
  5. Пытался запустить пример предложенный Alex он скомпилировался но при запуске связь с платой пропала что делать?
  6. Ради этого и задаю вопрос что не так. А знание Си приходит с опытом и пониманием. Я бы пожелал примеры Cmsis для лучшего понимания. А уж потом круговерть с библиотеками.
  7. Жаль что используется Cub!
  8. Пытаюсь настроить SDRAM но при записи по адресу заполняются сразу 4 ячейки через одну . Дальше заполняются 4 пропущенные ячейки через одну . И так по кругу 8 раз то первые то вторые ячейки заполняются новыми данными . А на 9 разе происходит переход и цикл повторяется. Если кто настраивал подскажите? Настройка частоты 180 мГц APB1=45мГц APB2=90мГц void SdRamNastroika (void){ uint32_t tmp; // Enable clock for FMC RCC->AHB3ENR |= RCC_AHB3ENR_FMCEN; // Initialization step 1 FMC_Bank5_6->SDCR[0] = FMC_SDCR1_SDCLK_1 | FMC_SDCR1_RBURST | FMC_SDCR1_RPIPE_1; FMC_Bank5_6->SDCR[1] = FMC_SDCR1_NR_0 | FMC_SDCR1_MWID_0 | FMC_SDCR1_NB | FMC_SDCR1_CAS; // Initialization step 2 FMC_Bank5_6->SDTR[0] = TRC(7) | TRP(2); FMC_Bank5_6->SDTR[1] = TMRD(2) | TXSR(7) | TRAS(4) | TWR(2) | TRCD(2); // Initialization step 3 while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); FMC_Bank5_6->SDCMR = 1 | FMC_SDCMR_CTB2 | (1 << 5); // Initialization step 4 for(tmp = 0; tmp < 10000000; tmp++); // Initialization step 5 while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); FMC_Bank5_6->SDCMR = 2 | FMC_SDCMR_CTB2 | (1 << 5); // Initialization step 6 while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); FMC_Bank5_6->SDCMR = 3 | FMC_SDCMR_CTB2 | (4 << 5); // Initialization step 7 while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); FMC_Bank5_6->SDCMR = 4 | FMC_SDCMR_CTB2 | (1 << 5) | (0x231 << 9); // Initialization step 8 while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); FMC_Bank5_6->SDRTR |= (683 << 1); while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY); for(tmp = SDRAM_START_ADR; tmp < (SDRAM_START_ADR + SDRAM_MEMORY_SIZE); tmp += 4)//0x00800000 0x00000000 (*(__IO uint32_t *)tmp) = 0x00000000; } void SDRAM_Write32(uint32_t value){ uint32_t tmp1 = 0xD0000000; *(__IO uint32_t*)tmp1 = value;//0xD15151FF tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD45783FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD59256FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD14748FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD95317FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD45786FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD59256CF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD14749FF; tmp1+=4; *(__IO uint32_t*)tmp1 = 0xD95316FF; }
  9. Пытаюсь настроить тачскрин STMPE811 на STM32f429 discovery. При отладке программы происходит зависание то на while(!(I2C3->SR1 & I2C_SR1_SB)) то while (!(I2C3->SR1 & I2C_SR1_ADDR)) и постоянно начинает виснуть при открывании списка регистров I2C3 где можно посмотреть их значения. Если отладка проходит дальше то зависание происходит при чтении ID микросхемы x[0] = I2C3->DR. Считывается 8 и зависает. Когда покупал плату тестовая программа работала нормально и тачскрин в том числе . Не могу понять в чем проблема? Правильно ли настроил I2C3 ? void TFTLCD_I2C3_Init(void){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; RCC->APB1ENR |= RCC_APB1ENR_I2C3EN; GPIOC->MODER &= ~(GPIO_MODER_MODER9); GPIOA->MODER &= ~(GPIO_MODER_MODER8); GPIOC->MODER |= (GPIO_MODER_MODER9_1); //режим альтернативных функций GPIOA->MODER |= (GPIO_MODER_MODER8_1); //режим альтернативных функций GPIOC->OTYPER |=(GPIO_OTYPER_OT_9); //открытый сток GPIOA->OTYPER |=(GPIO_OTYPER_OT_8); //открытый сток GPIOA->OSPEEDR |= (GPIO_OSPEEDR_OSPEED8_1); //определяет частоту переключения выхода GPIOC->OSPEEDR |= (GPIO_OSPEEDR_OSPEED9_1); //определяет частоту переключения выхода GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD8); //определяет подтяжку вывода |= 0; GPIOC->PUPDR &= ~(GPIO_PUPDR_PUPD9); // определяет подтяжку вывода GPIOA->AFR[1] |= 4; GPIOC->AFR[1] |= (4<<(4*1)); I2C3->CR1 &= ~I2C_CR1_SMBUS; //настраиваем модуль в режим I2C I2C3->CR2 &= ~I2C_CR2_FREQ; //указываем частоту тактирования модуля I2C3->CR2 |= 45; I2C3->CCR &= ~I2C_CCR_CCR; //задаем частоту работы модуля SCL по формуле I2C3->CCR |= 225; //45000000(45MHz)/(2*100000(100KHz))=225 I2C3->CCR &= ~(I2C_CCR_FS | I2C_CCR_DUTY); //конфигурируем I2C, standart 100 KHz tlow/thigh = 2 I2C3->TRISE = 46; //(1000nS/22nS)+1 Standart_Mode = 1000nS, Fast_Mode = 300nS, 1/45MHz = 22nS I2C3->OAR1 = 0x41; I2C3->CR1 |= I2C_CR1_PE; //включаем модуль } void STMPE811_read_byte(){ I2C3->CR1 |= I2C_CR1_START; // Start bit while(!(I2C3->SR1 & I2C_SR1_SB)); // ожидается готовность (void) I2C3->SR1; I2C3->DR = 0x82; // передается адреса устройства while (!(I2C3->SR1 & I2C_SR1_ADDR)); // Ожидаем окончание передачи адреса while((I2C3->SR2 & I2C_SR2_TRA)==0); (void) I2C3->SR1; (void) I2C3->SR2; I2C3->DR = 0x00; while (!(I2C3->SR1 & I2C_SR1_TXE)); I2C3->CR1 |= I2C_CR1_START; // Restart bit while(!(I2C3->SR1 & I2C_SR1_SB)); I2C3->DR = 0x82|1; while (!(I2C3->SR1 & I2C_SR1_ADDR)); while((I2C3->SR2 & I2C_SR2_TRA)==1); I2C3->CR1 |= I2C_CR1_ACK; while( (I2C3->SR1 & I2C_SR1_RXNE)==I2C_SR1_RXNE ){} x[0] = I2C3->DR; //Считываем регистр в массив while((I2C3->SR1,I2C_SR1_RXNE)==0){} x[1] = I2C3->DR; //Считываем регистр в массив I2C3->CR1 |= I2C_CR1_STOP; // Формирование сигнала "Стоп" }
  10. У меня предположение с верхнего транзистора напряжение заходит с нижнего выходит нижняя полу волна. А как работает при высоком напряжении полу мост 300В мало кто может объяснить.
×
×
  • Создать...