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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар

Сообщение Кислый »

КАШАК писал(а):Где можно почитать про назначение BOOT0 и BOOT1 ? И если в МК есть аппаратный USB, через него можно прошивать? МК STM32F103VCT6.
c эти биты определяют параметры бутлоадера. первичный, вторичный или отключен. с помощью первичного бутлоадера можно прошить бут по usb ( как в филипсах - mass str dev ). Но лучше использоватьь JTAG
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар

Сообщение Кислый »

кто-нибудь собирал тулчейн самостоятельно ?
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Сообщение polyname »

и еще пол файла переделать?) - я правильно думаю?
как минимум (только для чтения) нужно определить функции disk_initialize, disk_status, disk_read. Для записи - disk_write, get_fattime и ioctl. Также нужны функции низкого уровня для SD - инициализации и чтения/записи сектора.
у когонить есть FATfs для STM32L152?или чтобы переделывать поменьше?
есть либа с поддержкой программного и аппаратного SPI (STM32 и AVR), также возможно использование DMA для блочных пересылок.
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

спящий писал(а):
  Заголовок сообщения:  Re: STM32 новичку в ARM что к чему  
Вы должны обеспечить discio.c функциями аппаратного уровня, такими как запись/чтение сектора, инициализация карты, отправка команды карте и так далее. Исходник discio.c - это уже часть FatFS. Вообще, Чен указывал, какие функции разработчик должен писать самостоятельно для успешной работы с FatFS.
Поищите в сети, примеры должны быть. Год назад я использовал FatFS с STM32F407, но там все делалось на скорую руку, с "ногодрыжным" SPI, все это коряво и некрасиво.
СпойлерМодуль низкоуровневго ввода/вывода не является частью модуля FatFs, и он должен быть предоставлен пользователем (в этом собственно и заключается основной процесс портирования на целевую систему). Примеры таких низкоуровневых модулей/драйверов можно найти в разделе Ссылки. Список функций низкоуровневого ввода/вывода:
disk_initialize - инициализация диска (disk drive)
disk_status - получение состояния диска (disk status)
disk_read - прочитать сектор (секторы)
disk_write - записать сектор (секторы)
disk_ioctl - управление опциями, зависящими от устройства
get_fattime - получение текущего времени
Ссылки
тоесть как я понял мне надо эти функции вручную написать, включая инициализацию так?
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

спящий писал(а):как я понял мне надо эти функции вручную написать, включая инициализацию так?
Да, верно. Весь низкоуровневый функционал.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Сообщение polyname »

да, самое сложное - инициализация карты:
http://codetidy.com/paste/raw/4306
http://codetidy.com/paste/raw/4305
http://codetidy.com/paste/raw/4307
Реклама
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

HHIMERA писал(а):Что-то это высказывание противоречит вашему нижеследующему высказыванию...
Каким образом?
HHIMERA писал(а):Заезженный штамп горе-студентов-кармодрочеров с ДиАхтунга... :)))
HHIMERA писал(а):кармодрочеров
Хммм... Я не понял, это вы про себя?
HHIMERA писал(а):СТДлиб предназначены для начального вхождения... и только... А дальше - всё наоборот... Чем больше проект содержит взаимодействия с периферией, тем больше проявляются ущербность, избыточность, тормознутость и неоптимальность... и чем выше уровень знаний, тем больше это проявляется и в итоге просто начинает раздражать...
Ну, мне как раз для старта эта библиотека очень мешала, и я программил регистры напрямую. Хотя вобщем я не далеко от этого старта ушел в случае с STM32. Ну, наверное, то что я говорил, касается идеологии библиотеки периферии вообще, а не конкретно STM32PeriphLib. Насчет ущербности последней я ничего против не имею, т.к. я толком ей и не воспользовался.
Но если есть нормально реализованная и документированная библиотека, то почему бы и нет. В случае с другой проприетарной архитектурой (название и подробности разглашать не могу) у меня было именно так: начал знакомство с "низов", потом перешел на использование подобной библиотеки, проблем - меньше, удобства - больше. Опять же, здесь выполняется условие, что я понимаю, как это работает. В противном случае она действительно сгодится только для мигания светодиодами.
Giggity giggity goo!
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

В продолжение темы о SD. Пытаюсь подключить карту к STM32vldiscovery. Код инициализации и прочего взял отсюда: http://pcus.ru/stati/stm32/1567-prikruc ... o-spi.html. Оказалось, что скорость SPI там выставлена маленькая. Выкрутил на максимум. И всё равно как-то долго сектор читается (около секунды, скорость проца - 24 МГц). Это нормально? Запись в файл тоже будет занимать порядка секунды? Или это код такой?
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Это всего лишь пример... коих в инете превеликое множество... хорошо, что ещё работает... :))
А так... вывод картинки bin-файла с SD на STM32vldiscovery и N1616 128X160@16 bit ( 40 960 байт с SD и 46 080 байт на дисплей) - ~70 миллисекунд... для примера...
"Я не даю готовых решений, я заставляю думать!"(С)
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

HHIMERA, поделитесь кодом?)
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Скажите в чем косяк,при проверке флага,не обнаруживает сброс бита SPI_SR_TXE,то есть виснет(постоянно на одной строчке) при проверке флаг.

SPI1->DR = 0x0F; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными
while (!(SPI1->SR & SPI_SR_TXE)); //ожидание окончания передачи ПОСТОЯННО ОЖИДАЕТ


Как исправить.
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

Тактирование на SPI подали?
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

спящий писал(а): while (!(SPI1->SR & SPI_SR_TXE)); //ожидание окончания передачи ПОСТОЯННО ОЖИДАЕТ
SPI_SR_TXE ни разу не "ожидание окончания передачи"... и отладчик не совсем корректно работает в пошаговом режиме со SPI...
"Я не даю готовых решений, я заставляю думать!"(С)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

TripleKill писал(а):HHIMERA, поделитесь кодом?)
Мне тема SD, на данный момент, не интересна... поэтому и кода нет... да и "по сроку службы не положено"... :))
Хотите - открывайте тему, ищите единомышленников (кому это интересно)... "помогу чем смогу"...

Там всё просто...
Как вариант...

Берёте Ченовские примеры PetitFat для PIC24 или LPC17XX, перетряхиваете их под STM32...
На SPI1 вешаете N1616, на SPI2 - SD...
После того, как всё это "как-то" заработало, берёте бубен, входите в нирвану и начинаете шаманить нипадецки...

1. SPI1 включаете в режиме 16bit и организовываете передачу 18bit данных на N1616 в непрерывном режиме с перекодировкой на лету...
Ориентир - время вывода картинки из флэша МК на дисплей 30-31 миллисекунд (в случае с STM32vldiscovery)...

2. Далее... Делаете копию функции pf_read и переименовываете её, допустим, в new_pf_read... (через неё и будем, в дальнейшем, работать)...
Делаете копию функции disk_readp и переименовываете её, допустим, в new_disk_readp...
В new_pf_read меняете disk_readp на new_disk_readp...
Новые функции, естественно, нужно прописать в h-файле...
В new_disk_readp после /* Receive a part of the sector */ переводим SPI2 в режим 16bit, перемешиваем чтение SD с выводом на N1616,
а перед /* Skip trailing bytes and CRC */ возвращаем SPI2 в режим 8bit...
Как-то так... здесь возможны и варианты...

3. В майне, или в какой функциии, при выводе c SD на N1616 обращаемся к new_pf_read, оставив родную pf_read для других целей...

После всего этого безобразия получаем время вывода картинки с файла на дисплей около 70 миллисекунд...
"Я не даю готовых решений, я заставляю думать!"(С)
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

Ясно) Всё сложнее, чем я думал)
Спасибо за инфу, буду копать)
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

Сообщение drakon »

Добрый день! может, уже и спрашивали, но я не нашел, подскажите компилятор для stm32, для С и для ассемблера, чтоб через него и прошивать и отладку можно было делать. сейчас работаю с AVR на С и асме. короче поделитесь опытом на счет программного обеспечения.
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Варианта три: GCC, IAR'овский компилятор, ARM'овский компилятор (который в Keil).
Открыл глаза
Сообщения: 59
Зарегистрирован: Ср ноя 17, 2010 01:03:44

Сообщение metcenger »

не могу заставить работать внешнее прерывание на плате STM32L Discovery на порту PA0

обработчик

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

void EXTI0_IRQHandler(void) { 
  on (LED_Blue);
  EXTI->PR |= EXTI_PR_PR0;//сбросили бит прерывания
}
инициализация

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

void InitPeriph(void)
  {
  RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //разрешение тактирования порта b. RCC-указатель,содержащий адрес структуры, и обращается он к члену структуры AHBENR
  RCC->AHBENR |= RCC_AHBENR_GPIOAEN;

  GPIOB->MODER |= GPIO_MODER_MODER7_0; //General purpose output mode (01)
  GPIOB->OTYPER &= ~GPIO_OTYPER_OT_7; //выход открытый коллектор или обычный(0) ~ инверсия
  GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7;//скорость порта (11: 40 MHz High speed )
  GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR7; //00- без подтяжки резисторов

  GPIOB->MODER |= GPIO_MODER_MODER6_0;  //output
  GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;  //Output push-pull
  GPIOB->OSPEEDR &=~GPIO_OSPEEDER_OSPEEDR6;  //400 kHz
  GPIOB->PUPDR &=~GPIO_PUPDR_PUPDR6;  //No pull-up, pull-down

  GPIOA->MODER &= ~GPIO_MODER_MODER0;  //input
  GPIOA->OTYPER &= ~GPIO_OTYPER_OT_0;  //Output push-pull
  GPIOA->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR0;  //40 MHz
  GPIOA->PUPDR &=~GPIO_PUPDR_PUPDR0;  //No pull-up, pull-down
  
  
  //настройка внешнего прерывания на int0
  __enable_irq ();
    RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
    
    SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA;
  
    EXTI->IMR |= EXTI_IMR_MR0; // какую линию выбираем из 23-х (у нас 0-я)
  
    EXTI->RTSR |= EXTI_RTSR_TR0; //настройка фронта-среза
    EXTI->FTSR |= EXTI_FTSR_TR0;
  
    NVIC_EnableIRQ(EXTI0_IRQn);
    NVIC_SetPriority(EXTI0_IRQn, 1);

  }
и при этом всем работать не хочет! Чего не так?
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Попробуй установить:
EXTI->IMR |= EXTI_IMR_MR0; // Это Прерывание по событию -это у тебя есть

Но сомого события нет:

EXTI -> EMR |= EXTI_EMR_MR0;//устанавливаем событие

Работает?
Открыл глаза
Сообщения: 59
Зарегистрирован: Ср ноя 17, 2010 01:03:44

Сообщение metcenger »

разобрался- заработало.
Причина- был выбран в проекте язык С++, при смене на С- все работает.

А почему так?
Ответить

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