مجموعه آموزش میکروکنترلر آرم سری STM32F4 مجموعه آموزش کاملی است که جناب اقای ه.مرادمند در اسفند 95 به عنوان یک فایل آموزشی در اینترنت بصورت رایگان منتشر نموده اند.
سیسوگ با کسب اجازه از ایشون سعی میکنه قسمتهای مهم این آموزش مهم را تحت عنوان بالا به مرور منتشر نماید. با تشکر از زحمات ایشون…
این مجموعه آموزشی حاصل گزارشهایی است که در حین کار در یک شرکت خصوصی نوشتهام. قصد داشتم با تکمیل شدن و بر طرف کردن نقص ها آن را منتشر کنم که با سرعت تغییرات در میکروکنترلرها و کمبود وقت، بهتر است همین مجموعه نیز در دسترس دیگران باشد. این مجموعه آموزشی بیشتر برای میکروکنترلر stm32f429 تاکید دارد اما با تغییر کمی برای سایر میکروکنترلرهای خانواده STM و احتمالا میکروکنترلرهای آرم سایر تولیدکنندگان نیز مفید است. سعی شده است که از کتابخانههای HAL استفاده شود تا در طرحهای آینده مشکلی ایجاد نکند.
میکروکنترلرهای آرم شرکت ST
شرکت ST خانواده گستردهای از میکروکنترلرها بر اساس هسته آرم تولید کرده است. هستههای مختلف آرم از سری کورتکس (Cortex) و سایر سریهای آرم در این مجموعه یافت میشود. در این نوشتار به بررسی میکروکنترلر stm32f429bit میپردازیم که از خانواده کورتکس 4M و 32 بیتی است. دارای واحد محاسبات اعشاری FPU، شتاب دهنده زمان-واقعی با انتظار صفر برای اجرا از روی فلش است. فرکانس کاری این میکروکنترلر تا 180 مگاهرتز میرسد. دارای واحد نگهبانی از حافظه MPU است و از نظر سرعت پردازش به 255 DMIPS/1.25 DMIPS/MHz(Dhrystone 2.1) میرسد. این میکروکنترلر دارای 2 مگابایت حافظه فلش (برنامه) و 256 کیلوبایت حافظه رم است.
رابط موازی LCD با حالتهای 8080/6800 و کنترلکننده گرافیک با امکان گرافیک تا XGA است. به این ترتیب انواع LCDهای TFT بدون نیاز به مدار دیگری قابل راهاندازی است. شتاب دهنده کروم آرت برای تولید گرافیک بهتر در این میکروکنترلر وجود دارد. رابط موازی دوربین 8 تا 14 بیت با قابلیت انتقال تا 54 مگابایت در ثانیه در این میکروکنترلر تعبیه شده است.
تعدادی از امکانات دیگر این میکروکنترلر به شکل خلاصه به این ترتیب است:
- 3 عدد تبدیل کننده آنالوگ به دیجیتال 12 بیتی تا 4/2 مگا سمبل در ثانیه که اگر در حالت در همگذاری شده سه تایی کار کنند به نرخ نمونه برداری 2/7 مگاسمبل در ثانیه میرسند.
- دو عدد تبدیل گر دیجیتال به آنالوگ 12 بیتی.
- تا 17 تایمر مختلف 16 و 32 بیتی تا سرعت 180 مگاهرتز و امکانات مختلف
- 168 پایه با امکان وقفه تا سرعت 90 مگاهرتز
- امکانات ارتباطی مختلف مانند i2c، سریال، SPI، CAN، ارتباط سریال صدا SAI
- امکانات ارتباطی پیشرفته مانند درگاه USB سرعت کامل و پرسرعت (ارتباط USB پرسرعت تا سرعت 480 مگابیت در ثانیه پشتیبانی میکند.) با لایه PHY درون میکروکنترلر، MAC اترنت 10/100 با DMA اختصاصی
- ساعت زمان واقعی
شرکت ST اطلاعات این میکروکنترلر را در سندهای مختلفی ارائه داده است. مهمترین سندها برگه اطلاعات، دستنامه مرجع (RM0090) است. وسایل جانبی مختلف میکروکنترلر مانند سریال هر کدام سندهای مختلفی برای راهنمایی و توضیحات بیشتر دارند که از سایت این شرکت قابل دسترسی است. برای کتابخانههای ارائه شده نیز سند دستنامه کاربر (UM1725) موجود است.
ساختار پروژههای میکروکنترلر آرم در نرمافزار Keil
پروژه هایی که در نرم افزار Keil نوشته میشود دارای چند قسمت اساسی است. اولین قسمت تابع main کاربر است که حتما باید در فایلی قرار داشته باشد. همواره چند فایل مهم در یک پروژه وجود دارند که برخی ضروری هستند و برخی نیز بسته به پروژههای مختلف ممکن است استفاده شوند یا نه. برای مثال یک نمونه پروژه در زیر دیده میشود که شامل پوشههای مختلفی است. نام پوشهها و تعداد آنها دلخواه است ولی بهتر است فایلهای پروژه خود را دسته بندی کنید و در پوشههایی با نام های معنی دار قرار دهید. برای مثال در شکل زیر فایلهای مربوط به خود کاربر در پوشه ی Application/User قرار گرفتهاند.
مهمترین فایلهایی که باید به آنها دقت کنید در شکل زیر مشخص شدهاند:
فایل main.c که فایل اصلی برنامه شماست باید شامل تابع ()main باشد. فایل stm32f4xx_it.c شامل روال (روتین) های وقفه پروژه شماست. وقفههای مختلف که استفاده میکنید در صورت رخ دادن، تابع مربوط به خود را در این فایل اجرا میکنند. نام تابع رویداد وقفه باید همانند نامی باشد که برای آن وقفه در فایل اسمبلی startup_stm32f429xx.s تعریف شده است. برای مثال تابع وقفه تایمر به شکل زیر تعریف شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /******************************************************************************/ /* STM32F4xx Peripheral Interrupt Handlers */ /* Add here the Interrupt Handlers for the used peripherals. */ /* For the available peripheral interrupt handler names, */ /* please refer to the STartup file (STartup_STm32f4xx.s). */ /******************************************************************************/ /** * @brief This function handles TIM1 update interrupt and TIM10 global interrupt. */ void TIM1_UP_TIM10_IRQHandler(void) { /* USER CODE BEGIN TIM1_UP_TIM10_IRQn 0 */ /* USER CODE END TIM1_UP_TIM10_IRQn 0 */ HAL_TIM_IRQHandler(&htim1); /* USER CODE BEGIN TIM1_UP_TIM10_IRQn 1 */ /* USER CODE END TIM1_UP_TIM10_IRQn 1 */ } |
اگر نگاهی به فایل STartup_STm32f429xx.s بیندازید وقفه بالا را به این شکل می بینید که نام آدرس آن با نام تابع روال وقفه یکی است.
میکروکنترلر پس از بازنشانی تابع startup_stm32f429xx.s را اجرا میکند. اولین جایی که اجرا میکند تابع SystemInit است که در فایل system_stm32f4xx.c تعریف شده است.
در این فایل به تنظیم سیستم میکروکنترلر میپردازد، تنظیمات FPU، مکان جدول بردار وقفه و حافظه خارجی را پیکربندی میکند. سپس تابع main اجرا میشود.
کتابخانه لایه جدا سازی سختافزار که در آینده به تفصیل بررسی میشود حاوی راه اندازهای قسمت های مختلف میکروکنترلر است که توسط شرکت سازنده ی آن، ST، ارائه شده است. این فایل ها در پوشه Drivers/STM32F4xx_HAL_Driver قرار دارد. هر قسمتی از میکروکنترلر که در پروژه شما استفاده میشود یک یا چند کتابخانه مرتبط دارد که باید فایل c آن در این پوشه اضافه شود. مسیر فایلهای سرآیند نیز باید در تنظیمات پروژه وارد شود تا در هنگام کامپایل کردن، کامپایلر آنها را نیز پیدا کند. معمولا برای استفاده از این کتابخانهها، لازم است که در ابتدای فایل main خود #include “stm32f4xx_hal.h” را اضافه کنید.
در اکثر پروژهها چند فایل از این لایه ضروری هستند که در شکل بالا مشخص شدهاند. فایل مربوط به gpio ضروری نیست و همانطور که از نامش پیداست برای کار کردن با پایههای ورودی/خروجی میکروکنترلر میباشد. فایل cortex به تنظیمات هسته و فایل rcc به تنظیمات ساعت میکروکنترلر مرتبط است.
نکته: همواره از راه اندازهای به روز شرکت ST که در نرم افزار cubeMX ارائه میشود استفاده کنید. لزوما نباید با نرم افزار cubeMX کار کنید بلکه می توانید پوشه حاوی راه اندازهای HAL را از مسیر این نرم افزار کپی کنید و در پروژه خود استفاده کنید. این پوشه معمولا در مسیر زیر قرار دارد.
1 | C:\Users\myComputersName\STM32Cube\Repository\STM32Cube_FW_F4_V1.12.0\Drivers |
بسیاری از وسایل جانبی در راه اندازهای قدیمی به درستی کار نمیکنند. از آن جمله می توان به کارت SD، ارتباط USB، اترنت اشاره کرد.
یکی از فایل های مهم دیگر پروژه، که پس از کامپایل قابل مشاهده است، فایل تنظیمات کتابخانه LGS به نام stm32f4xx_hal_conf.h است. این فایل سرآیند در ابتدای سرآیند اصلی LGS به پروژه اضافه میشود. همواره باید بررسی کنید که تعریف های وسایل جانبی مختلف میکروکنترلر شما در این فایل به پروژه اضافه شده است. به کمک این تعریف ها، کامپایلر فایل های سرآیند وسایل جانبی مختلف را اضافه میکند. در غیر این صورت خطای نیافتن سرآیند اتفاق می افتد. همانطور که در زیر فایل تنظیمات LGS را میبینید، تعریفهای مورد نیاز از حالت کامنت خارج شدهاند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #define HAL_MODULE_ENABLED /* #define HAL_ADC_MODULE_ENABLED */ /* #define HAL_CAN_MODULE_ENABLED */ /* #define HAL_CRC_MODULE_ENABLED */ /* #define HAL_CRYP_MODULE_ENABLED */ /* #define HAL_DAC_MODULE_ENABLED */ /* #define HAL_DCMI_MODULE_ENABLED */ #define HAL_DMA_MODULE_ENABLED /* #define HAL_DMA2D_MODULE_ENABLED */ /* #define HAL_ETH_MODULE_ENABLED */ #define HAL_FLASH_MODULE_ENABLED /* #define HAL_NAND_MODULE_ENABLED */ /* #define HAL_NOR_MODULE_ENABLED */ /* #define HAL_PCCARD_MODULE_ENABLED */ /* #define HAL_SRAM_MODULE_ENABLED */ #define HAL_SDRAM_MODULE_ENABLED /* #define HAL_HASH_MODULE_ENABLED */ #define HAL_GPIO_MODULE_ENABLED #define HAL_I2C_MODULE_ENABLED /* #define HAL_I2S_MODULE_ENABLED */ /* #define HAL_IWDG_MODULE_ENABLED */ /* #define HAL_LTDC_MODULE_ENABLED */ #define HAL_PWR_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED /* #define HAL_RNG_MODULE_ENABLED */ /* #define HAL_RTC_MODULE_ENABLED */ /* #define HAL_SAI_MODULE_ENABLED */ #define HAL_SD_MODULE_ENABLED /* #define HAL_SPI_MODULE_ENABLED */ /* #define HAL_TIM_MODULE_ENABLED */ #define HAL_UART_MODULE_ENABLED /* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_IRDA_MODULE_ENABLED */ /* #define HAL_SMARTCARD_MODULE_ENABLED */ /* #define HAL_WWDG_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED /* #define HAL_PCD_MODULE_ENABLED */ /* #define HAL_HCD_MODULE_ENABLED */ |
در قسمت دوم آموزش میکروکنترلر آرم سری STM32F4 به پروژههای انجام شده روی برد زتا میپردازیم. با سیسوگ همراه باشید.
وقت بخیر
من میخوام stm32f429zit6u رو توی آلتیوم ترک کشی کنم کدوم پایه ها مخصوص پروگرامشه؟
سلام از توی دیتاشیتش میتونید پایه های مربوطه رو پیدا کنید حتی از توی stmcube هم این امکان وجود داره
سلام.میشه لینک آموزش های ایشون رو قرار بدید؟هر چی گشتم چیزی بیدا نکردم
فایل وردی هست که برامون ارسال کردند 🙂
سلام
خیلی خوبه آموزشتون و تشکر میکنم
فقط کاش وقتی واژههارو فارسی میکردید (که خیلی کار خوبی هم هست) معادل انگلیسیش رو هم مینوشتید.
برای ماها که از اول با انگلیسیش کار کردن، کلماتی مثل پیکر بندی یا توابع وقفه یا مخصوصا “سرآیند” (که این یکی رو هنوزم نمیدونم یعنی چی) خیلی گنگه.
سلام دوست عزیز
خواهش میکینم
بله حق با شماست… نویسنده تمامی کلمات را با معدل فارسی نوشته اند که گاهاً این کلمات، ما را نیز به چالش میکشند … سعی میکنیم در قسمت های بعد معادل انگلیسی را نیز اضافه کنیم.
سرآیند به عنوان ترجمه Header استفاده شده است.
موفق باشید.
تو قسمت اول باید ساخت یک یک پروژه مثلا با کیل را از صفر تا 100
تعریف می کردید بعد میرفتید سراغ معرفی قسمت های مختلف
الان خیلی گنک شده قسمت اولتون
لطفا توضیح بدهید چطور می توانیم آرم سری STM32F4 را بدون استفاده از STM32CubeMX راه اندازی کنیم
مثلا یک led چشمک بزند همین بدون شاخو برگ اضافی
بعد برید شاخو برگش بدید .
سلام دوست عزیز – بله پیشنهاد خوبیه ؛ انشالله پستی در این خصوص منتشر میکنیم
سلام
در اینجا در مورد رابط موازی LCD با حالتهای 8080/6800 و کنترلکننده گرافیک اشاره کردین ، اگه مقدوره در مورد LCD های صنعتی و نحوه انتخاب بشون و درایور های موجود هم پست کار بکنین
با تشکر
منظور شما رو از LCD های صنعتی متوجه نشدم ؛ غالبا LCD ها پارامتر هایی دارند که کاربر با توجه به نیاز خودش LCD مورد نظرش رو انتخاب میکنه ، یکی از این پارامتر ها کنترلر و نوع ارتباط اون هستش
سعی میکنیم در آینده به این موضوع نیز بپرداریم
سلام
ببخشید آموزشی که فرمودید ایشون منتشر کردند, از کجا میتونم دانلود یا تهیه کنم؟
با تشکر
سلام و درود ایشون لطف کردند و آموزش رو به صورت فایل word در اختیار ما قرار دادند ، انشالله به زودی همه رو توی سیسوگ منتشر خواهیم کرد.