CubeMX Projesini EmBitz (Em::Blocks) IDE'ye Import etme (Resimli Anlatım)

Başlatan Cemre., 16 Kasım 2016, 22:53:49

Cemre.

Merhaba,

@muhittin_kaplan Hocamın sorusu üzerine kısa bir google'lamadan sonra şöyle bir çözüm yöntemi buldum.
ST CubeMX'e EmBitz desteği eklemedikçe ya da EmBitz topluluğu CubeMX projelerini Import edecek bir plug-in geliştirmedikçe bu yöntemle
CubeMX ile oluşturulmuş HAL Lib. projelerinizi EmBitz üzerinde geliştirebilirsiniz.

Öncelikle CubeMX tarafında gerekli ayarlamaları yapıp Code Generate sayfasına geldiğinizi varsayıyorum.


Ben STM32F103C8T6 MCU ile basit bir proje oluşturdum.
Burada dikkat edilecek tek husus

Toolchain / IDE:
TrueSTUDIO

seçilecektir.

Daha sonra EmBitz altında yeni bir proje oluşturalım.
(StdPLib tick'i kaldırılacak.)


EmBitz ile oluşturduğumuz proje klasörüne gidelim.
Proje klasöründeki gereksiz dosyaları sildiğimizde son hali aşağıdaki gibi olmalı.



EmBitz IDE üzerinden proje ağacının altındaki tüm dosyaları silelim.





CubeMX ile oluşturduğumuz proje klasörüne gidelim.
Aşağıdaki seçili gösterilen dosyaları seçip kopyalayalım.



EmBitz ile oluşturduğumuz proje klasörüne gidelim ve koplayadığımız dosyaları bu klasöre yapıştıralım.
Klasörün son hali aşağıdaki gibi olmalı.


EmBitz IDE'nin proje ağacına gelip projemize sağ tıklayalım ve "Add Files Recursively..." (Toplu dosya ekleme seçeneği) seçeneği ile EmBitz proje klasörümüzün altındaki tüm dosyaları projemize dahil edelim.


Son hali şu şekilde olmalı.


Bitti sayılır...

Bu durumda derlemeye kalkarsak bir sürü hata alacağız. Ancak hataların en başında

"Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)"

hatası gözümüze çarpıyor. Bizden target MCU'yu ayrıca Define etmemizi istiyor. Ben burada hataya düşerek STM32F103C8T6 yazarak derlemeye çalıştım ancak tekrar hata aldım. Aslında kesin sonuç almak için aşağıdaki dosyanın ismine bakmak gerekiyor.


Dosyamızın ismi STM32F103xB.h, şimdi gidip define edelim.


Ve sonuç...


muhittin_kaplan

Hocam Ellerinize Sağlık, Aslında Oturup bir Tool Yazılabilir, Bu değişiklikler nerelerde hangi dosyalarda değişiklik yapıyor bakalım, sonrasında python yada c# vb net gibi birşeyde yazabiliriz.

muhittin_kaplan

delilik işte
aşağıda proje dosyası mevcut. bu bildiğiniz xml file. üzerinde oynamalar yapılabilir düşüncesindeyim.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<EmBitz_project_file>
	<EmBitzVersion release="1.00" revision="0" />
	<FileVersion major="1" minor="0" />
	<Project>
		<Option title="FA_103_UniqueID" />
		<Option pch_mode="2" />
		<Option compiler="armgcc_eb" />
		<Build>
			<Target title="Debug">
				<Option output="bin\Debug\FA_103_UniqueID.elf" />
				<Option object_output="obj\Debug\" />
				<Option type="0" />
				<Option compiler="armgcc_eb" />
				<Option projectDeviceOptionsRelation="0" />
				<Compiler>
					<Add option="-Wall" />
					<Add option="-fdata-sections" />
					<Add option="-ffunction-sections" />
					<Add option="-O0" />
					<Add option="-g3" />
				</Compiler>
				<Assembler>
					<Add option="-Wa,--gdwarf-2" />
				</Assembler>
				<Linker>
					<Add option="-eb_use_mon" />
					<Add option="-Wl,--gc-sections" />
				</Linker>
			</Target>
			<Target title="Release">
				<Option output="bin\Release\FA_103_UniqueID.elf" />
				<Option object_output="obj\Release\" />
				<Option type="0" />
				<Option create_hex="1" />
				<Option compiler="armgcc_eb" />
				<Option projectDeviceOptionsRelation="0" />
				<Compiler>
					<Add option="-O2" />
					<Add option="-g2" />
					<Add option="-fdata-sections" />
					<Add option="-ffunction-sections" />
				</Compiler>
				<Assembler>
					<Add option="-Wa,--no-warn" />
				</Assembler>
				<Linker>
					<Add option="-Wl,--gc-sections" />
				</Linker>
			</Target>
		</Build>
		<Device>
			<Add option="$device=cortex-m3" />
			<Add option="$stack=0x0100" />
			<Add option="$heap=0x0100" />
			<Add option="$lscript=./stm32f103c8_flash.ld" />
		</Device>
		<Compiler>
			<Add option="-mfloat-abi=soft" />
			<Add option="-fno-strict-aliasing" />
			<Add symbol="STM32F103C8" />
			<Add symbol="STM32F10X_MD" />
			<Add symbol="USE_STDPERIPH_DRIVER" />
			<Add directory=".\inc" />
			<Add directory=".\src" />
			<Add directory=".\cmsis" />
			<Add directory=".\SPL\inc" />
			<Add directory=".\SPL\src" />
		</Compiler>
		<Linker>
			<Add option="-eb_start_files" />
			<Add option="-eb_lib=n" />
		</Linker>
		<Unit filename="cmsis\core_cm3.h" />
		<Unit filename="cmsis\core_cmFunc.h" />
		<Unit filename="cmsis\core_cmInstr.h" />
		<Unit filename="inc\stm32f10x.h" />
		<Unit filename="inc\stm32f10x_conf.h" />
		<Unit filename="inc\system_stm32f10x.h" />
		<Unit filename="readme.txt" />
		<Unit filename="SPL\inc\misc.h" />
		<Unit filename="SPL\inc\stm32f10x_adc.h" />
		<Unit filename="SPL\inc\stm32f10x_bkp.h" />
		<Unit filename="SPL\inc\stm32f10x_can.h" />
		<Unit filename="SPL\inc\stm32f10x_cec.h" />
		<Unit filename="SPL\inc\stm32f10x_crc.h" />
		<Unit filename="SPL\inc\stm32f10x_dac.h" />
		<Unit filename="SPL\inc\stm32f10x_dbgmcu.h" />
		<Unit filename="SPL\inc\stm32f10x_dma.h" />
		<Unit filename="SPL\inc\stm32f10x_exti.h" />
		<Unit filename="SPL\inc\stm32f10x_flash.h" />
		<Unit filename="SPL\inc\stm32f10x_fsmc.h" />
		<Unit filename="SPL\inc\stm32f10x_gpio.h" />
		<Unit filename="SPL\inc\stm32f10x_i2c.h" />
		<Unit filename="SPL\inc\stm32f10x_iwdg.h" />
		<Unit filename="SPL\inc\stm32f10x_pwr.h" />
		<Unit filename="SPL\inc\stm32f10x_rcc.h" />
		<Unit filename="SPL\inc\stm32f10x_rtc.h" />
		<Unit filename="SPL\inc\stm32f10x_sdio.h" />
		<Unit filename="SPL\inc\stm32f10x_spi.h" />
		<Unit filename="SPL\inc\stm32f10x_tim.h" />
		<Unit filename="SPL\inc\stm32f10x_usart.h" />
		<Unit filename="SPL\inc\stm32f10x_wwdg.h" />
		<Unit filename="SPL\src\misc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_adc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_bkp.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_can.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_cec.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_crc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_dac.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_dbgmcu.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_dma.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_exti.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_flash.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_fsmc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_gpio.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_i2c.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_iwdg.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_pwr.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_rcc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_rtc.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_sdio.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_spi.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_tim.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_usart.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="SPL\src\stm32f10x_wwdg.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="src\main.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="src\startup_stm32f10x_md.S">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="src\system_stm32f10x.c">
			<Option compilerVar="CC" />
		</Unit>
		<Unit filename="stm32f103c8_flash.ld" />
		<Unit filename="stm32f103c8_sram.ld" />
		<Extensions>
			<code_completion />
			<debugger>
				<target_debugging_settings target="Release" active_interface="ST-link">
					<debug_interface interface_id="ST-link" ip_address="localhost" ip_port="4242" path="${EMBITZ}\share\contrib" executable="STLinkGDB.exe" description="" dont_start_server="false" backoff_time="1000" options="0" reg_filter="0" active_family="STMicroelectronics" gdb_before_conn="" gdb_after_conn="">
						<family_options family_id="STMicroelectronics">
							<option opt_id="ID_JTAG_SWD" opt_value="swd" />
							<option opt_id="ID_VECTOR_START" opt_value="0x08000000" />
							<option opt_id="ID_RESET_TYPE" opt_value="System" />
							<option opt_id="ID_LOAD_PROGRAM" opt_value="1" />
							<option opt_id="ID_SEMIHOST_CHECK" opt_value="0" />
							<option opt_id="ID_RAM_EXEC" opt_value="0" />
							<option opt_id="ID_VEC_TABLE" opt_value="1" />
							<option opt_id="ID_DONT_CONN_RESET" opt_value="0" />
							<option opt_id="ID_ALL_MODE_DEBUG" opt_value="0" />
							<option opt_id="ID_DEV_ADDR" opt_value="" />
							<option opt_id="ID_VERBOSE_LEVEL" opt_value="3" />
						</family_options>
					</debug_interface>
				</target_debugging_settings>
				<target_debugging_settings target="Debug" active_interface="ST-link">
					<debug_interface interface_id="ST-link" ip_address="localhost" ip_port="4242" path="${EMBITZ}\share\contrib" executable="STLinkGDB.exe" description="" dont_start_server="false" backoff_time="1000" options="0" reg_filter="0" active_family="STMicroelectronics" gdb_before_conn="" gdb_after_conn="">
						<family_options family_id="STMicroelectronics">
							<option opt_id="ID_JTAG_SWD" opt_value="swd" />
							<option opt_id="ID_VECTOR_START" opt_value="0x08000000" />
							<option opt_id="ID_RESET_TYPE" opt_value="System" />
							<option opt_id="ID_LOAD_PROGRAM" opt_value="1" />
							<option opt_id="ID_SEMIHOST_CHECK" opt_value="0" />
							<option opt_id="ID_RAM_EXEC" opt_value="0" />
							<option opt_id="ID_VEC_TABLE" opt_value="1" />
							<option opt_id="ID_DONT_CONN_RESET" opt_value="0" />
							<option opt_id="ID_ALL_MODE_DEBUG" opt_value="0" />
							<option opt_id="ID_DEV_ADDR" opt_value="" />
							<option opt_id="ID_VERBOSE_LEVEL" opt_value="3" />
						</family_options>
					</debug_interface>
				</target_debugging_settings>
			</debugger>
			<envvars />
		</Extensions>
	</Project>
</EmBitz_project_file>

MrDarK

@Cemre. Teşekkürler. Güzel çalışma.

Bu tarz free ide ve compilerların geliştirilmesini desteklemek lazım. Umarım ST'de böyle bir adım atar. Yandan çarklı free görünümlü paralı ideleri istemiyoruz :) Bknz baş harfi "K"
Picproje Eğitim Gönüllüleri ~ MrDarK

Cemre.

@MrDarK hocam rica ederim.

@muhittin_kaplan hocam ben de proje dosyasını incelemiştim ve bu kadar basit bir yapıda olması beni de sizin gibi düşünmeye sevk etti.

Aslında yapılan iş çok çok basit bir hal alıyor bu durumda.

CubeMX'in attollic için oluşturduğu klasöre git, gereksiz dosyaları sil. EPB uzantılı proje dosyasını oluştur ve klasör içindeki tüm dosyaların EPB dosyasında gerekli yerlere kaydını yap. Oldu bitti.

Bu durumda CubeMX orjinli oluşturulmasından tek farkı kalacak bu yöntemin. Biliyorsunuz CubeMX /*USERCODE*/ etiketleri arasına yazılan kodları silmeden tekrar init rutinlerini oluşturabiliyor. Bu da misal başta I2C eklemediğiniz projeye CubeMX üzerinden kod kaybı yaşamadan tekrar ekleme yapmanızı sağlıyor ki bence bu da çok ciddi bir özellik CubeMX'i yoğun kullananlar açısından.

Bununla ilgili de bir çalışma yapılabilirse eksiksiz bir Import plugin'i oluşturulmuş olur düşüncesindeyim.

Plugin'ler konusunda bilgi bulamadım emblocks sitesinde, sizin bilginiz var mı?

(1000'inci mesajımdan selamlar :) Kaç sene geçmiş yahu...
5buçuk sene. Size az gelebilirde, benim hayatımın 4'te biri. :D)

Ekleme.

CubeMX ile proje oluşturdum. Atollic için üretilen gereksiz dosyaları silip düzenlediğim EPB uzantılı EmBitz proje dosyasını buraya ekledim.
Sorunsuz çalıştı. MCU değişmiyorsa değiştirilecek tek yer Proje İsmi ile ilgili alanlar. Bu da 3 tane yerde vardı.

Daha sonra az önce bahsettiğim özellik için CubeMX'ten projede düzenleme yapıp tekrar kod ürettim. Bu sefer sadece atollic için tekrar oluşturulan dosyaları sildim. EPB uzantılı dosya zaten vardı çünkü. IDE'ye gittiğimde dosyalar değiştirildi güncelleyeyim mi dedi. Güncelle dedim ve USERCODE etiketleri arasında yazdığım kodlar duruyor yani bu özellik için de ekstra bir çabaya gerek yokmuş.

@muhittin_kaplan hocam minik bir plugin-script artık ne ise yazmak için kolları sıvamanın vakti geldi sanıyorum.

muhittin_kaplan

hocam plugin nasıl hazırlanıyor bilmiyorum embitz için (1,2 de hazır gelecek demişler bu arada). Attığımız taş ürküttüğümüz kurbağaya değermi adamlar "yapacağız" demişler.

Cemre.

Alıntı yapılan: muhittin_kaplan - 17 Kasım 2016, 19:01:03
hocam plugin nasıl hazırlanıyor bilmiyorum embitz için (1,2 de hazır gelecek demişler bu arada). Attığımız taş ürküttüğümüz kurbağaya değermi adamlar "yapacağız" demişler.

Yapacağız dedilerse sorun yok. Değmez tabiki. Şu haliyle zaten kullanılabiliyor.

O zaman yeni sürüm gelene kadar kopyala yapıştır ile devam edilebilir diyelim ve konuyu kapatalım :)