Перейти к содержанию
    

r44083

Участник
  • Постов

    25
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о r44083

  • Звание
    Участник
    Участник
  1. Вот видео Sublime Text как IDE для STM32, кому интересно: https://youtu.be/-8scgw_qNLY В описании к видео есть уже готовый архивчик с программой, тестовым проектом и настройками. На 22-ой минуте описана эта проблема: Настроил отладку с помощью openOCD и GDB (плагин SublimeGDB). Использую микроконтроллер STM32F100RBT6B (ARM Cortex-M3). В настройках проекта для SublimeGDB пишу: "sublimegdb_workingdir": "${project_path:out/hex/}", "sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi *.elf" Вот такие настройки в Makefile для openOCD: # Настройка openocd для работы с интерфейсом и контроллером: OPENOCD_PARAMS = -c "source [find interface/stlink-v1.cfg]" OPENOCD_PARAMS += -c "transport select hla_swd" OPENOCD_PARAMS += -c "source [find target/stm32f1x.cfg]" # Настройки openocd для отладки: OPENOCD_PARAMS_DEBUG = $(OPENOCD_PARAMS) OPENOCD_PARAMS_DEBUG += -c "gdb_port 3333" OPENOCD_PARAMS_DEBUG += -c "debug_level 2" OPENOCD_PARAMS_DEBUG += -c "set WORKAREASIZE 0x2000" OPENOCD_PARAMS_DEBUG += -c "reset_config srst_only" В итоге значения регистров отображаются в некорректном виде. Как отобразить регистры в нормально виде А также вопрос: как отобразить все регистры периферии микроконтроллера? Например как это сделано в Keil (на примере NVIC):
  2. Вообщем будем ждать пока ST исправят косяк, а пока использовать: GPIOD->BSRRL |= GPIO_BSRR_BS_12 // Для установки бита GPIOD->BSRRH |= GPIO_BSRR_BS_12 // Для снятия бита
  3. В STM32F4 по другому. Регистра "GPIOA_BSRR" нет в файле описания периферии stm32f4xx.h. Такая конструкция работать не будет.
  4. Для чего в файле stm32f4xx.h, начиная со стоки №6795, расположены ниже приведенные определения? Если вы считаете, что эти маски можно как-то использовать в рамках GPIO, то приведите пожалуйста конкретный пример. #define GPIO_BSRR_BR_0 ((uint32_t)0x00010000) #define GPIO_BSRR_BR_1 ((uint32_t)0x00020000) #define GPIO_BSRR_BR_2 ((uint32_t)0x00040000) #define GPIO_BSRR_BR_3 ((uint32_t)0x00080000) #define GPIO_BSRR_BR_4 ((uint32_t)0x00100000) #define GPIO_BSRR_BR_5 ((uint32_t)0x00200000) #define GPIO_BSRR_BR_6 ((uint32_t)0x00400000) #define GPIO_BSRR_BR_7 ((uint32_t)0x00800000) #define GPIO_BSRR_BR_8 ((uint32_t)0x01000000) #define GPIO_BSRR_BR_9 ((uint32_t)0x02000000) #define GPIO_BSRR_BR_10 ((uint32_t)0x04000000) #define GPIO_BSRR_BR_11 ((uint32_t)0x08000000) #define GPIO_BSRR_BR_12 ((uint32_t)0x10000000) #define GPIO_BSRR_BR_13 ((uint32_t)0x20000000) #define GPIO_BSRR_BR_14 ((uint32_t)0x40000000) #define GPIO_BSRR_BR_15 ((uint32_t)0x80000000) На данный момент мне кажется, что это ошибка в stm32f4xx.h, потому что GPIO_BSRR_BR_x - никак не используется: //запись бита GPIOA->BSRRL |= GPIO_BSRR_BS_0; //сброс бита GPIOA->BSRRH |= GPIO_BSRR_BS_0; stm32f4xx.zip
  5. Ок, я понял. Всем спасибо. Буду использовать функцию из CMSIS.
  6. Я понимаю что вы хотите мне сказать, но мною движет желание сделать код более прозрачным.
  7. Здравствуйте, ситуация такая: использую STM32F10x и хочу без использования функций CMSIS и StdPeriphLib разрешить прерывание от SPI1. У SPI1_IRQn номер равный 35, следовательно я должен записать 1 во второй по счету регистр NVIC_ISER[1] в 4-ый бит (если считать с нуля). А так как SPI1_IRQn равен 35 (мы не можем сдвинуть 1 на 35 бит), то нам надо вычесть 32 из SPI1_IRQn (итого получается сдвигаем 1 на 3 бита и записываем это в регистр NVIC_ISER[1]). Итак у меня получается запись такого вида: NVIC->ISER[1] |= (1 << (SPI1_IRQn - 32 )); Но это выглядит плохо читаемым и не универсальным. Может кто-нибудь посоветует как лучше такие вещи делать, что бы код стал более понятным? В CMSIS например есть вот такая функция: static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ }
  8. В скором времени я выложу я ютуб видео, в котором опишу, как создать IDE для ARM с помощью Sublime Text. Конечно же везде есть свои минусы и плюсы, у такой вот сборки на основе Sublime Text, они тоже есть. Как выложу видео, то отпишусь в этой теме.
  9. Вы так говорите маргинальщина - как будто это что то плохое. По поводу em::blocks, вы бы ещё ардуино эдитор посоветовали или notepad ++ :) Вы вообще саблаймом когда-нибудь пользовались?
  10. Если вы о размере скриншотов, которые я выложил в этой теме - то я их исправил и уменьшил. А на счет того, что после использования Zadig не удается пользоваться ST-LINK CLI, то вот я специально видео снял: https://copy.com/pHXdmG1EFNLO04EC (кнопка для скачивания в правом верхнем углу)
  11. Спешу сообщить, что всё получилось. Всего то надо было нажать на паузу во время отладки и далее уже можно "шагать". На данный момент видны регистры ядра, дизассемблер и т.д. Может кто подсказать, почему не видны регистры периферии? Что я делаю не так? Кстати вот строка вывода из лога GDB (возможно тут ошибка): 19-data-list-register-names 19^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","sp","lr","pc","","","","","","","","","","xPSR","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","msp","psp","primask","basepri","faultmask","control"] То есть openocd не передает в GDB регистры периферии? Странный момент обнаружился. После использования Zadig, я уже не могу прошить микроконтроллер, так как ST-Link CLI ругается, что не видит St-link, а когда откатываю драйвер и st-link нормально работает, то перестает работать openocd ругаясь на libusb. Что же делать?
  12. Получилось! (после переключения драйвера, я обновил в диспетчере устройств текущий драйвер ST Link на тот, что скачал с сайта ST) Но вот что дальше написал простой скрипт для openocd: telnet_port 4444 gdb_port 3333 source [find interface/stlink-v1.cfg] transport select hla_swd set WORKAREASIZE 0x2000 source [find target/stm32f1x.cfg] reset_config srst_only При запуске openocd в папке проекта, в консоль выводится следующее: Когда я из Sublime Text запускаю отладку с помощью GDB, и в диалоге GDB пишу "target remote localhost:3333", то в консоли openocd появляется сообщение: "undefined debug reason 7 - target needs reset" и в консоли GDB появляется следующее: 10target remote localhost:3333 &"target remote localhost:3333\n" ~"Remote debugging using localhost:3333\n" =thread-group-started,id="i1",pid="42000" =thread-created,id="1",group-id="i1" ~"0x00000000 in ?? ()\n" *stopped,frame={addr="0x00000000",func="??",args=[]},thread-id="1",stopped-threads="all" 11-thread-select 1 10^done (gdb) 12-stack-info-frame 11^done,new-thread-id="1",frame={level="0",addr="0x00000000",func="??",args=[]} (gdb) 12^done,frame={level="0",addr="0x00000000",func="??"} (gdb) 13-stack-list-frames 13^done,stack=[frame={level="0",addr="0x00000000",func="??"},frame={level="1",addr="0x00000000",func="??"}] (gdb) 14-stack-list-arguments 1 14^done,stack-args=[frame={level="0",args=[]},frame={level="1",args=[]}] (gdb) 15-thread-info 15^done,threads=[{id="1",target-id="Remote target",frame={level="0",addr="0x00000000",func="??",args=[]},state="stopped"}],current-thread-id="1" (gdb) 16-thread-list-ids 16^done,thread-ids={thread-id="1"},current-thread-id="1",number-of-threads="1" (gdb) 17-stack-list-arguments 0 0 0 17^done,stack-args=[frame={level="0",args=[]}] (gdb) 18-stack-list-locals 0 18^done,locals=[] (gdb) Но ходить по шагам или точкам останова не получается (в логе GDB возникает ошибка: " 23-exec-next 23^error,msg="Cannot find bounds of current function" (gdb) ") в окне дизассемблера (плагина SublimeGDB) по-прежнему ничего нет, и все регистры равны нулю:
  13. Только что пробовал переключить драйвер с помощью Zadig. Ставил: WinUSB, libusbK, libusb-win32 - ничего их этого не убрало ошибку как на скриншоте.
  14. На сколько я понял, для отладки в GDB нужно запустить openocd (с параметром gdb_port 3333) и уже из gdb выполнить подключение к openocd (target remote localhost:3333). Вот я выполняю следующее: openocd -f interface/stlink-v1.cfg -f board/stm32vldiscovery.cfg И получаю ошибку:
×
×
  • Создать...