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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Скажите, а можно ли в STM32 в SPI отключить выдачу CLK? Хочу использовать модуль SPI для формирования сигнала асинхронного интерфейса.
Реклама
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

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

Сообщение GARMIN »

Не программируй ножку на альтернативную функцию, и всё...
Реклама
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Но она при этом будет работать как GPIO? Или про неё забыть?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

aam писал(а):Но она при этом будет работать как GPIO?
Будет.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Скажите, как в ИАРе при отладке через ST-Link посмотреть в читабельной форме в какой переменной что находится? Снизу у меня отображается содержимое ОЗУ, даже иногда видно как в нем чего-то меняется, но как найти конкретную переменную по имени в тексте программы и по какому адресу она лежит? Замучился искать уже :cry: Все в слепую. Цикл виснет, а не пойму почему.
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

В современных IDE содержимое переменной можно посмотреть наведя на нее мышку.

Изображение
aam писал(а):Цикл виснет, а не пойму почему.
Что показывает пошаговое выполнение программы?
Вложения
Debug.png
(11.36 КБ) 988 скачиваний
Реклама
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

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

Сообщение aam »

Сейчас снова попробовал понаводить мышку - и вправду всплывает. А до этого ничего не всплывало :oops:

А как сделать функцию на ассемблере? Как передаются параметры? Может есть какие примеры?
Я раньше писал функцию для Тини и тоже в ИАРе. Был H-файл с сишными объявлениями и собственно код в asm-файле и параметры передавались через отыеденные для этого ИАРом регистры. Для STM32 формат будет такой же (ну кроме самих ассемблерных команд конечно)?
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

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

Сообщение baghear »

Добрый день, при попытке сделать ассемблерную вставку в сишном проекте возникают ошибки

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

__asm
{
	
		 		      LDR           r0,[pc,#244] 
				      LDR           r0,[r0,#0x0C]
				      LDR           r1,[pc,#244]  
				
				      LDRH          r2,[r1,#0x00]
				      CMP           r0,r2
				      BNE           pc-2
}
main.c(262): warning: #1267-D: Implicit physical register R0 should be defined as a variable
LDR r0,[pc,#244]
main.c(262): error: #20: identifier "pc" is undefined
LDR r0,[pc,#244]
main.c(263): error: #549: variable "R0" is used before its value is set
LDR r0,[r0,#0x0C]
main.c(264): warning: #1267-D: Implicit physical register R1 should be defined as a variable
LDR r1,[pc,#244]
main.c(266): warning: #1267-D: Implicit physical register R2 should be defined as a variable
LDRH r2,[r1,#0x00]
main.c(266): error: #549: variable "R1" is used before its value is set
LDRH r2,[r1,#0x00]
main.c(268): error: #3081: expected end of line or a ";"
BNE pc-2
main.c(268): error: #114: label "pc" was referenced but not defined
BNE pc-2

Эта вставка пока смысла не имеет, подскажите пожалуйста как сделать чтобы компилятор перестал ругаться.
Аватара пользователя
iceman
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт июл 11, 2008 17:44:14
Откуда: Омск

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

Сообщение iceman »

Доброго времени суток. Подскажите как реализовать аппаратно генератор импульсов с длительность 1 - 1000µs и периодом до 2s.
Для такой задачи должен подходить режим OPM ведомого таймера. В качестве формирователя импульса у меня используется TIM1, TIM3 - определяет период испульсов. Пример моего кода

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

        // Тактовая частота 24MHz
        TIM3->CR1 = 0;
	TIM3->CR2 = TIM_CR2_MMS_2;		// OC1REF -> TRGO
	TIM3->PSC = 24000 - 1;
	TIM3->ARR = 400;
	TIM3->EGR = (1 << TIM_EGR_UG);
	TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
	TIM3->CCER = (1 << TIM_CCER_CC1E);
	TIM3->CCR1 = 10 - 1;

	TIM1->CR1 = 0;
	TIM1->PSC = 24 - 1;
	TIM1->ARR = 1000;
	TIM1->EGR = (1 << TIM_EGR_UG);
	TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
	TIM1->CCER = TIM_CCER_CC1E/* | TIM_CCER_CC1P*/;
	TIM1->SMCR = TIM_SMCR_TS_1 | TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1;
	TIM1->CCR1 = 40;
	TIM1->BDTR |= TIM_BDTR_MOE;
	TIM1->CR1 = TIM_CR1_CEN | TIM_CR1_OPM;
	TIM3->CR1 = TIM_CR1_CEN;
В режиме bridge mode TIM1 дает пачку импульсов заданной длительностью в CCR1, но этот режим не подходит для моей задачи. Режим gate mode - запускает TIM1, но импульса нет!! точнее есть пауза 1ms которая никак не регулируется регистром TIM1->CCR1.
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

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

Сообщение Alex_Golubev »

Не могу понять как настроить выход nss для работы в качестве cs в мастер режиме?
Сейчас настроил так:
Спойлер

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

void MX_SPI4_Init(void)
{

  hspi4.Instance = SPI4;
  hspi4.Init.Mode = SPI_MODE_MASTER;
  hspi4.Init.Direction = SPI_DIRECTION_2LINES;
  hspi4.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi4.Init.NSS = SPI_NSS_HARD_OUTPUT;
  hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
  hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi4.Init.TIMode = SPI_TIMODE_DISABLED;
  hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  hspi4.Init.CRCPolynomial = 10;
  HAL_SPI_Init(&hspi4);

}

отправляю

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

  uint8_t array_spi[2];
  array_spi[0] = 0xfa;
  array_spi[1] = 0x2;
  HAL_SPI_Transmit_DMA( &hspi4, array_spi, 2);

выход nss всегда нуль.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

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

Сообщение baghear »

можете почитать тут
https://hubstub.ru/stm32/100-spi-stm32.html
С этой строчки
Итак, вывод NSS работает не совсем так, как привычный CS у AVR, и в режиме Master для выбора ведомого необходимо использовать GPIO.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Можете почитать референс на Ф0хх и Ф3хх. Там вполне можно хардварно рулить nss. Другое дело, что в большинстве случаев это просто не нужно.

Добавлено after 3 minutes 5 seconds:
iceman писал(а): В режиме bridge mode TIM1 дает пачку импульсов заданной длительностью в CCR1, но этот режим не подходит для моей задачи.
Как настроили, так и работает. А почему не режим триггера и по переполнению?
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

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

Сообщение Alex_Golubev »

Не понятно почему так сделано. Как тогда лучше устанавливать вывод cs при передачи через dma?
Как понимаю устанавливать cs перед функцией

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

  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_RESET);
  HAL_SPI_Transmit_DMA( &hspi4, array_spi, 2);
А где сбрасывать?
У меня f4.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Alex_Golubev писал(а): У меня f4.
На Ф4 только вручную, обычным ногодрыгом. Там нет хардварного nss.

Как-то делал восьмиразрядный семисегментник на 2-ух 595-ых на Ф0 через ДМА. Вот там хардварный nss Ф0 хорошо ложится
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

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

Сообщение RusikOk »

написал программулину, зашил все заработало. а потом случайно обратил внимания на такие строчки в IARe

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

   IAR ELF Linker V7.30.4.8167/W32 for ARM 
   Copyright 2007-2014 IAR Systems AB. 
 
  40 260 bytes of readonly  code memory 
     783 bytes of readonly  data memory 
   8 822 bytes of readwrite data memory 
 
Errors: none 
Warnings: none 
 
Link time:   0.41 (CPU)   0.52 (elapsed) 
оно бы все и ничего но у моего F103 всего 6кБ ОЗУ и 32кБ ПЗУ. получается IAR врет?
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

Не факт. Быстрее всего вы заюзали область памяти которая существует физически, но не тестируется при изготовлении МК. Т.е. на свой страх и риск.
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

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

Сообщение RusikOk »

та вроди не! максимальный объем ОЗУ у этой линейки 6кБ

Добавлено after 1 minute 43 seconds:
ой! перепутал! там 20кБ оперативки а я думал, что 6)))
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

scorpi_0n писал(а): На Ф4 только вручную, обычным ногодрыгом. Там нет хардварного nss.
Вообще-то хардварный NSS есть на всех STM32, но только в режиме TI.
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

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

Сообщение Alex_Golubev »

А чем режим TI отличается от motorola ? Все понял. Скажите как можно понять что данные переданы по spi с dma?
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

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

Сообщение RusikOk »

в режиме TI можно отправлять нестандартное количество бит. используют для загрузки данных в сдвиговые регистры
Ответить

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