سلام دوستان در دومین آموزشمون میخوایم باهم GPIO میکرو STM32F10X رو باهم ست کنیم؛ در اموزش قبل یاد گرفتیم که چطور میشه یک پروژه ساخت و فایل های CMSIS رو بهش اضافه کرد، پس باهم ادامه راه رو میریم.
آموزش میکروکنترلر های arm سری stm32f10x جلسه 2
جلسه قبل : آموزش میکروکنترلر های arm سری stm32f10x جلسه 1
واسه ی ست کردن GPIO یا به قولی روشن کردن یک LED ما باید دوتا کار انجام بدیم اول اینکه باید RCC رو تنظیم کنیم و دوم اینکه باید GPIO رو تنظیم کنیم؛ برای تنظیم کردنشون باید لایبراری هاشون رو به پروژه اضافه کنیم؛ خب برای اضافه کردن لایبراری ها مثل قبل یک گروه جدید ایجاد کنیم تا پروژمون منظم تر بشه اسمشو هم بهتره بذارین CMSIS Driver؛ برای اضافه کردن لایبراری ها دوبار روی همون گروه جدیدی که ساختین کلیک میکنید و مسیر CMSIS_Liberary\STM32F10x_StdPeriph_Driver\src رو میرین و فایل های stm32f10x_gpio.c و stm32f10x_rcc.c رو با دابل کلیک روی فایل به پروژه اضافه میکنید :
پروژه رو که کامپایل کنیم دوتا ارور داره؛ که واسه حل اونها باید کار های زیر رو انجام داد :
1) به کامپایلر بگیم ما داریم از کتابخانه CMSIS استفاده میکنیم، که عبارت USE_STDPERIPH_DRIVER رو باید دیفاین کنیم، برای جدا کردن دو دیفاین از هم از ویرگول استفاده میکنیم.
حالا پروژه رو کامپایل میکنیم میبینیم، چهار تا ارور میده …. اصلا نترسید.
2) ما فایل های C. رو به پروژه اضافه کردیم اما h. رو نه؛ خب باید مسیر فایل h. رو هم به پروژه بدیم برای این کار مانند تصویر زیر عمل میکنیم :
و مسیر CMSIS_Liberary\STM32F10x_StdPeriph_Driver\inc رو میریم و پوشه inc رو انتخاب میکنیم و روی گزینه select folder کلیک میکنیم؛ حالا یه کار دیگه هم باید بکنیم که ارورا تمام بشن باید یک هدر فایل با نام conf.h رو توی پوشه پروژه اضافه کنیم ( انتهای اموزش میذارمش )؛ چون این فایل h. هست و ما اونو توی پوشه پروژه کپی کردیم باید دقیقا مثل بالا مسیر پروژه رو هم به کامپایلر بگیم؛ حالا فایل conf.h چی هست؟ در واقع این فایل میاد لایبراری cmsis رو راه اندازی میکنه.
خب حالا دیگه ارور هامون تمام شد و میریم سراغ کد نویسی؛ البته وقتی از cmsis استفاده میکنیم نیازی به کدنویسی نیست و فقط کپی میکنیم؛ ابتدا باید کلاک پورتی رو که میخوایم استفاده کنیم رو فعال کنیم. مثلا میخوایم پورت c پین 5 رو فعال کنیم؛ خب نگاهی میکنیم به دیتاشیت :
همینطور که میبینید پورت c کلاکش متصل هست به باس APB2 پس ما باید مثل زیر عمل کنیم :
اگه کشوی function خالی بود کیل رو ببندید و باز کنید درست میشه؛ حالا تابع :
1 |
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) |
رو داخل تابع مین کپی کنید تا پرش کنیم؛ قسمت اولش میگه کدوم پورت یا پریفرال رو میخوایی فعال کنید؟ که تمامی پورت ها یا پری فرال هایی که به این باس وصل هستش رو با خط سبز بالاش نوشه ما میخوایم پورت c رو فعال کنیم پس عبارت RCC_APB2Periph_GPIOC رو از داخل سبز ها کپی میکنیم و در قسمت اول قرار میدیم؛ قسمت دوم هم باید بنویسید ENABLE یعنی فعال باشه یا غیر فعال که ENABLE رو هم میتونید از زیر همونا کپی کنید.
خب rcc تنظیم شد مونده تنظیمات gpio برای تنظیمات gpio باید یک استراکچر یا ساختار رو پر کنید که شامل یک سری متغیر هاست و این متغیر ها تنظیمات gpio ما رو در برمیگره.
برای این استراکچره باید عبارت GPIO_InitTypeDef رو از مسیر نشون داده شده در بالای تابع مین قرار بدین، به این صورت :
1 |
GPIO_InitTypeDef GPIO_led; |
حالا باید تک تک استراچر بالا رو پر کنیم، به صورت زیر :
اسراکچر رو میزنیم و بعد دات یک نوار مانند زیر باز میشه که ما باید بر اساس نیازمون پرشون کنیم، ترتیب مهم نیست اولی مود کاریه که اینجا هشتا مود داریم :
1 2 3 4 5 6 7 8 |
GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP |
انشاالله کم کم با همشون اشنا میشیم الان ما که میخوایم با پاییه میکرو یک led رو روشن کنیم مود GPIO_Mode_Out_PP استفاده میکنیم . یعنی خروجی که با مقاومت داخلی پوش پول شده.
وقتی نشان گر موس وسط نوشته موس باشه و شما کلید f12 رو بزنید وارد صفحه ای میشه که تمام حالت های مود و سرعت و پایه ها رو گفته و نیازی به تایپشون نیست، بر اساس نیازمون استراکچر رو به شکل زیر پر میکنیم :
قسمت speed هم مربوط به کلاک میشه میتونید یکی از سه حالت :
1 2 3 |
GPIO_Speed_10MHz GPIO_Speed_2MHz GPIO_Speed_50MHz |
10، 2 و 50 مگ رو بهش بدین و pin تون رو هم میگن کدومه و در نهایت باید تمام تنظیماتتون رو در یک تابع init خاتمه بدید :
این تابع رو، اخر خط هامون کپی میکنیم و پرش میکنیم.در قسمت پورتمون رو میگیم قسمت دوم اسم استراکچرمون رو کپی میکنیم با یک & قبلش چون یک اشاره گره؛ در اخر هم از همون توابع تابع
1 |
GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal) |
رو انتخاب میکنیم که از اسمش مشخصه کارش چیه ؛ قسمت اول میگیم کدوم پورت قسمت دوم کدوم پین و قسمت سوم میگیم یک باشه یا صفر.
1 2 3 4 5 6 7 8 9 10 11 |
#include "stm32f10x.h" GPIO_InitTypeDef GPIO_led; int main() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_led.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_led.GPIO_Speed=GPIO_Speed_50MHz; GPIO_led.GPIO_Pin=GPIO_Pin_5; GPIO_Init(GPIOC,&GPIO_led); GPIO_WriteBit(GPIOC,GPIO_Pin_5,1); while(1){} } |
مهمان
با سلام و عرض تشکر
فایل conf.hخراب هست اگر زحمت نمیشه اصلاح کنید یا راهنمایی بفرمایید چطور دانلود کنیم
مهمان
این تنظیمات رو هم بصورت خودکار انجام میده درسته؟.انجام این تنظیمات به صورت دستی چه مزیتی داره؟
مهمان
سلام . فیلی که در آخر پروژه گذاشته بودین خراب شده ظاهرا باز نمیشه .لطافا درستش کنید. ممنون
مدیر سایت
سلام-این مطلب فیلمی نداره که؟
مهمان
سلام خسته نباشد برای آموزش خوبتون
من وقتی یک پین رو با تابع togglePin صفر و یک میکنم بدرستی کار میکنه:
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
ولی وقتی writePin میخوام صفر و یک کنم کار نمیکنه:
HAL_GPIO_WritePin((GPIOC,GPIO_PIN_13,1);
HAL_Delay(1000);
HAL_GPIO_WritePin((GPIOC,GPIO_PIN_13,0);
میشه راهنمایی بفرمایید
میکرو مورد استفاده ام stm32f103c8t6 است
مدیر سایت
سلام – من Stm کار نکردم ولی یه مورد کوچیک رو شما تست کن – بعد 0 کردن پایه فوق دیلای نزاشتید شما.
مهمان
سلام بله شما درست میفرمایید
درست شد خیلی ممنون
بنده تازه کار هستم میخواستم یک تست برای شروع بکنم
مهمان
سلام من این برنامه رو شبیه سازی میکنم جواب خروجی رو یه خط دائم صاف میبینم…میشه در مورد شبیه سازی هم توضیحاتی بدید تشکر
مهمان
سلام -> یه نظری میدم -> تجربه شخصی هست -> از زمانیکه AVR کار میکرده ام تا الان -> بهتر نبود مطالب رو رجیستری بیان میکردین ؟ -> اگر منت بگذارین من میتونم مطالب رو از صفر تاصد رجیستری آموزش بدهم
مهمان
سلام آقا خدایی دمت گرم با این سایتت
یک چیزی
فایلی که قرار دادی روی سایت conf.h باز نمیشه مشکل داره
مهمان
چطوری تم رو مشکی کردید یاد بدید چشمام دیگه نمیبینه
مدیر سایت
این برا کد سایت هستش و نه توی کاپایلر
مهمان
این فایلی که گذاشتین برا دانلود خرابه
انزیپ نمیشه
باتشکر
مدیر سایت
الان تست کردم – سالمه – دوباره دانلود کنید.
مهمان
سلام بخدا باز نمیشه فایل conf.h
مهمان
سلام
خدا قوت…
چجوری پروگرمش کنیم؟!!
چه نوع پروگرامری می خواد؟
با تشکر
نویسنده این مطلب
سلام..پروگرامر های زیادی داره st link ,j link , ulink و… من خودم از پروگرامر st link استفاده میکنم.مال خود کمپانی st هست برای میکرو هاش .اموزشش رو قرار میدم.
مهمان
ماژول بنده،اینه:
http://shop.aftabrayaneh.com/Leaflabs_Maple_Mini_Stm32_32bit_ARM__AFTAB.html?search=Stm32
خودش پزوگرامر آنبورد دارهچجوری باید ازش استفاده کنم؟
با تشکر
مهمان
پروگرامر آنبورد یعنی اینکه شما میتونین از طریق ی مبدل USB به UART با میکرو ارتباط بگیری و از طریق نرم افزار FLASH LOADER برنامتو ب میکرو انتقاال بدی و نهایتا با ریست کردن میکرو برنامه اجرایی میشه
مهمان
دمت گرم
مهمان
عالیییییییی مثل همیشه

منتظر ادامه هستیم
خدا قوت
مهمان
علی