توی پست قبل درباره نوشتن اولین برنامه برای میکروکنترلر STM32F103 و برد BluePill مطالبی رو گفتم. استفاده از ویزارد برنامه STM32CubeIDE سرعت کار را بالا برده و با تنظیم (کانفیگ) متغیرها و توابع راحتی زیادی برای برنامه نویس و توسعه دهنده به ارمغان میآورد.
من میخواهم یک پروژه جدید بدون استفاده از ویزارد IDE بسازم و خودم فایلهاو دایرکتوری های مورد نیاز پروژهام رو بهش الحاق کنم و کامپایلر را برای مسیرهای جدید تنظیم کنم. من میخوام یک پروژه رو بصورت from Scratch در STM32CubeIDE بسازم.
۱- ابتدا با توجه به خانواده پردازنده مورد استفاده تون فایل STM32CubeFx را دانلود کنید. (در سایت st.com میتوانید اسم فایل مورد نیاز - مثلا stm32cubef1 را سرچ کنید.) من از میکروکنترلر STM32F103 استفاده میکنم و فایل (های) STM32CubeF1 را دانلود کردم. ( بسته به پردازنده x میتواند عددهای ۱،۲،۳،۴ و۷ باشه)هر دو تا فایل را دانلود کنید و محتویات فایلها را با هم همزمان در یک پوشه دلخواه استخراج (Extract) کنید. از فایلهای استخراج شده در پروژه استفاده خواهیم کرد.
۲- یک پروژه جدید میسازیم
۴- در مرحله بعد پروژه را بصورت زیر تنظیم میکنیم. دقت کنید Target Project Type حتما از نوع Empty انتخاب شود. درصورتیکه STM32Cube انتخاب شود، وارد قسمت ویزارد میشویم که در پست قبلی درباره آن صحبت شد.
در انتها با زدن دکمه Finish پروژه خالی ما ساخته خواهد شد و ما راسا اقدام به ویرایش پروژه، فایلها و آرایش فولدرها خواهیم کرد.
پروژه بصورت زیر در اختیار ما قرار میگیرد:
۵- فایلهای زیر را از پروژه حذف میکنیم:
نمایش درختی دایرکتوری پروژه به صورت زیر است:
۷- فایل های داخل فولدر stm32cubef1\Drivers\CMSIS\Include که در ابتدای این آموزش از سایت st دانلود کردیم و به همراه فایل patch با هم استخراج کردیم بصورت زیر است. فولدر Include را به همراه محتویات آن کپی میکنیم و در مسیر پروژه در پوشه CMSIS قرار میدهیم (Paste میکنیم.).
۹- در برنامه STM32CubeIDE در قسمت Project Explorer بر روی نام پروژه کلیک راست کرده و Properties را انتخاب میکنیم. در قسمت C/C++ General و بخش Paths and Symbols در سربرگ Include و بخش Include directories مقدار Inc را حذف میکنیم و مقادیر زیر را اضافه میکنیم:
با زدن دکمه Add و سپس Variables و نوشتن proj در کادر مشخص شده ProjDirPath را انتخاب میکنیم:
۷- فایل های داخل فولدر stm32cubef1\Drivers\CMSIS\Include که در ابتدای این آموزش از سایت st دانلود کردیم و به همراه فایل patch با هم استخراج کردیم بصورت زیر است. فولدر Include را به همراه محتویات آن کپی میکنیم و در مسیر پروژه در پوشه CMSIS قرار میدهیم (Paste میکنیم.).
۸- فایل های stm32f1xx.h و stm32f103xb.h و system_stm32f1xx.h را از پوشه stm32cubef1\Drivers\CMSIS\Device\ST\stm32f1xx\Include کپی میکنیم و در مسیر دایرکتوری پروژه فولدر CMSIS\Device قرار میدهیم.
۹- در برنامه STM32CubeIDE در قسمت Project Explorer بر روی نام پروژه کلیک راست کرده و Properties را انتخاب میکنیم. در قسمت C/C++ General و بخش Paths and Symbols در سربرگ Include و بخش Include directories مقدار Inc را حذف میکنیم و مقادیر زیر را اضافه میکنیم:
با زدن دکمه Add و سپس Variables و نوشتن proj در کادر مشخص شده ProjDirPath را انتخاب میکنیم:
${ProjDirPath}\Core\Inc
${ProjDirPath}\CMSIS\include
${ProjDirPath}\CMSIS\Device
${ProjDirPath}\Peripherals\Inc
STM32F103xB و USE_HAL_DRIVER
۱۲- در مسیر قرار گیری پروژه و فولدر HAL یک فولدر جدید با نام STM32F1xx_HAL_Driver میسازیم، سپس فولدر های Inc و Src را در آن ایجاد میکنیم.
در دایرکتوری stm32cubef1\Drivers\STM32F1xx_HAL_Driver دو فولدر Inc و Src قرار دارد. از فولدر Inc فایل های مورد نیاز پروژه را به ترتیب زیر انتخاب کرده و در فولدر Inc در مسیری که ایجاد کردیم قرار میدهیم.
stm32f1xx_hal.h
stm32f1xx_hal_cortex.h
stm32f1xx_hal_def.h
stm32f1xx_hal_dma.h
stm32f1xx_hal_dma_ex.h
stm32f1xx_hal_exti.h
stm32f1xx_hal_flash.h
stm32f1xx_hal_flash_ex.h
stm32f1xx_hal_gpio.h
stm32f1xx_hal_gpio_ex.h
stm32f1xx_hal_pwr.h
stm32f1xx_hal_rcc.h
stm32f1xx_hal_rcc_ex.h
stm32f1xx_hal_tim.h
stm32f1xx_hal_tim_ex.h
stm32f1xx_hal_uart.h
stm32f1xx_hal_usart.h
بصورت متناظر فایل های c. را از فولدر Src کپی کرده و در فولدر Src که ساختیم قرار میدهیم.
stm32f1xx_hal.c
stm32f1xx_hal_cortex.c
stm32f1xx_hal_dma.c
stm32f1xx_hal_exti.c
stm32f1xx_hal_flash.c
stm32f1xx_hal_flash_ex.c
stm32f1xx_hal_gpio.c
stm32f1xx_hal_gpio_ex.c
stm32f1xx_hal_pwr.c
stm32f1xx_hal_rcc.c
stm32f1xx_hal_rcc_ex.c
stm32f1xx_hal_tim.c
stm32f1xx_hal_tim_ex.c
stm32f1xx_hal_uart.c
stm32f1xx_hal_usart.c
۱۳- از مسیر stm32cubef1\Drivers\STM32F1xx_HAL_Driver\Inc فایل stm32f1xx_hal_conf_template.h را کپی میکنیم و در مسیر پروژه در دایرکتوری HAL قرار میدهیم. سپس نام فایل را به stm32f1xx_hal_conf.h تغییر میدهیم.
۱۴- مسیر دایرکتوری HAL را به Properties پروژه اضافه میکنیم.
در سربرگ Include در بخش Path and Symbols دکمه Add را میزنیم و مسیرهای زیر را اضافه میکنیم:
${ProjDirPath}\HAL\STM32F1xx_HAL_Driver\Inc
${ProjDirPath}\HAL
فایل stm32f1xx_it.h حاوی تعاریف مربوط به توابع وقفه (اینتراپت) خواهد بود.
۱۶- فایل های زیر را از مسیرهای مشخص شده در دایرکتوری stm32cubef1\Drivers\CMSIS\Device\ST\Source\Templates\system_stm32f1xx.c به مسیر دایرکتوری پروژه Core\Src کپی میکنیم.
فایل stm32cubef1\Drivers\CMSIS\Device\ST\Source\Templates\gcc\startup_stm32F13xb.s را در مسیر دایرکتوری پروژه فولدر Startup کپی میکنیم.
۱۷- ابتدا ماژولهای مورد نیاز برنامه خود را در فایل HAL\stm32f1xx_hal_conf.h که در مرحله ۱۳ ایجاد کردیم مشخص میکنیم.
برای این منظور در قسمت Module Selection تمام ماژولها را با زدن (Ctrl+7) کامنت میکنیم سپس ماژولهای مورد نیاز را Uncomment میکنیم:
#define HAL_MODULE_ENABLED
#define HAL_CORTEX_MODULE_ENABLED
#define HAL_DMA_MODULE_ENABLED
#define HAL_EXTI_MODULE_ENABLED
#define HAL_FLASH_MODULE_ENABLED
#define HAL_GPIO_MODULE_ENABLED
#define HAL_PWR_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
#define HAL_TIM_MODULE_ENABLED
#define HAL_UART_MODULE_ENABLED
#define HAL_USART_MODULE_ENABLED
۲۰- تابع SysTick_Handler وظیفه زمانبندی و ایجاد تاخیر را در توابع HAL برعهده دارد. مطابق شکل زیر هدر تابع را به فایل stm32f1xx_it.h اضافه میکنیم:
در نهایت با Build کردن برنامه از صحت اجرای برنامه اطمینان مییابیم.
در ادامه نحوه تنظیم کلاک بدون استفاده از ویزارد برنامه توضیح داده خواهد شد.
هیچ نظری موجود نیست:
ارسال یک نظر