Прошу совета по STM32F407VET6 Cortex-M4

Тема в разделе "Посоветуйте детальки", создана пользователем YeS, 28 окт 2016.

  1. koteika

    koteika Гик

    Если использовать отладку как средство для прототипирования то почему бы и нет? Если ставить отладку в конечное устройство - то да, затратно..

    Я себе сделал парочку разных на stm8, stm32. Так пользуюсь. В конечное устройство ставлю мк + необходимый обвес.

    Для себя можно и лутом обойтись, это если не на продажу отладки делать. Дешево и быстро.
    Вот пример моей отладки для stm8s003:
    7UL1o3nL9Eg.jpg -UmjCfDXNWI.jpg
     
  2. Onkel

    Onkel Гуру

    У меня маленько другая ситуация- я мготовые платы использую для выполнения заказов клиентов, так что лут точно убьет мою репутацию нахрен, заранее готовлю софтово/железные шаблоны под задачи разной сложности, к примеру периферия есть всякая - диммер, Led диммер , реле такие, реле такие..., а сейчас готовлю несколько контроллеров на stm32, так что надо чтобы на складе постоянно было штук по 5 разных, каждого вида,ну в принципе думаю 103, 407 и может быть еще 303 с imu, причем я заранее не знаю, сколько понадобится. Вот придет заказ на сто роботов- и вынь да положь сотню плат, а с нашей отечественной сборкой я уже обрыдался что слез не осталось, полагаюсь только на "китай нам поможет".
     
  3. Unixon

    Unixon Оракул Модератор

    Косячат?
     
  4. Onkel

    Onkel Гуру

    Брак - непропаи, TH вообще бывает ряд без припоя, брак больше 5%. Перемывать приходится ультразвуком, что в общем неполезно для плат- лишний раз мучать, особенно для кварцев. В китае 0.2%, те же самые платы.
     
  5. YeS

    YeS Гик

    А можно ли такую мини версию STM32F407VET6 подружить с таким LAN8720 интерфейсом? Просто по данному СТМ32 в описании не указано что он имеет 1x10/100 Ethernet MAC, но ведь должен?
     
  6. koteika

    koteika Гик

    А у данного камня в таблице распиновки указаны выводы под эзернет?
    Вот тут указано что у серии f407 есть эзернет, единственно его не может быть в камнях с малым количеством ног 48 или 64 (пример шина fsmc,у f100 c 48 пинами ее нет, выше - есть.). Смотрите распиновку в даташите.
     
  7. koteika

    koteika Гик

    Шумит потому что отладка криво разведена, и аналоговая часть выполнена по принципу "ну есть и ладно". Если хотите без шумов и точность повыше, то вперед разводить и городить свои отладки по фэншую.
     
  8. Onkel

    Onkel Гуру

    Собственно ответ уже есть, беру диско и все дела.
     
  9. Slacky

    Slacky Гик

    Чтобы не плодить тем, спрошу тут. Прикупил такую же плату. Поморгал светодиодом. Решил проверить usart. В инете нашел пример.

    Код (C++):
    /*******************************************************************/
    // Цепляем нужные файлы
    #include "stm32f4xx.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_gpio.h"
    #include "stm32f4xx_usart.h"
    /*******************************************************************/
    // Объявляем переменные
    GPIO_InitTypeDef gpio;
    USART_InitTypeDef usart;
    // Пусть нам надо передать 8 байт, создадим массив для данных
    uint8_t sendData[8];
    uint8_t bytesToSend = 8;
    // Счетчик отправленных байт
    uint8_t sendDataCounter = 0;
    /*******************************************************************/
    // Инициализация всего, что нам надо
    void initAll()
    {
        // Включаем прерывания
        __enable_irq();
        // Запускаем тактирование
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
        // Инициализация нужных пинов контроллера, для USART1 –
        // PA9 и PA10
        GPIO_StructInit(&gpio);
        gpio.GPIO_Mode = GPIO_Mode_AF;
        gpio.GPIO_Pin = GPIO_Pin_9;
        gpio.GPIO_Speed = GPIO_Speed_50MHz;
        gpio.GPIO_OType = GPIO_OType_PP;
        gpio.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &gpio);
        gpio.GPIO_Mode = GPIO_Mode_AF;
        gpio.GPIO_Pin = GPIO_Pin_10;
        gpio.GPIO_Speed = GPIO_Speed_50MHz;
        gpio.GPIO_OType = GPIO_OType_PP;
        gpio.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &gpio);
        // И вот еще функция, которой не было при работе с STM32F10x,
        // но которую нужно вызывать при использовании STM32F4xx
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
       // А теперь настраиваем модуль USART
       USART_StructInit(&usart);
       usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
       usart.USART_BaudRate = 9600;  
       USART_Init(USART1, &usart);  
       // Включаем прерывания и запускаем USART
       NVIC_EnableIRQ(USART1_IRQn);
       USART_Cmd(USART1, ENABLE);
    }
    /*******************************************************************/
    // Функция main()
    int main()
    {
        // Для начала заполним массив передаваемыми данными
        sendData[0] = 0x11;
        sendData[1] = 0x22;
        sendData[2] = 0x33;
        sendData[3] = 0x44;
        sendData[4] = 0x55;
        sendData[5] = 0x66;
        sendData[6] = 0x77;
        sendData[7] = 0x88;
        // Вызываем функцию инициализации
        initAll();
        // Включаем прерывание по окончанию передачи
        USART_ITConfig(USART1, USART_IT_TC, ENABLE);
        while(1)
        {
        // А тут мы ничего не делаем, вся работа у нас в прерывании
            __NOP();
        }
    }
    /*******************************************************************/
    // Обработчик прерывания
    void USART1_IRQHandler()
    {
        // Проверяем, действительно ли прерывание вызвано окончанием передачи
        if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)
        {
            // Очищаем флаг прерывания
            USART_ClearITPendingBit(USART1, USART_IT_TC);
            // Отправляем байт данных
            USART_SendData(USART1, sendData[sendDataCounter]);
            // Увеличиваем счетчик отправленных байт
            sendDataCounter++;
            // Если отправили все данные, начинаем все сначала
            if  (sendDataCounter == bytesToSend)
            {
                sendDataCounter = 0;
            }
        }
    }
    /*******************************************************************/
    Работает. Но в терминале получаю вот такое

    [​IMG]

    Что я делаю не так?

    Спасибо.
     
  10. koteika

    koteika Гик

    Почему rx и tx одинаково настроены?

    Данные идут, но криво. Тут два варианта неправильно настроен вывод tx либо проблема с тактированием, и следовательно не правильно рассчитывается значение регистра BRR.

    Если есть лог анализатор можно глянуть сигналы на юарте, в настройках анализатора поставить - автоматическое определение бодрейта. Так можно глянуть реальный бодрейт.

    Не все примеры, найденные в сети, будут работать. Имхо StdPeriph и HAL ущербны, как и генератор кода cube mx, используйте регистры..

    Это описано в документации, включение альтернативных функций.
    Код (C++):
    // И вот еще функция, которой не было при работе с STM32F10x,
        // но которую нужно вызывать при использовании STM32F4xx
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
     
  11. Slacky

    Slacky Гик

    Разобрался ... По умолчанию HSE_VALUE имеет значение на 25 мегагегрц. А в плате использован кварц на 8. Добавил в препроцессор строку HSE_VALUE=8000000 и все завелось ...
     
  12. Slacky

    Slacky Гик

    Потихоньку разбираюсь, что там да как. Делаю. все в IAR System. Использую ST-LINK V2 полноценный (клон конечно, но видится, апгрейдится без проблем). Как сделать, чтобы после заливки прошивки через Download система стартовала? А то приходится на кнопку сброса каждый раз нажимать ...

    Спасибо.
     
  13. koteika

    koteika Гик

    IAR не использую. Юзаю Keil. Ищи в опциях загрузки-прошивки что то подобное как на картинке.

    Снимок.JPG
     
  14. Slacky

    Slacky Гик

    В том-то и дело, что в IAR'е я такого не нашел ...
     
  15. Slacky

    Slacky Гик

    А вот еще вопрос. Долго вкуривал SDIO и FatFs. Вкурил. Работает. А вопрос собственно такой - может кто знает, именно у этой платы есть пин, контролирующий присутствие/отсутствие SD-карты? По схеме вроде нет, но вдруг ...