STM32F4 Есть вопросы.

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Как нех ссать.
там обычная NAND флеш.
в стм32ф2 и ф4 начиная, точно на память не скажу, с 64 или 100 ног есть НАНД контроллер
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Есть, я просматривал даташит, поэтому такая мысль и возникла.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Жалко вот, почти во всем от 64 вроде ног есть внешняя шина и SRAM контроллер, а SDRAM вобще не припомню.
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Вот самый простой пример на плату STM32F4-Discovery.
Я тоже принялся за STM32, бо надоели эти AVR и Cortex-A8 с готовым линуксом. :))) захотелось с нуля освоить более мощные МК.

Код: Выделить всё

#include <ST\iostm32f407VG.h> //Это недостающий заголовочник для IAR 6.30, который пришлось добавить самому.

#define COUNT 0x0001A0FF

//////////////////////////////////////////////////////////////////////////////
int main()
{
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Enable GPIO A
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; //Enable GPIO D
  
  //RCC->APB1RSTR |= RCC_AHB1RSTR_GPIOARST; //Reset GPIO A
  //RCC->APB1RSTR |= RCC_AHB1RSTR_GPIODRST; //Reset GPIO D
  
  GPIOD->MODER |= (GPIO_MODER_MODER15_0 | 
                   GPIO_MODER_MODER14_0 | 
                   GPIO_MODER_MODER13_0 | 
                   GPIO_MODER_MODER12_0); // GPIO Mode Port Out
  
  GPIOD->OTYPER = 0x00000000; //Out D type Push-Pull
  GPIOD->OSPEEDR = 0x00000000; //Out Speed Low (2MHz)
  GPIOD->PUPDR = 0x00000000; //Not Pull Up/Down

  
  unsigned char a = 0;
  while(1)
  {
    if((GPIOA->IDR) & (GPIO_IDR_IDR_0) == 1) //if PA0 is set to 1 (button pressed)
    {
      a = ~a;
      while((GPIOA->IDR) & (GPIO_IDR_IDR_0) == 1) //if PA0 is set to 1 (button pressed)
      {
        asm("nop");
      }
    }
    
    if(!a)
    {
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR |= GPIO_ODR_ODR_15;} //Set 1 to PD15
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR &= ~GPIO_ODR_ODR_15;} //Set 0 to PD15
      
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR |= GPIO_ODR_ODR_14;} //Set 1 to PD14
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR &= ~GPIO_ODR_ODR_14;} //Set 0 to PD14
      
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR |= GPIO_ODR_ODR_13;} //Set 1 to PD13
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR &= ~GPIO_ODR_ODR_13;} //Set 0 to PD13
      
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR |= GPIO_ODR_ODR_12;} //Set 1 to PD12
      for(int i = 0 ; i < COUNT ; i++){GPIOD->ODR &= ~GPIO_ODR_ODR_12;} //Set 0 to PD12
    }
  }
  //return 0;
}
Программа мигает поочередно четырьмя светодиодами. Мигание можно остановить\запустить штатной пользовательской кнопкой. Антидребезг я не предусматривал.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Да с программой проблем не было, накосячил со скриптом линкера.

А на F4 делать пока нечего, сейчас подезжают несколько штук F103C8T6, вот на них развернусь! :)
А дискавери в качестве программатора пока пусть порабоатет...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

У меня секас был с прерываниями. :))) Сначала стартап забыл включить в проект. Потом не мог вкурить, что там с тактированием. В стартапе закомментил три строчки и все заработало.
То есть, я выкинул вызов SystemInit от туда (там настраивалось тактирование и прочее)

Код: Выделить всё

;;//EXTERN  SystemInit
.....
.......
Reset_Handler

        ;;//LDR     R0, = SystemInit
        ;;//BLX     R0
........
......
Настройки тактирования ядра и периферии выставил сам. Все работает пока. Даже есть желание написать парочку макросов для автоподсчета и автонастройки всего этого безобразия. :)
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Ответить

Вернуться в «ARM»