Например TDA7294

Форум РадиоКот • Просмотр темы - PY32 linux шпаргалка
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб янв 17, 2026 18:31:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: PY32 linux шпаргалка
СообщениеДобавлено: Вс янв 04, 2026 19:32:59 
Мучитель микросхем

Карма: 16
Рейтинг сообщений: 35
Зарегистрирован: Ср окт 15, 2008 09:33:03
Сообщений: 477
Откуда: Воронеж
Рейтинг сообщения: 0
Решил написать шпаргалку по программированию контроллеров py32 под linux.
1. Поставить сам linux. Я пробовал ubuntu 24.04 и 20.04
2. Поставить pyocd.
sudo apt install python3-pyocd
3. pyocd может использовать CMSIS-DAP или stlink адаптеры. Можно применять jlink. Там свой аналог pyocd.
я пробовал: stlink - свисток с aliexpress. CMSIS-DAP на plue pill плате. В дальнейшем используется CMSIS-DAP. stlink -все аналогично, за исключением того что втыкать его надо в гнездо компьютера, а CMSIS-DAP подключается micro usb шнурком.
4. Подключаем CMSIS-DAP проверяем его видимость

Операционкой:

~/Desktop/e$ lsusb
Bus 001 Device 009: ID 0483:572a STMicroelectronics CMSIS-DAP

и pyocd:
~/Desktop/e$ sudo pyocd list
# Probe/Board Unique ID Target
----------
0 CMSIS-DAP by ARM CMSIS-DAP 0001A0000000 n/a

5. Делаем что бы можно было работать без рута
Создаем файл /etc/udev/rules.d/51-cmsis-dap.rules

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="572a", \
MODE:="0666", \
SYMLINK+="cmsys-dap_%n"

Перегрузка компа или сервиса

6. повторяем 4 пункт без sudo. Убеждаемся что видим адаптер и без рута.

7. Качаем
git clone https://github.com/OpenPuya/PY32F0xx_Firmware.git

8. Распаковываем файл первого проекта
Вложение:
Комментарий к файлу: Первый проект
blink.zip [6.89 KiB]
Скачиваний: 15
. Появляется каталог blink. В нем находятся кроме обычных файлов символические ссылки. Располагаем каталог blink по отношению к PY32F0xx_Firmware примерно вот так

~/Desktop/e$ ls
py32 PY32F0xx_Firmware
~/Desktop/e$ ls py32
blink

Или обновляем ссылки в каталоге, что бы они были действительны.

9. Подключаем к адаптеру dev board. Она должна питаться от 3,3 вольта. Я запитывал прямо с blue pill. Соединяем землю, SWD (data), SWC (clock).

10. Файл Puya.PY32F0xx_DFP.1.2.2.pack содержит информацию для прошивки чипа. Проверяем, что чип видится pyocd

~/Desktop/e/py32/blink$ pyocd cmd -t PY32F030x6 --pack Puya.PY32F0xx_DFP.1.2.2.pack
Waiting for a debug probe to be connected...
Connected to PY32F030x6 [Running]: 0001A0000000
pyocd> core 0
Selected core 0 (Cortex-M0+) (AHB-AP#0)
pyocd>

Вот эта строчка Selected core 0 (Cortex-M0+) (AHB-AP#0) говорит что мы увидели arm cortex M0.

Отсюда уже можно стирать и программировать контроллер. Но не компилировать и отлаживать.
pyocd cmd -t PY32F003x6 --pack Puya.PY32F0xx_DFP.1.2.2.pack
Connected to PY32F003x6 [Lockup]: 0001A0000000
pyocd> core
Core 0 (Cortex-M0+) is selected
pyocd> erase


11. устанавливаем
sudo apt install gdb-multiarch
sudo apt install gcc-arm-none-eabi

12. Собираем проект
~/Desktop/e/py32/blink$ make
arm-none-eabi-gcc -c -mcpu=cortex-m0plus -mthumb -DUSE_HAL_DRIVER -DPY32F030x6 -I. -ICMSIS/Device/PY32F0xx/Include -ICMSIS/Include -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"main.d" -Wa,-a,-ad,-alms=./main.lst main.c -o main.o
arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m0plus -mthumb -DUSE_HAL_DRIVER -DPY32F030x6 -I. -ICMSIS/Device/PY32F0xx/Include -ICMSIS/Include -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"startup_py32f030xx.d" startup_py32f030xx.s -o startup_py32f030xx.o
arm-none-eabi-gcc ./main.o ./startup_py32f030xx.o -mcpu=cortex-m0plus -mthumb -specs=nano.specs -Tpy32f030x6.ld -lc -lm -lnosys -nostdlib -nostartfiles -Wl,-Map=./main.map,--cref -Wl,--gc-sections -o main.elf
arm-none-eabi-size main.elf
text data bss dec hex filename
356 0 1024 1380 564 main.elf
arm-none-eabi-objcopy -O ihex main.elf main.hex
arm-none-eabi-objcopy -O binary -S main.elf main.bin


получаем main.elf

13. Запускаем gdb сервер
pyocd gdb -t PY32F003x6 --pack Puya.PY32F0xx_DFP.1.2.2.pack
Waiting for a debug probe to be connected...
0006370 I Target type is py32f003x6 [board]
0006587 I DP IDR = 0x0bc11477 (v1 MINDP rev0) [dap]
0006632 I AHB-AP#0 IDR = 0x04770031 (AHB-AP var3 rev0) [discovery]
0006652 I AHB-AP#0 Class 0x1 ROM table #0 @ 0xe00ff000 (designer=43b:Arm part=4c0) [rom_table]
0006659 I [0]<e000e000:SCS v6-M class=14 designer=43b:Arm part=008> [rom_table]
0006663 I [1]<e0001000:DWT v6-M class=14 designer=43b:Arm part=00a> [rom_table]
0006668 I [2]<e0002000:BPU v6-M class=14 designer=43b:Arm part=00b> [rom_table]
0006671 I debugvar 'DbgMCU_APB_Fz1' = 0x0 (0) [pack_target]
0006671 I debugvar 'DbgMCU_APB_Fz2' = 0x0 (0) [pack_target]
0006671 I debugvar 'DbgMCU_CR' = 0x2 (2) [pack_target]
0006701 I CPU core #0: Cortex-M0+ r0p1, v6.0-M architecture [cortex_m]
0006705 I Setting core #0 (Cortex-M0+) default reset sequence to ResetSystem [pack_target]
0006713 I 2 hardware watchpoints [dwt]
0006719 I 4 hardware breakpoints, 0 literal comparators [fpb]
0006742 I Semihost server started on port 4444 (core 0) [server]
0006775 I GDB server started on port 3333 (core 0) [gdbserver]

На последнем сообщении он повисает и ждет работы с ним.

14. В другой консоли
gdb-multiarch main.elf
(gdb) tar rem :3333
Remote debugging using :3333
0x080000c8 in Delay (count=4601242, count@entry=5000000) at main.c:9
9 while (count--) __NOP();
(gdb) load
Loading section .isr_vector, size 0xc0 lma 0x8000000
Loading section .text, size 0xa4 lma 0x80000c0
Start address 0x08000114, load size 356
Transfer rate: 551 bytes/sec, 178 bytes/write.
(gdb) b main
Breakpoint 1 at 0x80000d0: file main.c, line 13.
Note: automatically using hardware breakpoints for read-only addresses.
(gdb) c
Continuing.

Breakpoint 1, main () at main.c:13
13 {
(gdb) n
15 RCC->IOPENR |= RCC_IOPENR_GPIOAEN; // Включить тактирование GPIOB
(gdb) n
16 GPIOA->MODER &= ~GPIO_MODER_MODE3; // Сбросить режим
(gdb) n
17 GPIOA->MODER |= GPIO_MODER_MODE3_0; // Выход
(gdb)

Все. Мы загрузили прошивку в контроллер и начали отладку.

15. Устанавливаем vscode по инструкции
https://code.visualstudio.com/docs/setu ... tributions

16. Запускаем в каталоге blink

~/Desktop/e/py32/blink$ code .

17. Устанавливаем расширение Cortex-Debug
18. .vscode/launch.json должен быть примерно такого содержания
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "main.elf",
"name": "pyocd",
"request": "launch",
"type": "cortex-debug",
"armToolchainPath": "/usr/bin",
"targetId": "py32f030x6",
"runToEntryPoint": "main",
// "runToEntryPoint": "Reset_Handler",
"showDevDebugOutput": "none",
"servertype": "pyocd",
"preLaunchCommands": [
"load"
],
"preRestartCommands": [
"monitor reset"
],
"overrideGDBServerStartedRegex": "GDB server started on port.*",
"cmsisPack": "Puya.PY32F0xx_DFP.1.2.2.pack",
"svdFile": "${workspaceRoot}/py32f030xx.svd",
},
]
}

Строчка GDB server started on port должна совпадать с тем что пишет gdb сервер в п 13. Она меняется в зависимости от версии дистрибутива.
runToEntryPoint - в комментарии что бы отлаживать с ассемблерного кода

19. Создать ссылку, что бы удовлетворить code
sudo ln -s /usr/bin/gdb-multiarch /usr/bin/arm-none-eabi-gdb

20. нажать F5 - прошивка должна быть залита и должна быть начата отладка

Примечания:
- Для stlink все то же самое. Но usb id другие в файле настроек udev.
- В качестве gdb сервера можно использовать самосборную openocd https://github.com/OlegGalizin/openocd-for-py32f0xx . Оно работает быстрее, но труднее в настройке и плюет всякие предупреждения в кончоль. Обычную openocd использовать нельзя! py32f имеет особый алгоритм программирования flash.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y