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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Reflector писал(а):
scorpi_0n писал(а): На Ф4 только вручную, обычным ногодрыгом. Там нет хардварного nss.
Вообще-то хардварный NSS есть на всех STM32, но только в режиме TI.
Разве? Даже в СТМ32Ф100 есть режим TI?
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

scorpi_0n писал(а):Разве? Даже в СТМ32Ф100 есть режим TI?
Ты прав, у F1 оказался самый старый SPI, который от F2/F4/L1... только отсутствием TI mode и отличается.
Реклама
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Вы бы лучше сказали как дергать вывод cs.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Alex_Golubev , дергай ручками, хардовый NSS узкоспециализированная хрень и в большинстве случаев бЭсполезен.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Хорошо.
Как я понял вот эта функция HAL_SPI_TxRxCpltCallback(); вызывается тогда когда происходит конец передачи данных по spi по ней можно устанавливать на ножки единицу. А какая функция вызывается когда начинается передача? Когда нужно ставить ножку в нуль.
Реклама
Прорезались зубы
Сообщения: 203
Зарегистрирован: Сб ноя 19, 2016 21:05:48

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

Хардовый NSS имеет смысл использовать в связке с NSSP (Pulse mode) для управления, например, регистрами HC595 или чем-то подобным, когда требуется после передачи очередной порции инфы размером от полубайта до 2 байт защелкнуть эту инфу поднятием ножки NSS. Но режим NSSP есть далеко не во всех микроконтроллерах. Вообще, довольно странная комплектация модулями в линейках. Вроде бы микроконтроллер мощный стоит, а модуль упрощенный. И наоборот, в маломощном контроллере навороченный модуль. Бывает, че поделать...
В обычном режиме NSS опускается, когда модуль SPI включен битом SPI_CR1_SPE. Тут тоже есть смысл использовать хардовый NSS, если в работе модуль может выключаться. Хотя бы для того, чтобы не забыть вовремя программно дернуть NSS. Потому что если не поднять NSS при выключенном модуле, можно словить ложные импульсы на приемном устройстве.
Если SPI в работе не выключается, и на шине висит только одно устройство, то дергать SS вообще не обязательно. После включения модуля SPI опускаем программный NSS и больше не паримся.
Если на одной шине висит несколько устройств, то хардовый NSS не используется. Вместо этого программно дергаются ножки SS для каждого устройства.
Режим мультимастера, думаю, рядовые граждане не используют.
Подпись убрал вместе с автором. aen
Реклама
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Есть устройства которые требуют наличия линии cs (например tdc7200).
Сделал так:
устанавливаю cs в нуль
Спойлер

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

  
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_SPI_Transmit_DMA( &hspi4, array_spi, 10);

устанавливаю cs в один
Спойлер

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

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi){
  if (hspi->Instance == hspi4.Instance)
    {
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_SET);
    }
}
Прорезались зубы
Сообщения: 203
Зарегистрирован: Сб ноя 19, 2016 21:05:48

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

Прежде, чем поднимать CS (NSS) в 1, надо а-а-бя-язательно убедиться, что передача по SPI окончилась. Для этого нужно отслеживать бит занятости BSY. Если он =1, то нужно дождаться пока будет BSY=0, это будет означать завершение текущей передачи. Иначе, последний передаваемый байт потеряется.
Подпись убрал вместе с автором. aen
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

А я с этим NSS в F0 поначалу напоролся - по умолчанию включен аппаратный NSS и SPI сразу вырубался с ошибкой "Mode Fault", т. к. модуль читал лог. 0 с незадействованной ноги NSS. Все заработало, когда я отключил аппаратный NSS записав SSM=1 и SSI=1 в регистре CR1.

Скажите, кто-нибудь пользовался CMSIS-DSP на STM32F0? Хочу БПФ использовать.

Написал такой код:

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

#define ARM_MATH_CM0
#include <arm_math.h>


void Calc_FFT()
{
  arm_rfft_instance_q15 S;
  arm_cfft_radix4_instance_q15 S_CFFT;
  
  arm_rfft_init_q15(&S, &S_CFFT, 128, 0, 0);
  
}

Чисто по приколу нажал "Make". После чего линкер выдал такое:

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

Error[Lp011]: section placement failed 
          unable to allocate space for sections/blocks with a total estimated minimum size of 0x12f94 bytes (max align 0x4) in <[0x08000000-0x08007fff]> (total  
uncommitted space 0x7f4c). 
 
  20 918 bytes of readonly  code memory 
  56 994 bytes of readonly  data memory 
   2 201 bytes of readwrite data memory 
:shock: :shock: :shock: :facepalm:

Может я что в настройках библиотеки не сделал? Должна же она как-то в F0 помещаться!
Встал на лапы
Аватара пользователя
Сообщения: 101
Зарегистрирован: Пт май 10, 2013 15:56:40

Сообщение kaschak »

Здравствуйте.
Начинаю изучение стм32, и при попытке отладки она зацикливается на одной строчке.
На 1043 строчке обработка проходит за 8 тактов и курсор остаётся на строчке, и соответственно всё по новой, получается замкнутый цикл.
Проект пишу из статьи, вроде всё понятно(на сколько возможно при моём познании вопроса), но по этой же причине даже не знаю куда копать.
ЗЫ Если отошлёте к мануалам, просьбы тыкнуть конкретно и с объяснением, а то я и с описаниями на русском раздупляюсь побуквенно(иногда буквально) и не с первого прочтения.
Вложения
st.png
(95.29 КБ) 618 скачиваний
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

kaschak писал(а):Начинаю изучение стм32, и при попытке отладки она зацикливается на одной строчке.
В пути видно 103, так что вероятно у тебя F103, а у него нет PLL2, он только у F105/107.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

kaschak писал(а):Проект пишу из статьи
Тогда не помешало бы ссылку на статью. Возможно что в ней рассматривается другая модель МК.
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

kaschak, потому что у Вас выбран STM32F10X_CL вместо STM32F10X_MD
Иван Сусанин - первый полупроводник :solder:
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

aam писал(а): Должна же она как-то в F0 помещаться!
Столкнулся с этим когда пытался прикрутить БПФ к STM32F030F4P6. В итоге написал свою функцию БПФ. :solder:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Подскажите пожалуйста где можно посмотреть пример БФП на F3.
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

А в чем, собсно, проблема портировать любой пример из сети по БПФ на F3?
Fucking static initialization order fiasco
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Попробовал этот код

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

arm_rfft_instance_q15 S;
uint32_t S_CFFT;
q15_t fft_Sbuff[128]={1,2,3};
q15_t fft_Dbuff[128];
	
 arm_rfft_init_q15(&S, S_CFFT, 128, 0);
 arm_rfft_q15(&S,fft_Sbuff,fft_Dbuff);
Он вызывает Hard_Fault
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

А чем БПФ Ивана Меллена не устраивает? На вид добротный асмовый hand-made. Соберёте gas-ом объектник и прилинкуете.

https://e2e.ti.com/support/microcontrol ... 71/t/44034
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Вы его пользовали?
Встал на лапы
Аватара пользователя
Сообщения: 101
Зарегистрирован: Пт май 10, 2013 15:56:40

Сообщение kaschak »

Myp3ik писал(а):kaschak, потому что у Вас выбран STM32F10X_CL вместо STM32F10X_MD
Мда, ваша правда, выбирал по аналогии с название мк, вот и не угадал. Спасибо большое. Чувствую мне нужно более подробное руководство по освоению. Да кстати хороший вопрос - есть ли такое руководство? чтоб разжовано и на русском, а то с моим ангицким я освою когда всё устареет. Вот скажем мне попадалась разжованая до нельзя информация о GPOI и RCC, так теперь для меня текст программы не выглядит тарабарщиной, может и не понимаю почти ничего, но хотя б логику вижу хоть какую то. Читаю соответствующую тему здесь на форуме, но пока не густо.
Ответить

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