Дрбанана
Чт, 6 октября 2016 г. 13:19
Обычно я программирую плату STM32 со ST Link, но проблема в том, что я не могу отлаживать, поскольку она не связана через серийный. Теперь мне интересно, есть ли метод, который может отправлять струны из MCU на ПК через SWO, чтобы я мог использовать утилиту ST Link и ее «printf через SWO» ?
Стивестронг
Чт, 6 октября 2016 г., 14:40
Ну, если вы просто хотите отладить, у вас уже есть правильный инструмент (адаптер Stlink) в вашей руке. Вам просто нужно смешать его с небольшим количеством SW на вашем ПК (Eclipse + OpenOCD), и там у вас есть.
Функция SWO была бы интересной для меня.
Функция SWO была бы интересной для меня.
Rogerclark
Чт 06 октября 2016 г., 20:53
Есть способ отправить обратные струны отладки stlink (или любой программист SWD), но из того, что я видел, это, кажется, не широко используется.
Почему бы просто не подключить USB к серийному адаптеру с USART1 (PA9 и PA10),
Почему бы просто не подключить USB к серийному адаптеру с USART1 (PA9 и PA10),
Сжимать
Чт 06 октября 2016 г., 21:39
STDIO через SWO требует некоторой инициализации во время запуска и функции, основанной на CMSIS, ITM_SENDCHAR (), с этим очень легко расширить класс потока, чтобы использовать его в качестве PUTCHAR. Дополнительный код для использования SWO более или менее такой же, как UART, и вам нужна специальная программа для его чтения (OpenOCD, утилита ST Link и т. Д.).
Я протестировал с плагином Arm Eclipse (он может быть включен во время создания проекта), но, наконец, я думаю, что использование UART для этого - лучший вариант. Лично за трудные моменты, которые я предпочитаю отлаживать с ST-Link напрямую (с точками останова, выполнением шага и т. Д.)
Хотя SWO работает с досками Nucleo, это не работает с клонами ST-Link V2, поскольку SWO не существует.
Я протестировал с плагином Arm Eclipse (он может быть включен во время создания проекта), но, наконец, я думаю, что использование UART для этого - лучший вариант. Лично за трудные моменты, которые я предпочитаю отлаживать с ST-Link напрямую (с точками останова, выполнением шага и т. Д.)
Хотя SWO работает с досками Nucleo, это не работает с клонами ST-Link V2, поскольку SWO не существует.
Martinayotte
Пт, 07 октября 2016 г., 13:50
Там кто -то, кто взломал клонов Stlink, чтобы добавить на них линию SWO:
http: // www.Eevblog.com/forum/microcontr ... NK-Clones/
http: // www.Eevblog.com/forum/microcontr ... NK-Clones/
Олли
Пт, 07 октября 2016 г., 15:10
Лично мне нравится отлаживать с ST-Link. Есть много вариантов использования, когда операторы отслеживания не работают.
Если однажды, Arduino или STM32Duino получит поддержку отладчика, я надеюсь, что это пойдет на шаг вперед и использует все возможности, построенные на платформе M3. Пожалуйста, посмотрите на следующий блог, объясняющий и демонстрируя эти возможности.
http: // EssentialScrap.com/tips/arm_trace/теория.HTML
Ура, Олли
Если однажды, Arduino или STM32Duino получит поддержку отладчика, я надеюсь, что это пойдет на шаг вперед и использует все возможности, построенные на платформе M3. Пожалуйста, посмотрите на следующий блог, объясняющий и демонстрируя эти возможности.
http: // EssentialScrap.com/tips/arm_trace/теория.HTML
Ура, Олли
Пито
Пт, 07 октября 2016 г., 16:24
Там кто -то, кто взломал клонов Stlink, чтобы добавить на них линию SWO:
Интересно последний пост в ветке
Я понял это, но все еще ждал, нажимая на курок (Как у меня в настоящее время есть только один stlink dongle..)
Интересно последний пост в ветке
Я понял это, но все еще ждал, нажимая на курок (Как у меня в настоящее время есть только один stlink dongle..)
Rogerclark
Пт, 07 октября 2016 г., 20:07
Олли
Существует активная поток @stevestrong, где он теперь использует плагин Eclipse + Arduino.
Это может быть лучшим из обоих миров, но похоже, что установка немного сложна.
Я не думаю, что Arduino IDE получит поддержку отладчиков в любое время в ближайшем будущем, так как для Avr Arduino теперь рекомендует использовать Aml Поддержка - это не то, чего захотят новички (но я думаю, что поддержка отладки облегчает для начинающих для начинающих, даже веб -браузеры теперь поставляются с отладчиками JavaScript по умолчанию)
Существует активная поток @stevestrong, где он теперь использует плагин Eclipse + Arduino.
Это может быть лучшим из обоих миров, но похоже, что установка немного сложна.
Я не думаю, что Arduino IDE получит поддержку отладчиков в любое время в ближайшем будущем, так как для Avr Arduino теперь рекомендует использовать Aml Поддержка - это не то, чего захотят новички (но я думаю, что поддержка отладки облегчает для начинающих для начинающих, даже веб -браузеры теперь поставляются с отладчиками JavaScript по умолчанию)
victor_pv
Солнце 15 января 2017 г. 2:57 утра
Дрбанана писала:Обычно я программирую плату STM32 со ST Link, но проблема в том, что я не могу отлаживать, поскольку она не связана через серийный. Теперь мне интересно, есть ли метод, который может отправлять струны из MCU на ПК через SWO, чтобы я мог использовать утилиту ST Link и ее «printf через SWO» ?
victor_pv
Солнце 19 февраля 2017 г. 18:11
У меня было некоторое время, чтобы проверить класс SWO с J-Link и ST-Link, отлично работает на обоих.
Он красиво печатает информацию примерно в 2 МГц в Stlink и 4.5 МГц в SWO Viewer.
Теперь у меня есть проблема с #define и ifdef в Arduino Ide.
Это прекрасно работает как в Eclipse, так и в Arduino IDE, если я определяю Swodebug, но если я прокомментирую его «#Define Swodebug», чтобы устранить вывод отладки, то в Arduino это не компилируется:
Он красиво печатает информацию примерно в 2 МГц в Stlink и 4.5 МГц в SWO Viewer.
Теперь у меня есть проблема с #define и ifdef в Arduino Ide.
Это прекрасно работает как в Eclipse, так и в Arduino IDE, если я определяю Swodebug, но если я прокомментирую его «#Define Swodebug», чтобы устранить вывод отладки, то в Arduino это не компилируется:
uint8 SPIClass::dmaSendRepeat(uint16 length)
{
if (length == 0) return 1;
dma_set_num_transfers(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, length);
dma_enable(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);// enable transmit
if (_currentSetting->TXcallback){
return 0;
}
uint32_t m = millis();
uint8 b = 0;
while ((dma_get_isr_bits(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel) & DMA_ISR_TCIF1)==0) {//Avoid interrupts and just loop waiting for the flag to be set.
if ((millis() - m) > DMA_TIMEOUT) { b = 2; break; }
}
dma_clear_isr_bits(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);
while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..."
while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI."
dma_disable(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);
spi_tx_dma_disable(_currentSetting->spi_d);
//uint16 x = spi_rx_reg(_currentSetting->spi_d); // dummy read, needed, don't remove!
return b;
}
void SPIClass::dmaSendSet(void * transmitBuf, bool minc)
{
uint32 flags = ( (DMA_MINC_MODE*minc) | DMA_FROM_MEM | DMA_TRNS_CMPLT);
dma_init(_currentSetting->spiDmaDev);
// TX
spi_tx_dma_enable(_currentSetting->spi_d);
dma_xfer_size dma_bit_size = (_currentSetting->dataSize==SPI_DATA_SIZE_16BIT) ? DMA_SIZE_16BITS : DMA_SIZE_8BITS;
dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size,
transmitBuf, dma_bit_size, flags);// Transmit buffer DMA
}
uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc)
{
dmaSendSet(transmitBuf, minc);
return dmaRepeat(length);
}
Стивестронг
Солнце 19 февраля 2017 г. 18:37
Вы пробовали:
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:433:26: error: 'class SPISettings' has no member named 'receiveCallback'
if (_currentSetting->receiveCallback){
^
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp: At global scope:
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:463:7: error: prototype for 'uint8 SPIClass::dmaTransfer(uint8*, uint8*, uint16)' does not match any in class 'SPIClass'
uint8 SPIClass::dmaTransfer(uint8 *transmitBuf, uint8 *receiveBuf, uint16 length) {
^
In file included from C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:32:0:
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.h:306:8: error: candidate is: uint8 SPIClass::dmaTransfer(void*, void*, uint16)
uint8 dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length);
^
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp: In member function 'uint8 SPIClass::dmaSendRepeat(uint16)':
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:499:26: error: 'class SPISettings' has no member named 'transmitCallback'
if (_currentSetting->transmitCallback)
^
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp: At global scope:
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:563:2: error: expected unqualified-id before '/' token
*/
^
C:\Users\S\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI\src\SPI.cpp:563:2: error: expected constructor, destructor, or type conversion before '/' token
victor_pv
Пн 20 февраля 2017 г. 12:13
Стивестронг написал:Вы пробовали:
#include
Rogerclark
Пн 20 февраля 2017 г., 7:23 утра
Вы пытались добавить это в любую доски.TXT или платформа.txt, чтобы он был применен ко всем файлам, которые выполняются
Я подозреваю, что проблема в том, что его необходимо определить во всем мире, и если вы только определите его в эскизе, к которому он только применяется, включает в себя непосредственно набросок, а не ни одним из других основных файлов
Вы также можете попробовать поместить это в что -то вроде Arduino.H, как я думаю, это может быть включено в большинство файлов (хотя не все)
Я подозреваю, что проблема в том, что его необходимо определить во всем мире, и если вы только определите его в эскизе, к которому он только применяется, включает в себя непосредственно набросок, а не ни одним из других основных файлов
Вы также можете попробовать поместить это в что -то вроде Arduino.H, как я думаю, это может быть включено в большинство файлов (хотя не все)
Стивестронг
Пн 20 февраля 2017 г. 8:28 утра
Проверьте параметры компиляции/сборки, возможно, один из них отменяет ваш определение.
victor_pv
Пн 20 февраля 2017 г. 16:11
Я проверил варианты компиляции/сборки, и это не перезаписывает.
Ничто не идет не так, когда я сам объявляю функции в INO (или, скорее, некоторые из них). Кажется, что Arduino Ide ставит функции перед #Define, если есть только PIN -один, и #IFDEF, но не делает это там, где есть другой #Define.. В любом случае, кажется, совершенно проблема Arduino IDE и ничего больше. Поскольку я нашел способ обойти это, если это произойдет снова, я могу перейти к другим вещам.
Спасибо вам обоим за предложения.
Ничто не идет не так, когда я сам объявляю функции в INO (или, скорее, некоторые из них). Кажется, что Arduino Ide ставит функции перед #Define, если есть только PIN -один, и #IFDEF, но не делает это там, где есть другой #Define.. В любом случае, кажется, совершенно проблема Arduino IDE и ничего больше. Поскольку я нашел способ обойти это, если это произойдет снова, я могу перейти к другим вещам.
Спасибо вам обоим за предложения.
Стивестронг
Пн 20 февраля 2017 г., 17:47
Кстати, какую версию IDE вы используете, и есть эта проблема?
victor_pv
Пн 20 февраля 2017 г. 18:11
Стивестронг написал:Кстати, какую версию IDE вы используете, и есть эта проблема?
Ddrown
Пн 20 февраля 2017 г., 21:26
victor_pv написал:
uint32_t flags = (DMA_MINC_MODE | DMA_FROM_MEM);
if (!transmitBuf) {
transmitBuf = &ff;
flags &= ~DMA_MINC_MODE;
}
dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size,
transmitBuf, dma_bit_size, flags);
victor_pv
Пн 20 февраля 2017 г., 21:51
DDROWN написал:
Кроме того, какова была строка выше определения с точками?
Кроме того, какова была строка выше определения с точками?
Ddrown
Вт 21 февраля 2017 г. 12:42
victor_pv написал:DDROWN написал:
Кроме того, какова была строка выше определения с точками?
Кроме того, какова была строка выше определения с точками?
Стивестронг
Вт 21 февраля 2017 г. 8:41
Насколько я помню, репо arduino_stm32 поддерживает только Arduino IDE версию 1.6.9 и выше. Так обновление...