STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

2 Zhuk72
Нормально работает.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Ср мар 29, 2017 21:08:56

Сообщение spbslon »

Вопрос по LCD, есть насущная необходимость прицепить графический индикатор размером порядка 60х40мм и более к STM32 в целях простенького вольтметра/амперметра и так по мелочам. Старинные LCD утомили, OLED большеразмерный стоит денег, а зерно у него большое. Есть соблазн. на TFT 320x240 2" типа такого.

- С FSMC подскажите, есть недорогие (1000+- руб) готовые платы на али типа 100/144 ногого F103/F407 с уже напаянным SRAM? Самому тянуть 48 дорог ЛУТом - тяжело.

- Для медленного изменения данных, порядка не более 10 раз в сек, может мне не надо заморачиваться с FSMC? Может мне хватит SPI или параллельного 8/16bit что бы не мерцало 320х240 565RGB? (с OLED SPI опыт есть)

- Можно попросить ткнуть в актуальную на сегодня "народную" несложную бибилиотеку для соединения STM32 с LCD TFT? Без альфа слоёв, шрифты разного размера, прямая и точка - этого хватит. Сам уже понаписался, готов использовать чужое.

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

Сообщение Satyr »

spbslon писал(а): - С FSMC подскажите, есть недорогие (1000+- руб) готовые платы на али типа 100/144 ногого F103/F407 с уже напаянным SRAM? Самому тянуть 48 дорог ЛУТом - тяжело.
Зачем SRAM напаянный при экране с видеобуфером и вылой перерисовкой отдельных данных ?
- Для медленного изменения данных, порядка не более 10 раз в сек, может мне не надо заморачиваться с FSMC? Может мне хватит SPI или параллельного 8/16bit что бы не мерцало 320х240 565RGB? (с OLED SPI опыт есть)
чем FSMC отличается от параллельного 8/16 бит ? это оно и есть.

Добавлено after 33 minutes 56 seconds:
Для вольтметра, если без анимаций всяких и осциллограм, и по SPI сойдет.
Оно в M3+ шустрое, там мегабайты в секунда легко пропихиваются.
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Ср мар 29, 2017 21:08:56

Сообщение spbslon »

SPI не факт что будет, так что м.б. придётся параллельным пропихивать. FSMC как бы "берёт на себя пропихивание", вот и разница с "просто параллельно пихать руками". Наверное больше побаловаться FSMC хотел, заодно и с SRAM, коли она там в теме :-) Но пока не вижу простого дешёвого входа по железу и по времени разбора с готовой софтой.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

внешние шины в МК не ахти шустрые. а если с нее на нее перекидывать, да на разных чипселектах...
да и под что SRAM ? с FSMC плохо, что есть только в многоногих корпусах.

а так, вот чтото древнее наколеночное лет 8 назад https://www.youtube.com/watch?v=Uqr1jwnVdxg
как раз 320х240 на 8 бит шине, помоему тупо в программнмо режиме. Еще даже не на арме, а, на 60Мхз вроде AVR32.
карты еще и с разиповыванием налету с сд-карточки. памяти там очень не дофига было, и никаких внешних срамок -))

Добавлено after 11 minutes 52 seconds:
да вобщем то ничего особо не поменялось.
Вон на ебее еще полно дисплеев тех 3.5" c доставкой меньше 400р
не знаю, что народ трахается с LCD древними.
раньше вобще у нас в запчастях к телефонам всякие 2.4-2.8" под китайские клоны Nokia N95 были рублей от 200
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Да пустое это всё. Он на чужих либах и Кубе любую здравую мысль на любой шине убьёт.
Реклама
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Ср мар 29, 2017 21:08:56

Сообщение spbslon »

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

Сообщение Satyr »

spbslon писал(а):Ок, спасибо. Тогда сделаю вручную быстро, на чём нибудь типа F103 базового
Что то сложнее сделаю на более мощных, дешёвых и быстрых в разработке платформах типа OrangePi
Лишь бы там ноги нужные были выведены
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Ср мар 29, 2017 21:08:56

Сообщение spbslon »

Satyr писал(а):
spbslon писал(а):Что то сложнее сделаю на более мощных, дешёвых и быстрых в разработке платформах типа OrangePi
Лишь бы там ноги нужные были выведены
SPI и I2C там всегда, GPIO тоже часто есть. Прорвёмся. На STM32 будем собирать данные, а смотреть и управлять уже на приличной железке. Для разовой и мелокосерийной разработки так выгоднее и быстрее.
Последний раз редактировалось spbslon Вт апр 04, 2017 11:49:12, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

spbslon писал(а):На STM32 будем собирать данные, а смотреть и управлять уже на приличной железке.
Вот это отличный способ обрести усложнить задачу раза в 1.5 -)
Родился
Аватара пользователя
Сообщения: 9
Зарегистрирован: Ср мар 29, 2017 21:08:56

Сообщение spbslon »

Satyr писал(а):
spbslon писал(а):На STM32 будем собирать данные, а смотреть и управлять уже на приличной железке.
Вот это отличный способ обрести усложнить задачу раза в 1.5 -)
Фиг знает, товарищ начальник. Смотришь брутальных мужиков FSMC, с другой стороны радостные хипстерские ардуинщики, у которых "сразу всё летает", и кажется что "нафиг этот STM", по крайне мере для GUI. Пока не попробуешь оба варианта - не поймёшь же.
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Если не выбросил еще, можно такие дисплеи использовать -)
http://radiokot.ru/forum/viewtopic.php? ... 4#p1547004
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Добрый день, читаю даташит на STM32F446
Как выбрать какой AF подключать на SPI2? AF5 или AF6..8
Изображение
Грызет канифоль
Аватара пользователя
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва

Сообщение Fusion »

Если с SPL, то там просто AF:
Для 446: GPIO_AF_SPI2 - это AF5

Рабочий пример для SPI1:

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

void SPI_init(void) {

GPIO_InitTypeDef	GPIO_InitStructure; 	
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);		// SCK
GPIO_PinAFConfig(GPIOB, GPIO_PinSource4 , GPIO_AF_SPI1);		// MISO
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5 , GPIO_AF_SPI1);		// MOSI

GPIO_InitStructure.GPIO_Pin = LCD_SCK | LCD_MOSI | LCD_MISO;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure)


SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL		= SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA		= SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_Init(SPI1, &SPI_InitStructure);
 
SPI_Cmd(SPI1, ENABLE);
}
Контактная информация:
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Так то оно так, но я подозреваю что у меня старый SPL, вот допустим на AF8 нету не кого SPI
А новый новый у них кажись называет HAL, так как нечего более нового там не нашёл. Да и ихний сайт только через прокси работает :(
Спойлер

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

/** 
  * @brief   AF 3 selection  
  */ 
#define GPIO_AF_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping */
#define GPIO_AF_TIM9          ((uint8_t)0x03)  /* TIM9 Alternate Function mapping */
#define GPIO_AF_TIM10         ((uint8_t)0x03)  /* TIM10 Alternate Function mapping */
#define GPIO_AF_TIM11         ((uint8_t)0x03)  /* TIM11 Alternate Function mapping */

/** 
  * @brief   AF 4 selection  
  */ 
#define GPIO_AF_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping */
#define GPIO_AF_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping */
#define GPIO_AF_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping */

/** 
  * @brief   AF 5 selection  
  */ 
#define GPIO_AF_SPI1          ((uint8_t)0x05)  /* SPI1 Alternate Function mapping */
#define GPIO_AF_SPI2          ((uint8_t)0x05)  /* SPI2/I2S2 Alternate Function mapping */

/** 
  * @brief   AF 6 selection  
  */ 
#define GPIO_AF_SPI3          ((uint8_t)0x06)  /* SPI3/I2S3 Alternate Function mapping */

/** 
  * @brief   AF 7 selection  
  */ 
#define GPIO_AF_USART1        ((uint8_t)0x07)  /* USART1 Alternate Function mapping */
#define GPIO_AF_USART2        ((uint8_t)0x07)  /* USART2 Alternate Function mapping */
#define GPIO_AF_USART3        ((uint8_t)0x07)  /* USART3 Alternate Function mapping */
#define GPIO_AF_I2S3ext       ((uint8_t)0x07)  /* I2S3ext Alternate Function mapping */

/** 
  * @brief   AF 8 selection  
  */ 
#define GPIO_AF_UART4         ((uint8_t)0x08)  /* UART4 Alternate Function mapping */
#define GPIO_AF_UART5         ((uint8_t)0x08)  /* UART5 Alternate Function mapping */
#define GPIO_AF_USART6        ((uint8_t)0x08)  /* USART6 Alternate Function mapping */
Грызет канифоль
Аватара пользователя
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва

Сообщение Fusion »

Вот для F4 раскладка по AF:
Спойлер* @brief AF 0 selection
*/
#define GPIO_AF_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */
#define GPIO_AF_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */
#define GPIO_AF_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */
#define GPIO_AF_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */
#define GPIO_AF_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF0_TIM2 ((uint8_t)0x00) /* TIM2 Alternate Function mapping */
#endif /* STM32F446xx */

/**
* @brief AF 1 selection
*/
#define GPIO_AF_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */
#define GPIO_AF_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */

/**
* @brief AF 2 selection
*/
#define GPIO_AF_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */
#define GPIO_AF_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */
#define GPIO_AF_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */

/**
* @brief AF 3 selection
*/
#define GPIO_AF_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */
#define GPIO_AF_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */
#define GPIO_AF_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */
#define GPIO_AF_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF3_CEC ((uint8_t)0x03) /* CEC Alternate Function mapping */
#endif /* STM32F446xx */
/**
* @brief AF 4 selection
*/
#define GPIO_AF_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */
#define GPIO_AF_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */
#define GPIO_AF_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF4_CEC ((uint8_t)0x04) /* CEC Alternate Function mapping */
#define GPIO_AF_FMPI2C ((uint8_t)0x04) /* FMPI2C Alternate Function mapping */
#endif /* STM32F446xx */

/**
* @brief AF 5 selection
*/
#define GPIO_AF_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */
#define GPIO_AF_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */
#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping (Only for STM32F411xE Devices) */
#define GPIO_AF_SPI4 ((uint8_t)0x05) /* SPI4/I2S4 Alternate Function mapping */
#define GPIO_AF_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */
#define GPIO_AF_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */

/**
* @brief AF 6 selection
*/
#define GPIO_AF_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */
#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* SPI2 Alternate Function mapping (Only for STM32F411xE Devices) */
#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4 Alternate Function mapping (Only for STM32F411xE Devices) */
#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5 Alternate Function mapping (Only for STM32F411xE Devices) */
#define GPIO_AF_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */

/**
* @brief AF 7 selection
*/
#define GPIO_AF_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */
#define GPIO_AF_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */
#define GPIO_AF_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */
#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3ext Alternate Function mapping */

/**
* @brief AF 7 selection Legacy
*/
#define GPIO_AF_I2S3ext GPIO_AF7_SPI3

/**
* @brief AF 8 selection
*/
#define GPIO_AF_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */
#define GPIO_AF_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */
#define GPIO_AF_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */
#define GPIO_AF_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */
#define GPIO_AF_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF8_SAI2 ((uint8_t)0x08) /* SAI2 Alternate Function mapping */
#define GPIO_AF_SPDIF ((uint8_t)0x08) /* SPDIF Alternate Function mapping */
#endif /* STM32F446xx */

/**
* @brief AF 9 selection
*/
#define GPIO_AF_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */
#define GPIO_AF_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */
#define GPIO_AF_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */
#define GPIO_AF_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */
#define GPIO_AF_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */

#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping (Only for STM32F401xx/STM32F411xE Devices) */
#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping (Only for STM32F401xx/STM32F411xE Devices) */
#if defined (STM32F446xx)
#define GPIO_AF9_SAI2 ((uint8_t)0x09) /* SAI2 Alternate Function mapping */
#endif /* STM32F446xx */
#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LTDC Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF9_QUADSPI ((uint8_t)0x09) /* QuadSPI Alternate Function mapping */
#endif /* STM32F446xx */
/**
* @brief AF 10 selection
*/
#define GPIO_AF_OTG_FS ((uint8_t)0xA) /* OTG_FS Alternate Function mapping */
#define GPIO_AF_OTG_HS ((uint8_t)0xA) /* OTG_HS Alternate Function mapping */
#if defined (STM32F446xx)
#define GPIO_AF10_SAI2 ((uint8_t)0x0A) /* SAI2 Alternate Function mapping */
#endif /* STM32F446xx */
#if defined (STM32F446xx)
#define GPIO_AF10_QUADSPI ((uint8_t)0x0A) /* QuadSPI Alternate Function mapping */
#endif /* STM32F446xx */
/**
* @brief AF 11 selection
*/
#define GPIO_AF_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */

/**
* @brief AF 12 selection
*/
#if defined (STM32F40_41xxx)
#define GPIO_AF_FSMC ((uint8_t)0xC) /* FSMC Alternate Function mapping */
#endif /* STM32F40_41xxx */

#if defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F446xx)
#define GPIO_AF_FMC ((uint8_t)0xC) /* FMC Alternate Function mapping */
#endif /* STM32F427_437xx || STM32F429_439xx || STM32F446xx */

#define GPIO_AF_OTG_HS_FS ((uint8_t)0xC) /* OTG HS configured in FS, Alternate Function mapping */
#define GPIO_AF_SDIO ((uint8_t)0xC) /* SDIO Alternate Function mapping */

/**
* @brief AF 13 selection
*/
#define GPIO_AF_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */

/**
* @brief AF 14 selection
*/
#define GPIO_AF_LTDC ((uint8_t)0x0E) /* LCD-TFT Alternate Function mapping */

/**
* @brief AF 15 selection
*/
#define GPIO_AF_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

pokk писал(а):Добрый день, читаю даташит на STM32F446
Как выбрать какой AF подключать на SPI2? AF5 или AF6..8
Плохо ты даташит читаешь, раз не заметил таблицу "Alternate function", на 8 страниц.
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Добрый день, подскажите пожалуйста как сделать, чтобы кейл стартовал с нужного адреса флэша?
Делаю так http://prntscr.com/etr4gg
Программа записывается как надо, Но он все равно не стартует с нужного адреса.
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Установить адрес таблицы векторов прерываний

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

SCB->VTOR = 0x08008400;
А тот кто будет вызывать программу, должен установить указатель стека

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

__set_MSP(*(__IO uint32_t*)0x08008400);
и выполнить переход по адресу программы

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

((void(*)(void))(*(__IO uint32_t*)(0x08008400+ sizeof(uint32_t))))();
Если нужно чтоб стартовало только в отладчике кеила, то установки адреса таблицы векторов будет достаточно. Главное чтоб в настройках отладки была включена опция Run to main
Иван Сусанин - первый полупроводник :solder:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Таблица прерываний уже там, переход на эту программу то же успешно осуществляется, а вот run to main завтра попробую установить, спасибо!!!!!!
Ответить

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