مقدمه
این مجموعه آموزشی بیشتر برای میکروکنترلر stm32f429 تاکید دارد اما باتغییرکمی برای سایر میکروکنترلرهای خانواده STM و احتمالا میکروکنترلرهایARM سایر تولیدکنندگان نیز مفید است. سعیشدهاست که از کتابخانههای HAL استفاده شود تا در طرحهای آینده مشکلی ایجاد نکند.
میکروکنترلرهای آرم شرکت ST
شرکت ST خانواده گستردهای از میکروکنترلرها براساس هسته آرم تولیدکردهاست. هستههای مختلف آرم از سری کورتکس (Cortex) و سایر سریهای آرم در این مجموعه یافت میشود. در این نوشتار بهبررسی میکروکنترلر stm32f429bit میپردازیم که از خانواده کورتکس ۴M و ۳۲بیتی است. دارای واحد محاسبات اعشاری FPU، شتابدهنده زمان-واقعی با انتظار صفر برای اجرا از روی فلش است. فرکانس کاری این میکروکنترلر تا ۱۸۰مگاهرتز میرسد. دارای واحد نگهبانی از حافظه MPU است و ازنظر سرعت پردازش به ۲۵۵ DMIPS/۱.۲۵ DMIPS/MHz(Dhrystone ۲.۱) میرسد. این میکروکنترلر دارای ۲مگابایت حافظه فلش(برنامه) و ۲۵۶کیلوبایت حافظه رم است. رابط موازی LCD با حالتهای ۸۰۸۰/۶۸۰۰ و کنترلکننده گرافیک با امکان گرافیک تا XGA است. به اینترتیب انواع LCDهای TFT بدوننیازبه مدار دیگری قابل راهاندازی است. شتابدهنده کروم آرت برای تولید گرافیک بهتر در این میکروکنترلر وجود دارد. رابط موازی دوربین ۸تا ۱۴بیت با قابلیت انتقال تا ۵۴مگابایت درثانیه در این میکروکنترلر تعبیهشدهاست. تعدادیاز امکانات دیگر این میکروکنترلر بهشکل خلاصه بهاینترتیب است:
- ۳عدد تبدیلکننده آنالوگبه دیجیتال ۱۲بیتی تا ۴/۲مگاسمبل درثانیه که اگر درحالت درهمگذاریشده سهتایی کار کنند به نرخ نمونهبرداری ۲/۷مگاسمبل درثانیه میرسند.
- دوعدد تبدیلگر دیجیتال به آنالوگ ۱۲بیتی.
- تا ۱۷تایمر مختلف ۱۶و ۳۲بیتی تا سرعت ۱۸۰مگاهرتز و امکانات مختلف
- ۱۶۸پایه با امکان وقفه تا سرعت ۹۰مگاهرتز
- امکانات ارتباطی مختلف مانند i2c، سریال، SPI، CAN، ارتباط سریال صدا SAI
- امکانات ارتباطی پیشرفته مانند درگاه USB سرعت کامل و پرسرعت(ارتباط USB پرسرعت تا سرعت ۴۸۰مگابیت درثانیه پشتیبانی میکند) با لایه PHY درون میکروکنترلر، MAC اترنت ۱۰/۱۰۰ با DMA اختصاصی
- ساعت زمان واقعی
شرکت ST اطلاعات این میکروکنترلر را در سندهای مختلفی ارائهدادهاست. مهمترین سندها برگه اطلاعات، دستنامه مرجع (RM0090) است. وسایل جانبی مختلف میکروکنترلر مانند سریال هرکدام سندهای مختلفی برای راهنمایی و توضیحات بیشتر دارند که از سایت این شرکت قابلدسترسی است. برای کتابخانههای ارائهشده نیز سند دستنامه کاربر (UM1725) موجود است.
ساختار پروژههای میکروکنترلر آرم در نرمافزار Keil
پروژههایی که در نرمافزار Keil نوشته میشود دارای چندقسمت اساسی است. اولین قسمت تابع main کاربر است که حتما باید در فایلی قرارداشتهباشد. همواره چند فایل مهم در یک پروژه وجود دارند که برخی ضروری هستند و برخی نیز بستهبه پروژههای مختلف ممکناست استفادهشوند یانه. برایمثال یک نمونه پروژه در زیر دیده میشود که شامل پوشههای مختلفی است. نام پوشهها و تعداد آنها دلخواه است ولی بهتر است فایلهای پروژه خود را دستهبندی کنید و در پوشههایی با نامهای معنیدار قراردهید. برایمثال در شکلزیر فایلهای مربوطبه خود کاربر در پوشهی Application/User قرارگرفتهاند.
مهمترین فایلهایی که باید به آنها دقتکنید در شکلزیر مشخص شدهاند:
فایل main.c که فایل اصلی برنامه شماست باید شامل تابع ()main باشد. فایل stm32f4xx_it.c شامل روال(روتین)های وقفه پروژه شماست. وقفههای مختلف که استفاده میکنید درصورت رخدادن، تابع مربوطبه خود را در این فایل اجرا میکنند. نام تابع رویداد وقفه باید همانند نامی باشد که برای آن وقفه در فایل اسمبلی startup_stm32f429xx.s تعریف شدهاست. برایمثال تابع وقفه تایمر بهشکلزیر تعریفشدهاست.
فایل main.c که فایل اصلی برنامه شماست باید شامل تابع()main باشد. فایل stm32f4xx_it.c شامل روال(روتین)های وقفه پروژه شماست. وقفههای مختلف که استفاده میکنید درصورت رخدادن، تابع مربوط به خود را در این فایل اجرا میکنند. نام تابع رویداد وقفه باید همانند نامی باشد که برای آن وقفه در فایل اسمبلی startup_stm32f429xx.s تعریفشدهاست. برایمثال تابع وقفه تایمر بهشکلزیر تعریفشدهاست.
/******************************************************************************/ /* 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 را از مسیر این نرمافزار کپیکنید و در پروژه خود استفادهکنید. این پوشه معمولا در مسیر زیر قرار دارد.
C:\Users\myComputersName\STM32Cube\Repository\STM32Cube_FW_F4_V1.12.0\Drivers
بسیاریاز وسایلجانبی در راهاندازهای قدیمی بهدرستی کار نمیکنند. از آنجمله میتوان به کارت SD، ارتباط USB، اترنت اشارهکرد. یکیاز فایلهای مهم دیگر پروژه، که پساز کامپایل قابلمشاهدهاست، فایل تنظیمات کتابخانه LGS به نام stm32f4xx_hal_conf.h است. این فایل سرآیند در ابتدای سرآیند اصلی LGS به پروژه اضافه میشود. همواره باید بررسیکنید که تعریفهای وسایل جانبی مختلف میکروکنترلر شما در این فایل به پروژه اضافهشدهاست. به کمک این تعریفها، کامپایلر فایلهای سرآیند وسایل جانبی مختلف را اضافه میکند. درغیر اینصورت خطای نیافتن سرآیند اتفاق می افتد. همانطورکه در زیر فایل تنظیمات LGS را میبینید، تعریفهای موردنیاز ازحالت کامنت خارج شدهاند.
#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 */
در قسمت دوم آموزش میکروکنترلر ARM سری STM32F4 به پروژههای انجامشده روی برد زتا میپردازیم. با ما همراه باشید.
منبع: سیسوگ