دوره آموزش

STM32 با کتابخانه HAL

16 ساعت آموزش ویدئویی

آموزش در نرم افزار KEIL و Cube

پروژه محور، 21 پروژه با STM32F103

سطح دوره: مبتدی تا متوسط

N

بررسی روش عملکرد و آموزش راه اندازی سون سگمنت، ال سی دی کاراکتری، SR-501، سنسور نوری، رله 12 ولت، BC337، BC327، EL817، 4N35، کلید فشاری، فیلتر پایین گذر، SR04LM335، YL-69، FT232، OLED، BMP085، LCD TFT، SDCard، NRF24L01

N

راه اندازی پریفرال هایNVIC، EXTI، TIM Base، Input capture، Output compare، ADC polling interrupt dma، SYSTICK، USART، I2C، SPI، FLASH، PWR، IWDG، WWDG

N

ارسال و دریافت داده با USART در Labview

محتویات این بسته آموزشی چیست؟

در هر جلسه دیتاشیت یک قعطه و بلوک دیاگرام و رجیسترهای یکی از پریفرال های میکروکنترلر توضیح داده میشه و در پایان همون جلسه یک پروژه با استفاده از قابلیت های همون پریفرال انجام میدیم.

پروژه های این دوره روی میکروکنترلر stm32f103c8t6، برد bluepill و در محیط نرم افزارهای keil و cube و با استفاده از کتابخونه HAL انجام میشه.

لینک دانلود جلسه اول

http://dl.elcen.ir/s01/stm32_s01.rar

سرفصل ها

 آموزش STM32 جلسه 2 :

– تنظیم پین های میکرو در حالت ورودی و خروجی

– بررسی بخش debug

– اجرای خط به خط برنامه

– بررسی تفاوت polling و interrupt

 آموزش STM32 جلسه 3 : NVIC & EXTI

سی پی یو های cortex-m دو حالت کاری thread mode و handler mode دارند. thread mode حالت کاری عادیه و در صورت وقوع یک exception به handler mode میرن.

وقتی یک exception اتفاق بیافته cpu کارش رو رها میکنه و بعد از اجراء exception handler ، کارش رو ادامه میده. چون در عملکرد عادی cpu وقفه ایجاد میشه بهشون میگن interrupt .

 آموزش STM32 جلسه 4 : TIM TIME BASE

بخش TIM-Base اساسی ترین بخش هر تایمره . در این بخش سه رجیستر اصلی وجود داره. رجیستر cnt یا counter با هر پالس کلاک ck_cnt مقدارش یکی زیاد میشه تا به مقدار رجیستر ARR برسه ، وقتی به arr رسید کانتر ریلود میشه و یک event اتفاق میافته بنام update event و رجیستر cnt update میشه، صفر میشه و دوباره از اول می شماره. چون CNT از 0 شروع میکنه 1+ARR ضرب در پریود کلاک CNT طول میکشه تا CNT آپدیت بشه .

 آموزش STM32 جلسه 5 : TIM IC

هر کانال تایمر یک رجیستر اصلی به نام CCR داره. با استفاده از بخش input capture کانال تایمر میتونیم در لبه های بالارونده یا پایین رونده ی یک سیگنال خارجی مقدار CNT رو در CCR دخیره کنیم. با اندازه گیری دو تا لبه بالا رونده ی پشت سر هم میشه دوره تناوب سیگنال خارجی رو اندازه گیری کرد.

در جلسه 5 بلوک دیاگرام و رجیسترهای بخش ic کانال تایمر و همچنین تنظیمات لازم برای اندازه گیری دوره تناوب و عرض پالس سیگنال PWM بررسی میشن. 

 آموزش STM32 جلسه 6 : TIM OC

هر کانال تایمر یک رجیستر اصلی به نام CCR داره. با استفاده از بخش output compare میتونیم وضعیت یک سیگنال رو با توجه به نتیجه مقایسه cnt و ccr مشخص کنیم.

در جلسه 5 بلوک دیاگرام و رجیسترهای بخش oc کانال تایمر و همچنین تنظیمات لازم برای ساخت یک سیگنال PWM بررسی میشن.

 آموزش STM32 جلسه 7 : ADC + interrupt 

Adc یا analog to digital converter یه پریفرال که در دوره های زمانی مشخص از یه ولتاژ آنالوگ نمونه برداری میکنه و یه عدد 12 بیتی بین 0 تا 4095 خروجی میده.

برای دریافت داده از ADC میتونیم از سه روش pullling ، interrupt و dma استفاده کنیم که در جلسات 7 تا 9 بررسی میشن.  

 آموزش STM32 جلسه 8 : ADC + DMA

Dma یا direct access memory یک پریفرال که میتونه داده رو در حافظه جابجا کنه. بوسیله ی dma میتونیم داده رو بدون دخالت cpu بین پریفرال ها و ram جابجا کنیم، مثلا نتایج تبدیل adc رو در حافظه ذخیره کنیم.

 آموزش STM32 جلسه 9 : SYSTICK 

پریفرال SYSTICK یا SYSTEM TIMER یک تایمره از پریفرال های CPU . تابع hal_delay و توابع hal که ورودی timeout دارن از systick برای اندازه گیری زمان استفاده می کنند. از اینتراپت systick هم برای انجام کارها در دوره های زمانی مشخص استفاده میشه.

 آموزش STM32 جلسه 10 : USART

Usart یک سخت افزار در میکروکنترلر که پروتکل های ارتباطی مختلفی رو ساپورت میکنه. بوسیله این سخت افزار میتونیم داده روبصورت سریال، سنکرون یا آسنکرون، بین فقط دو دستگاه ارسال و دریافت کنیم.
هر کدوم از دو دستگاه میتونن فرستنده یا گیرنده باشن. پین tx برای انتقال داده و rx برای دریافت داده است و tx هر دستگاه به Rx دستگاه دیگه وصل میشه.

 آموزش STM32 جلسه 11 : I2C

I2c یک پروتکل ارتباطیه، که میتونه بین چند تا master و چند تا salve ارتباط برقرار کنه، در i2c ارتباط سنکرونه یعنی master و slave یک کلاک مشترک دارند.

پین scl پین کلاکه که توسط master تامین میشه، داده هم بصورت سریال روی پین sda بین مستر و slave جابجا میشه. sda و scl هر دو با یک مقاومت پول آپ میشن و master یا slave فقط میتونن این پین ها رو زمین کنن.

 آموزش STM32 جلسه 12 : SPI

SPI مخفف Serial Peripheral Interface  و یک پروتکل ارتباطی سریال و سنکرون.

در spi یک master داریم و چند slave، هر slave یک پین chip select داره که master با زمین کردنش ، slave رو انتخاب میکنه . پین sclk هم کلاکه که توسط master تامین میشه. mosi داده هایی که از master خارج میشن و miso داده هایی که به master وارد میشن.

 آموزش STM32 جلسه 13 : FATFS

FATFS یا FAT File system یک نوع file system و مجموعه از قواعد که کامپیوتر ها برای ساخت و دسته بندی فایل ها از اون استفاده میکنند. برای اینکه بتونیم در sdcard یک فایل txt بسازیم از کتابخونه ی FatFs استفاده میکنیم که نیازمندی های Fat file system رو برای ما فراهم میکنه. 

 آموزش STM32 جلسه 15 : حافظه ی flash

میکروکنترلر ما 128kbyte حافظه ی فلش داره که شامل 128 تا صفحه 1kbyte که میتونیم داده های مورد نظرمون رو در این صفحات ذخیره کنیم و بر خلاف sram با قطع تغذیه میکرو محتویات ذخیره شده در فلش از بین نمیره.

 آموزش STM32 جلسه 16 : پریفرال PWR و حالت های کم مصرف

میکروکنترلرهای stm32 سه حالت کاری کم مصرف دارند که این سه حالت با ترکیب حالت های کاری کم مصرف CPU cortex-m3 و رگولاتور 1.8V ایجاد میشن. در هر سه حالت کلاک CPU قطعه و CPU قابل استفاده نیست. در sleep mode میتونیم از پریفرال ها استقاده کنیم ، در stop mode کلاک پریفرال ها قطعه ولی محتویات رم و رجیستر ها حفظ میشن، در standby mode رگولاتور 1.8V کاملا خاموش میشه و محتویات رم و رجیستر ها هم پاک میشه.

 آموزش STM32 جلسه 17 : تایمر های IWDG و WWDG

از تایمر های watchdog برای اطمینان از صحت عملکرد میکروکنترلر استفاده میکنیم. اگر cpu در زمان مناسب کانتر این تایمر ها رو رفرش نکنه، این تایمر ها میکروکنترلر رو ریست میکنند.  

پروژه ها

پروژه 2 : seven segment

هر سون سگمنت شامل 7 تا led ، اگر کاتد led ها به هم متصل باشه کاتد مشترک و اگر آند led ها به هم وصل باشه آند مشترک.

 سون سگمنت استفاده شده کاتد مشترک و کاتد ها به زمین وصل شدن. آند هر led هم با یک مقاومت 1k به یکی از پایه های  میکروکنترلر وصل شده. پین های gpio در حالت output push-pull تنظیم شدن و با صفر و یک کردن پین ها led ها رو خاموش و روشن میکنیم و عدد مورد نظرمون رو در سون سگمنت نمایش میدیم. 

پروژه 3 : سنسور تشخیص حرکت SR-501

وقتی سنسور SR-501 حرکتی رو تشخیص بده خروجی دیجیتالش یک میشه. در این پروژه خروجی سنسور رو با استفاده از پین میکروکنترلر STM32F103 که در حالت gpio input تنظیم شده میخونیم.  

پروژه 4 : سنسور نوری با STM32F103

 در پروژه چهارم gpio و اینتراپت خارجی رو با استاندارد صنعتی بررسی میکنیم و شماتیک مدار و محاسبات قطعات هم بررسی میشه.

– راه اندازی رله 12 ولت با ترانزیستور PNP BC327 و اپتوکوپلر EL817

– خوندن خروجی دیجیتال سنسور نوری با اینتراپت خارجی با اپتوکوپلر 4n35

– راه اندازی فن با ترانزیستور NPN BC337  

– راه اندازی دو کلید فشاری با تنظیم پین ها در حالت اینتراپت خارجی به همراه مدار debouncing

پروژه 5 : LCD  کاراکتری 2*16

Lcd کاراکتری که قراره راه اندازی کنیم رابط کاربری پارالل داره یعنی 8 بیت همزمان بوسیله ی 8 تا سیم بین میکرو و lcd جابجا میشن. 8 تا DATA PIN داریم که بوسیله اونها داده هارو میخونیم یا مینویسیم. به هر کدوم از 8 پین یک پین gpio اختصاص می دهیم.

بوسیله ی پین های RS RW و E انتقال دیتا رو کنترل میکنیم.

پروژه 6 : سنسور رطوبت هوا DHT22 AM2302 با STM32F103

با سنسور AM2302 دما و رطوبت هوا رو اندازه گیری میکنیم. 

دریافت داده ها روی یک سیم انجام میشه که پول آپ شده و میکروکنترلر و سنسور هر دو میتونن باس رو زمین کنن. برای شروع خوندن داده ها، میکرو باس رو زمین و سپس آزاد میکنه، بعد از اون سنسور 41 تا پالس میفرسته که اولی استارت بیت و 40 پالس بعدی 16بیت دما، 16 بیت رطوبت و 8 بیت checksum هستند.

مدت زمان یک بودن برای هر پالس ارزش بیت رو مشخص میکنه.  با تنظیم دو کانال تایمر در حالت ic و محاسبه ی عرض پالس در اینتراپت ccr میتونیم خروجی این سنسور رو دریافت کنیم. 

پروژه 7 : ساخت خروجی آنالوگ با استفاده از PWM

میکروکنترلر STM32F103C8T6 خروجی آنالوگ نداره. در این پروژه با استفاده از یخش خروجی کانال تایمر یک سیگنال PWM میسازیم.

برای تبدیل pwm به آنالوگ از یک فیلتر پایین گذر خازن مقاومتی استفاده میکنیم. در این جلسه نحوه ی طراحی فیلتر رو بررسی میکنیم.

 پروژه 8 : سنسور  تشخیص فاصله التراسونیک SR-04 با STM32F103

با استفاده از سنسور SR-04 میتونیم فاصله رو اندازه گیری کنیم. برای اندازه گیری فاصله جسم تا سنسور باید مدت زمان یک بودن پین ECHO اندازه گیری بشه. 

در این پروژه فقط با استفاده از یک تایمر این سنسور رو راه اندازی میکنیم. از رجیستر RCR هم استفاده میکنیم تا هر 4 بار از خروجی سنسور میانگین بگیریم.

پروژه 9 : سنسور آنالوگ دما LM335 با STM32F103

LM335 یک دیود زنر که ولتاژ زنرش با دما متغیره. خروجی سنسور رو ابتدا بافر میکنیم و در مرحله بعد با استفاده از Differential op amp ولتاژ آنالوگ رو در بازه مورد نظرمون تنظیم میکنیم. 

با استفاده از اینتراپت از اتمام کار adc مطلع میشیم و داده رو از دیتا رجیستر ADC برمیداریم. 

پروژه 10 : راه اندازی سنسور رطوبت خاک YL-69 با STM32F103C8T6

در این پروژه قصد داریم دو کانال رو با ADC نمونه برداری کنیم و از SCAN MODE استفاده می کنیم. در SCAN MODE برای همه ی کانال های REGULAR نتیجه در ADC->DR ذخیره میشه و بعد از تبدیل کانال 0  اگر عدد رو از رجیستر بر نداریم وقتی تبدیل کانال 1 انجام بشه عدد از بین میره و OVERRIGHT میشه.

در حالت SCAN باید از DMA استفاده کنیم، چون خودمون نمیتونیم عدد رو از رجیستر برداریم. DMA بدون دخالت CPU محتویات ADC->DR رو بعد از تبدیل ADC در جایی که در رم مشخص میکنیم برامون ذخیره میکنه.

پروژه 12 و 13 : ارسال و دریافت داده ها بین STM32F103 و LABVIEW با استفاده از USART

در پروژه 11 هدف اینه که از لپ تاپ از نرم افزار LABVIEW با ارتباط سریال داده بفرستیم به میکرو . لپ تاپ پورت سریال نداره . از یه مبدل USART به USB استفاده میکنیم که از آی سی FT232 استفاده میکنه. یه پورت سریال مجازی در کامپیوتر ساخته میشه و با این پورت میتونیم با میکرو ارتباط برقرار کنیم.

در پروژه 12 و 13 کد labview  مورد نیاز برای ارسال و دریافت داده ها به میکروکنترلر رو هم قدم به قدم بررسی میکنیم. 

پروژه 14 : OLED I2C با STM32F103C8T6

پروژه 12 راه اندازی یه نمایشگر oled که رابط کاربری i2c داره. این نمایشگر یه درایور ssd1306 داره و با استفاده از یک کتابخونه راه اندازیش میکنیم.

پروژه 15 : سنسور فشار هوا و دما BMP085 با STM32F103

Bmp085 شامل یه سنسور پیزو مقاومتی ، مبدل آنالوگ به دیجیتال ، واحد کنترل ، e2prom و اینترفیس i2c . 

در پروژه 15 دیتاشیت bmp085 رو کاملا بررسی میکنیم و با استفاده از این سنسور؛ دما، فشار هوا و ارتفاع از سطح دریا رو محاسبه میکنیم.  

پروژه 16 : راه اندازی LCD TFT SPI با STM32F103C8T6

این نمایشگر 240*320 پیکسل و با رابط کاربری SPI روی رنگ هر پیکسلش کنترل داریم.

در این پروژه روش طراحی منو در نمایشگر ها رو بررسی میکنیم. یک منو سه صفحه ای میسازیم که در صفحه ی led با انتخاب گزینه میتونیم led رو روشن و خاموش کنیم.

پروژه 17 : SDCard  با STM32F103

sdcard رابط های کاربری spi و sdio رو داره ، در این پروژه از spi استفاده میکنیم تا با sdcard ارتباط برقرار کنیم.

با استفاده از کتابخونه ی FatFs یک فایل text در sdcard ایجاد میکنیم و داده های مورد نظرمون رو در این فایل ذخیره میکنیم. 

 

پروژه 18 : nrf24l01 با STM32F103C8T6

nrf24l01 یک ماژول گیرنده و فرستننده رادیویی و رابط کاربری spi داره. در پروژه 18 از دو ماژول و دو میکرو استفاده میکنیم. یک ماژول در حالت فرستنده و یک ماژول در حالت گیرنده تنظیم میشن و داده های مورد نظرمون رو از یک میکروکنترلر به میکروکنترلر دیگه میفرستیم. 

پروژه 20 : اندازه گیری جریان مصرفی در حالت های کاری کم مصرف

در پروژه 20 عملکرد CPU، GPIO و تایمر رو در حالت های کاری کم مصرف بررسی میکنیم و جریان مصرفی میکروکنترلر رو اندازه گیری میکنیم.