1. На сайте распбери в разделе софта посмотрел последнюю лайт-версию для raspberry B+.
2. Скачал образ флэшки.
Код:
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2023-05-03/2023-05-03-raspios-bullseye-armhf-lite.img.xz
3. Разархивировал.
Код:
unxz 2023-05-03-raspios-bullseye-armhf-lite.img.xz
4. Вставил флэшку в ноутбук и посмотрел какое блочное устройство появилось в системе.
Код:
lsblk
..
/dev/sdb
..
5. Записал файл-образ на устройство.
Код:
dd if=2023-05-03-raspios-bullseye-armhf-lite.img of=/dev/sdb bs=4M
6. Можно переставлять флэшку в распбери и подключать монитор с клавиатурой, но мне лениво висеть над монитором и распутывать пыльный клубок проводов. Пэтому произвел безголовый (headless) запуск. В наши дни, как оказалось, для этого требуется:
6.1 Создать на первом фатовом разделе флэшки пустой файлик с именем ssh, что в процессе первого запуска будет воспринято системой как мое желание иметь ссш-сервер, готовый к подключению.
6.2 Создать там же на первом разделе файлик userconf, но не пустой а с парой логин:пароль. Причем пароль должен быть в виде хэша.
Код:
echo -n "oleg:" > userconf
echo "123" |openssl passwd -6 -stdin >>userconf
cat userconf
oleg:$6$1mFLvr6jSSJQw8nC$dHkcajj7j6XqarnqLJU8XvgYk4yMld93Xeile/heOWORSljjVQBNAyLC7cOfDqx9/OT0akPXvadphBrJaNPh4/
То есть логин для входа - oleg, а пароль - 123, который в безопасном виде выглядит немного по другому. Закидываем файл userconf рядом с файлом ssh, чтобы система их перенесла в конфигурацию.
6.3 Подготовить беспроводное подключение.
Допустим у нас есть точка досупа "ABC" и ключ к ней "12345678".
Код:
wpa_passphrase ABC 12345678 > wpa_supplicant.conf
получился файл wpa_supplicant.conf содержащий
Код:
network={
ssid="ABC"
#psk="12345678"
psk=04cb2dce0184e4c2e48a7cefa77b592ae1590cf1f869a7c4bca5eda12841bab4
}
Теперь его нужно дополнить, добавив несколько строк. Так выглядит измененный файл.
Код:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="ABC"
psk=04cb2dce0184e4c2e48a7cefa77b592ae1590cf1f869a7c4bca5eda12841bab4
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
}
Поместим файл wpa_supplicant.conf туда же, на раздел флэшки рядом с файлами userconf и ssh. Система при первой загрузке переместит wpa_supplicant в нужную папку и настроит нам автоматический запуск вайфая.
7. Устанавливаем флэшку в распбери и подаем питание.
Нужно подождать несколько минут, пока система произведет все первоначальные настройки, подправит разделы флэшки, настроит и запустит ssh-сервер, подключится к вайфай с указаными в файле wpa_supplicant настройками и создаст в системе пользователя с учетными данными, указанными в файле userconf. После проделанных операций распбери вроде бы перезапускается. Вобщем, ждем минут пять. По дисплею весь процесс можно было бы наблюдать, но у меня перед глазами лишь мигающий светодиод распбери.
8. Если запускаем без монитора, то думаем, как же мы узнаем айпи-адрес распбери. Я посмотрел по вайфай-маршрутизатору какой адрес он выдал распбери. В андроид-смартфоне, при раздаче, тоже можно посмотреть какие к нему устройства подключены и какие адреса им выданы. В любом случае, как запасной вариант есть монитор, на который распбери после загрузки печатает, какой она получила адрес.
9. Пытаемся зайти на распбери. Из линукса набираем команду ssh, из виндоса - устанавливаем программу putty и с её помощью пробуем подключиться.
(я в файлике хостов уже прописал для адреса распбери три имени, одно из которых rpi, чтобы не запоминать айпи)
10. Подключились. Проверяем и устанавливаем обновления.
Код:
sudo apt-get update
sudo apt-get upgrade
11. Устанавливаем минимальный набор утилит для stm32.
Код:
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install stlink-tools
Для мигания светодиодом уже достаточно.
12. Создаем папку для первого проекта.
Код:
mkdir -p stm32/projects/
Помещаем в нее архив с кодом blink.zip и распаковываем.
Переходим в папку blink
Собираем.
Код:
oleg@raspberrypi:~/stm32/projects/blink $ make clean all
rm -f main.o
rm -f main.elf
rm -f main.bin
/usr/bin/arm-none-eabi-gcc -x assembler-with-cpp -c -specs=nosys.specs -g -O0 -mcpu=cortex-m3 -mthumb -Wall -Wextra -fmessage-length=0 -no-pie -march=armv7-m -masm-syntax-unified -fno-exceptions -fno-unwind-tables -mlittle-endian -fno-rtti main.S -o main.o
/usr/bin/arm-none-eabi-gcc main.o -mcpu=cortex-m3 -march=armv7-m -mlittle-endian -masm-syntax-unified -fno-rtti -fno-exceptions -fno-unwind-tables -mthumb -Wall -specs=nosys.specs -nostdlib -nostartfiles -lgcc -Tlinker.ld -no-pie -o main.elf
/usr/bin/arm-none-eabi-objcopy -S -O binary main.elf main.bin
/usr/bin/arm-none-eabi-size main.elf
text data bss dec hex filename
100 0 0 100 64 main.elf
Прошиваем (если st-link подключен к распбери, и bluepill подключена к st-link)
Код:
oleg@raspberrypi:~/stm32/projects/blink $ make flash
st-flash --reset write main.bin 0x8000000
st-flash 1.6.1
2023-05-24T11:39:20 INFO common.c: F1 Low-density device: 10 KiB SRAM, 32 KiB flash in at least 1 KiB pages.
file main.bin md5 checksum: 29f8d7ab1e97c3ec500c6bb2df75b, stlink checksum: 0x00001f76
2023-05-24T11:39:20 INFO common.c: Attempting to write 100 (0x64) bytes to stm32 address: 134217728 (0x8000000)
2023-05-24T11:39:20 INFO common.c: Flash page at addr: 0x08000000 erased
2023-05-24T11:39:20 INFO common.c: Finished erasing 1 pages of 1024 (0x400) bytes
2023-05-24T11:39:20 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2023-05-24T11:39:20 INFO flash_loader.c: Successfully loaded flash loader in sram
1/1 pages written
2023-05-24T11:39:20 INFO common.c: Starting verification of write complete
2023-05-24T11:39:20 INFO common.c: Flash written and verified! jolly good!
Для более серьезной работы придется скачать и установить дополнительные пакеты. Какие именно - зависит от того, что используют разработчики интересующих вас проектов. Для начала скачал в папку stm32 такой набор.
Код:
CMSIS_5
STM32Cube_FW_F1_V1.7.0
STM32Cube_FW_H7_V1.7.0
STM32F10x_StdPeriph_Lib_V3.5.0
CMSIS_5, в частоности, нужен чтобы собрать код для Аист-2, а то скажете, дескать, - "Блиньк мы и сами на ардуинке сыграем, ты МУрку давай."
Мурка:
Код:
oleg@raspberrypi:~/stm32/projects/aist/build/stm32h743zi $ make clean all
rm -fR ./obj
rm -f tc1_stm32h743zi_rom.elf tc1_stm32h743zi_rom.map tc1_stm32h743zi_rom.hex tc1_stm32h743zi_rom.bin
rm -f tc1_stm32h743zi_ram.elf tc1_stm32h743zi_ram.map tc1_stm32h743zi_ram.hex tc1_stm32h743zi_ram.bin
arm-none-eabi-gcc --version
arm-none-eabi-gcc (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027]
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
arm-none-eabi-gcc -std=gnu11 -Wstrict-prototypes -c -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -ftree-vectorize -fno-math-errno -funroll-loops -fgraphite-identity -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -gdwarf-2 -fomit-frame-pointer -Wall -DARM_MATH_CM7 -DNDEBUG=1 -DCPUSTYLE_STM32H7XX=1 -DSTM32H743xx=1 -MD -MP -MF ./obj/audio.o.d -ffunction-sections -fdata-sections -I../../../../CMSIS_5/CMSIS/Core/Include -I../../../../CMSIS_5/CMSIS/DSP/Include -I../../../../CMSIS_5/CMSIS/DSP/Source -I../../../../CMSIS_5/CMSIS/DSP/PrivateInclude -I../.. -I../../inc ../../src/audio.c -o obj/audio.o
..
arm-none-eabi-gcc ./obj/audio.o ./obj/bandfilters.o ./obj/board.o ./obj/buffers.o ./obj/cmsis_dsp_forward.o ./obj/display2.o ./obj/elkey.o ./obj/encoder.o ./obj/filters.o ./obj/formats.o ./obj/gpio.o ./obj/hardware.o ./obj/irq_ctrl_gic_forward.o ./obj/keyboard.o ./obj/keymaps.o ./obj/main.o ./obj/modems.o ./obj/nvram.o ./obj/sai.o ./obj/sdcard.o ./obj/sdram.o ./obj/sequen.o ./obj/serial.o ./obj/spi.o ./obj/spislave.o ./obj/synthcalcs.o ./obj/tests.o ./obj/twi.o ./obj/wavfile.o ./obj/codecs/cs4272.o ./obj/codecs/nau8822.o ./obj/codecs/tlv320aic23.o ./obj/codecs/wm8994.o ./obj/display/display.o ./obj/display/dummy.o ./obj/display/framebuf.o ./obj/display/hd44780.o ./obj/display/ili8961.o ./obj/display/ili9225.o ./obj/display/ili9320.o ./obj/display/l2f50.o ./obj/display/lph88.o ./obj/display/ls020.o ./obj/display/ltdc.o ./obj/display/pcf8535.o ./obj/display/s1d13781.o ./obj/display/st7565s.o ./obj/display/st7735.o ./obj/display/uc1601s.o ./obj/display/uc1608.o ./obj/fatfs/diskio.o ./obj/fatfs/ff.o ./obj/fatfs/ffsystem.o ./obj/fatfs/ffunicode.o ./obj/gui/gui_framework.o ./obj/gui/gui_user.o ./obj/speex/fftwrap.o ./obj/speex/filterbank.o ./obj/speex/kiss_fft.o ./obj/speex/kiss_fftr.o ./obj/speex/mdf.o ./obj/speex/preprocess.o ./obj/speex/smallft.o ./obj/touch/gt911.o ./obj/touch/stmpe811.o ./obj/touch/touch.o ./obj/usb/usb_core.o ./obj/usb/usbd_cdc.o ./obj/usb/usbd_descriptors.o ./obj/usb/usbd_dfu.o ./obj/usb/usbd_uac.o ./obj/usb/usbh_dskio.o ./obj/usb/MSC/Src/usbh_msc.o ./obj/usb/MSC/Src/usbh_msc_bot.o ./obj/usb/MSC/Src/usbh_msc_scsi.o ./obj/test2.o ./obj/usb/USBPhy_RZ_A1.o -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -ftree-vectorize -fno-math-errno -funroll-loops -fgraphite-identity -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -nostartfiles -T./STM32H743ZI_rom.ld -Wl,-Map=tc1_stm32h743zi_rom.map,--cref -Wl,--gc-sections -lm -o tc1_stm32h743zi_rom.elf
arm-none-eabi-size --format=sysv --radix=16 tc1_stm32h743zi_rom.elf
tc1_stm32h743zi_rom.elf :
section size addr
.text 0x9f589 0x8000000
.ARM.exidx 0x8 0x809f58c
.copy.table 0x24 0x809f594
.zero.table 0x8 0x809f5b8
.data 0x10b90 0x20000000
.itcm 0x2c28 0x0
.ram_d1 0xa080 0x24000000
.bss 0x442e0 0x30000000
.noinit 0x657c0 0x2400a080
.debug_info 0x124e8b 0x0
.debug_abbrev 0xede0 0x0
.debug_loc 0x17d88a 0x0
.debug_aranges 0x36d0 0x0
.debug_ranges 0x42930 0x0
.debug_line 0xeea16 0x0
.debug_str 0x19d75 0x0
.comment 0x9f 0x0
.ARM.attributes 0x30 0x0
.debug_frame 0xcda4 0x0
Total 0x573388
arm-none-eabi-objcopy -g -O ihex -R .noinit -R .bss -R .heap tc1_stm32h743zi_rom.elf tc1_stm32h743zi_rom.hex
Даже не ожидал, что вот так вот возьмёт и соберется. Думал для начала ограничиться блиньком. (=