STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
Скажите, а можно ли в STM32 в SPI отключить выдачу CLK? Хочу использовать модуль SPI для формирования сигнала асинхронного интерфейса.
- Реклама
- GARMIN
- Держит паяльник хвостом
- Сообщения: 953
- Зарегистрирован: Вс дек 02, 2012 16:58:33
- Откуда: от туда
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Не программируй ножку на альтернативную функцию, и всё...
Re: STM32 новичку в ARM что к чему
Но она при этом будет работать как GPIO? Или про неё забыть?
Re: STM32 новичку в ARM что к чему
Будет.aam писал(а):Но она при этом будет работать как GPIO?
Re: STM32 новичку в ARM что к чему
Скажите, как в ИАРе при отладке через ST-Link посмотреть в читабельной форме в какой переменной что находится? Снизу у меня отображается содержимое ОЗУ, даже иногда видно как в нем чего-то меняется, но как найти конкретную переменную по имени в тексте программы и по какому адресу она лежит? Замучился искать уже
Все в слепую. Цикл виснет, а не пойму почему.
- Реклама
Re: STM32 новичку в ARM что к чему
В современных IDE содержимое переменной можно посмотреть наведя на нее мышку.

Что показывает пошаговое выполнение программы?aam писал(а):Цикл виснет, а не пойму почему.
- Вложения
-
- Debug.png
- (11.36 КБ) 988 скачиваний
Re: STM32 новичку в ARM что к чему
Сейчас снова попробовал понаводить мышку - и вправду всплывает. А до этого ничего не всплывало 
А как сделать функцию на ассемблере? Как передаются параметры? Может есть какие примеры?
Я раньше писал функцию для Тини и тоже в ИАРе. Был H-файл с сишными объявлениями и собственно код в asm-файле и параметры передавались через отыеденные для этого ИАРом регистры. Для STM32 формат будет такой же (ну кроме самих ассемблерных команд конечно)?
А как сделать функцию на ассемблере? Как передаются параметры? Может есть какие примеры?
Я раньше писал функцию для Тини и тоже в ИАРе. Был H-файл с сишными объявлениями и собственно код в asm-файле и параметры передавались через отыеденные для этого ИАРом регистры. Для STM32 формат будет такой же (ну кроме самих ассемблерных команд конечно)?
Re: STM32 новичку в ARM что к чему
Добрый день, при попытке сделать ассемблерную вставку в сишном проекте возникают ошибки
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
Эта вставка пока смысла не имеет, подскажите пожалуйста как сделать чтобы компилятор перестал ругаться.
Код: Выделить всё
__asm
{
LDR r0,[pc,#244]
LDR r0,[r0,#0x0C]
LDR r1,[pc,#244]
LDRH r2,[r1,#0x00]
CMP r0,r2
BNE pc-2
}
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
Эта вставка пока смысла не имеет, подскажите пожалуйста как сделать чтобы компилятор перестал ругаться.
Re: STM32 новичку в ARM что к чему
Доброго времени суток. Подскажите как реализовать аппаратно генератор импульсов с длительность 1 - 1000µs и периодом до 2s.
Для такой задачи должен подходить режим OPM ведомого таймера. В качестве формирователя импульса у меня используется TIM1, TIM3 - определяет период испульсов. Пример моего кода
В режиме bridge mode TIM1 дает пачку импульсов заданной длительностью в CCR1, но этот режим не подходит для моей задачи. Режим gate mode - запускает TIM1, но импульса нет!! точнее есть пауза 1ms которая никак не регулируется регистром TIM1->CCR1.
Для такой задачи должен подходить режим 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;
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Не могу понять как настроить выход nss для работы в качестве cs в мастер режиме?
Сейчас настроил так:
отправляю
выход nss всегда нуль.
Сейчас настроил так:
Спойлер
Код: Выделить всё
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 всегда нуль.
Re: STM32 новичку в ARM что к чему
можете почитать тут
https://hubstub.ru/stm32/100-spi-stm32.html
С этой строчки
https://hubstub.ru/stm32/100-spi-stm32.html
С этой строчки
Итак, вывод NSS работает не совсем так, как привычный CS у AVR, и в режиме Master для выбора ведомого необходимо использовать GPIO.
Re: STM32 новичку в ARM что к чему
Можете почитать референс на Ф0хх и Ф3хх. Там вполне можно хардварно рулить nss. Другое дело, что в большинстве случаев это просто не нужно.
Добавлено after 3 minutes 5 seconds:
Добавлено after 3 minutes 5 seconds:
Как настроили, так и работает. А почему не режим триггера и по переполнению?iceman писал(а): В режиме bridge mode TIM1 дает пачку импульсов заданной длительностью в CCR1, но этот режим не подходит для моей задачи.
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
Не понятно почему так сделано. Как тогда лучше устанавливать вывод cs при передачи через dma?
Как понимаю устанавливать cs перед функцией
А где сбрасывать?
У меня f4.
Как понимаю устанавливать cs перед функцией
Код: Выделить всё
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_SPI_Transmit_DMA( &hspi4, array_spi, 2);У меня f4.
Re: STM32 новичку в ARM что к чему
На Ф4 только вручную, обычным ногодрыгом. Там нет хардварного nss.Alex_Golubev писал(а): У меня f4.
Как-то делал восьмиразрядный семисегментник на 2-ух 595-ых на Ф0 через ДМА. Вот там хардварный nss Ф0 хорошо ложится
- RusikOk
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Пн янв 24, 2011 01:51:48
- Откуда: Украина, Киев
- Контактная информация:
Re: STM32 новичку в ARM что к чему
написал программулину, зашил все заработало. а потом случайно обратил внимания на такие строчки в IAReоно бы все и ничего но у моего F103 всего 6кБ ОЗУ и 32кБ ПЗУ. получается IAR врет?
Код: Выделить всё
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) Re: STM32 новичку в ARM что к чему
Не факт. Быстрее всего вы заюзали область памяти которая существует физически, но не тестируется при изготовлении МК. Т.е. на свой страх и риск.
- RusikOk
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Пн янв 24, 2011 01:51:48
- Откуда: Украина, Киев
- Контактная информация:
Re: STM32 новичку в ARM что к чему
та вроди не! максимальный объем ОЗУ у этой линейки 6кБ
Добавлено after 1 minute 43 seconds:
ой! перепутал! там 20кБ оперативки а я думал, что 6)))
Добавлено after 1 minute 43 seconds:
ой! перепутал! там 20кБ оперативки а я думал, что 6)))
Re: STM32 новичку в ARM что к чему
Вообще-то хардварный NSS есть на всех STM32, но только в режиме TI.scorpi_0n писал(а): На Ф4 только вручную, обычным ногодрыгом. Там нет хардварного nss.
-
Alex_Golubev
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Вс ноя 15, 2015 05:54:13
Re: STM32 новичку в ARM что к чему
А чем режим TI отличается от motorola ? Все понял. Скажите как можно понять что данные переданы по spi с dma?
- RusikOk
- Нашел транзистор. Понюхал.
- Сообщения: 197
- Зарегистрирован: Пн янв 24, 2011 01:51:48
- Откуда: Украина, Киев
- Контактная информация:
Re: STM32 новичку в ARM что к чему
в режиме TI можно отправлять нестандартное количество бит. используют для загрузки данных в сдвиговые регистры


