50 ساعت آموزش ویدئویی
آموزش در قالب بررسی مثال ها و نوشتن کد های نمونه در STM32CubeIDE
بررسی نمونه کد ها و انجام پروژه ها روی میکروکنترلر STM32F103C8 برد Blue pill
بدون پیشنیاز ، از مبتدی تا پیشرفته
طرح سوال و تمرین برای دانشجو در طول دوره
آموزش خوندن منابع تخصصی
عدم استفاده از delay در کل آموزش
اسمبلی آرم thumb instruction
GCC ؛ آپشن ها و اتربیوتها
پیاده سازی سخت افزاری و CPU load کم
برنامه نویسی رجیستری با CMSIS، توضیح تمام رجیسترها
کتابخانه newlib و بررسی کامل تابع پرینت اف، SWV
الگوریتم های سرچ و سورت آرایه، اندازه گیری و مقایسه ی سرعت cpu در اجرای الگوریتم های متفاوت
میکروکنترلر STM32F103 : بررسی کامل رجیستر ها و استفاده از امکانات پریفرال های GPIO , RCC, PWR, AFIO, NVIC, SYSTICK, SCB با تغییر مستقیم رجیسترها و استفاده از فایل CMSIS اصلاح شده

معرفی دوره جامع آموزش برنامه نویسی میکروکنترلر ARM با STM32
این دوره آموزشی راجع به چیه؟
ثدفخثهدف
مشاهده ویدئو در youtube
یکی از جلسات دوره آموزش میکروکنترلر stm32f103
راه اندازی سنسور AM2302 بدون delay
در قالب انجام پروژه led چشمک زن ، روش های مختلف دسترسی به رجیسترهای پریفرال ها و لایه نرم افزاری CMSIS تدریس میشه. برد بلوپیل blue pill ، میکروکنترلر STM32F103 ، نرم افزار STM32CubeIDE
- ساخت پوینتر برای هر رجیستر
- نوع استراکچر برای هر پریفرال
- استراکچر دارای یونیون و بیت فیلد
- لایه نرم افزاری cmsis استاندارد
- ساخت فایل های device جدید با SVDConv.exe و اصلاح آنها
شرح جلسات دوره آموزشی :
آماده سازی STM32F103 : پریفرال های RCC ، SYSTICK
پریفرال RCC در میکروکنترلر STM32F103 و مدیریت کلاک
- نظیم پین های دیباگ در نرم افزار stm32cubemx
- بررسی درخت کلاک و تنظیم کلاک میکروکنترلر stm32f103c8 در stm32cubemx
- ساخت پروژه با لایه ی نرم افزاری CMSIS
- بیت های swj-cfg در رجیستر mapr پریفرال afio برای تنظیم پین های دیباگ
- عملکرد بیت های HSEON, HSEBYP, HSERDY در رجیستر RCC_CR
- فعال کردن پریفچ اینستراکشن ها در فلش با بیت PRFTBE و تنظیم wait state در رجیستر FLASH_ACR
- تنظیم پری اسکیلرهای HCLK, PCLK1, PCLK2, ADC, HSE در رجیستر RCC_CFGR
- منبع PLL با PLLSRC ، ضریب با PLLMULL و فعال کردن با PLLON و چک کردن در PLLRDY
- مشخص کردن منبع SYSCLK با SW چک کردن منبع SYSCLK با SWS
- معرفی و تنظیمات پین MCO مشاهده SYSCLK و PLLCLK و HSI و HSE با استفاده از اسیلوسکوپ روی پین MCO در STM32F103
مدیریت اینتراپت ها و پریفرال های NVIC و EXTI، اینتراپت خارجی
- خروجی NPN و PNP و NO و NC در سنسورهای مجاورتی
- مدار ایزوله کردن خروجی PNP از میکروکنترلر با اپتوکوپلر 4N35
- بررسی پریفرال EXTI و رجیسترهای FTSR, RTSR, SWIER, IMR, EMR,
- عملکرد پریفرال NVIC و حالت های pending و active برای اینتراپت
- رجیسترهای ISER, ICER, ISPR, ICPR, IABR و اولویت ها در IPRx در پریفرال NVIC و گروهبندی در AIRCR
- بررسی توابع CMSIS برای اولیت دادن و فعالسازی اینتراپت و شماره ی اینتراپت
- جدول اینتراپت ها ، مکان و اولویت و آدرس برای هر اینتراپت
- نوشتن توابع IRQ_Handler در فایل it.c
- صفر کردن فلگ لاین اینتراپت خارجی در رجیستر PR
- پروژه ی شمارش تعداد دفعات عبور جسم از مقابل سنسور نوری با استفاده از کتابخانه HAL
- بررسی روش فراخوانی تابع callback توسط کتابخانه HAL
- یادآوری function pointer : تعریف و مقداردهی و فراخوانی تابع و آرایه ی پوینتر به تابع
- آرایه ای از آدرس توابع برای ذخیره سازی آدرس توابع callback اینتراپت های خارجی
- پروژه ی شمارش تعداد دفعات عبور جسم از مقابل سنسور نوری با برنامه نویسی رجیستری
پریفرال SYSTICK در میکروکنترلر STM32F103 و تابع تاخیر
- کانتر تایمر 24 بیتی پایین رونده Systick ، رجیستر های SysTick_LOAD و SysTick_VAL
- بیت های COUNTFLAG, Clock Soruce, TICKINT و ENABLE
- محاسبه ی LOAD برای دوره تناوب 1ms
- بررسی توابع HAL_Init, HAL_Init_Tick, HAL_SYSTICK_Config,
- تغییر رجیسترهای SysTick در تابع SystTick_config
- متغیر uwTick و بررسی توابع SysTick_IRQHandler و HAL_Delay
- LED چشمک زن با HAL_Delay
- تابع delay میلی ثانیه با SysTick بدون HAL و LED چشمک زن
فصل دوم : تایمر و DMA در میکروکنترلر STM32F103
عملکرد پریفرال تایمر
- کاربردهای پریفرال تایمر میکروکنترلرهای stm32
- TIMBASE و رجیسترهای شمارنده و ARR و PSC
- محاسبه ی ARR و PSC با تنظیم دوره تناوب کانتر و دوره تناوب کلاک کانتر
- کانال در حالت خروجی
- حالت تک پالس
- کنترل نرخ
- انواع تایمرها در STM32
- کاربردهای پریفرال تایمر میکروکنترلرهای stm32
- TIMBASE و رجیسترهای شمارنده و ARR و PSC
- محاسبه ی ARR و PSC با تنظیم دوره تناوب کانتر و دوره تناوب کلاک کانتر
- کانال در حالت خروجی
- حالت تک پالس
- کنترل نرخ
- انواع تایمرها در STM32
اندازه گیری سرعت اجرای کد با سه روش: تایمر، سایکل شمار CPU، دو تایمر آبشاری
- انتخاب دوره تناوب شمارنده و دوره تناوب کلاک برای تایمر دقیق تر ، دقت و محدوده ی اندازه گیری شمارنده
- خاموش روشن کردن led هر 1 ثانیه در اینتراپت تایمر
- تنظیمات اولیه تایمر ، فعالسازی اینتراپت آپدیت
- خوندن تعداد CPU سایکل ها از کانتر و اندازه گیری سرعت اجرای کد
- تنظیمات اولیه تایمر ، فعالسازی اینتراپت آپدیت
- رجیستر DEMCR و CTRL ، تنظیمات اولیه DWT
- اندازه گیری تعداد cpu سایکل ها با خوندن CYCCNT قبل و بعد از اجرای کد
- اندازه گیری سرعت اجرای کد با یک تایمر
- ARR و PSC برای دقیق ترین تایمر ممکن در stm32f103c8
- نوشتن توابع شروع و توقف تایمر و اندازه گیری سرعت اجرای کد با خوندن رجیستر CNT
- اندازه گیری سرعت اجرای کد با دو تایمر آبشاری
- تنظیمات master-slave ، تریگر ورودی تایمر slave ، تریگر خروجی تایمر master
- حذف اینتراپت ، نوشتن توابع شروع و توقف تایمر master، محاسبه ی زمان با دو رجیستر CNT
ساخت پالس شمار سخت افزاری و استفاده از کانال های خروجی تایمر برای شمارش پالس ها
- اتصال خروجی PNP سنسور نوری با 4n35 به پین میکروکنترلر
- کلید فشاری بجای سنسور نوری
- پالس شمار نرم افزاری : شمارش و مقایسه ی تعداد پالس ها توسط CPU در اینتراپت خارجی
- شمارش تعداد لبه ها در اینتراپت خارجی و مقایسه ی تعداد لبه ها با عدد مشخص شده
- پالس شمار سخت افزاری : شمارش پالس ها و مقایسه ی تعداد پالس ها توسط تایمر
- تنظیمات پین ETR و external clock mode 2 و نحوه ی تامین کلاک شمارنده از پین ETR
- استفاده از اینتراپت کانال خروجی تایمر در حالت frozen ، برای مقایسه ی تعداد پالس ها با محتوای رجیستر CCR
- تست پروژه و مشاهده وضعیت پین ها در اسیلوسکوپ
- کانال خروجی تایمر در حالت PWM mode 2 برای کنترل وضعیت led با توجه به تعداد پالس ها
فاصله سنج التراسونیک و ارسال و دریافت پالس با تایمر
- دیتاشیت سنسور SR-04 : پینها، پالس تریگ و پالس اکو، زمان بندی
- تفاوت راه اندازی sr04 در stm32 و AVR ، استفاده از تایمر برای ارسال و دریافت پالس
- SR-04 با stm32f103c8 : ساخت پالس تریگ با کانال در حالت PWM 1 و اندازه گیری مدت زمان یک بودن پالس echo با دو کانال ورودی
- تنظیم پین ها، تنظیمات تایمر با دوره تناوب 100u
- کانال 3 تایمر خروجی در حالت PWM mode 1 برای تولید پالس 10us در هر 100ms
- ثبت لبه ی بالارونده ی پالس تریگ با کانال یک و لبه ی پایین رونده با کانال دو و محاسبه ی عرض پالس (CCR2-CCR1) در اینتراپت CC2
lcd کاراکتری بدون delay با تایمر و DMA : پیاده سازی سخت افزاری ارتباط پارالل
- دیتاشیت lcd کاراکتری : پین ها، چگونگی نمایش کاراکتر، حافظه ها ROM و RAM، کامند ها، عملیات استارت lcd
- چگونگی پیاده سازی بستر سخت افزاری ارتباط پارالل با تایمر stm32f103
- پیاده سازی با روش اول : انتقال داده به باس پارالل در اینتراپت
- پینها GPIO : تعداد 8 پین برای باس دیتا ، پین E و RS
- محاسبات PSC ، ARR و CCR ها
- تنظیمات TIMBASE برای دوره تناوب 60 میکروثانیه
- رجیستر RCR و حالت OPM برای کنترل تعداد بایت های ارسال شده به lcd کاراکتری
- کانال یک تایمر یک در حالت خروجی PWM mode 1 برای پین E
- کانال دو تایمر در حالت خروجی frozen با اینتراپت
- درخواست اینتراپت از کانال دو تایمر یک برای انتقال یک بایت به 8 پین و نوشتن اعداد در رجیستر BSRR
- آماده سازی بایتها برای نوشتن در رجیستر BSRR برای تغییر وضعیت باس پارالل
- نوشتن تابع ارسال داده و کامند و تابع استارت lcd و تست روش اول
- روش دوم : انتقال داده به باس پارالل توسط DMA با درخواست CC2
- استفاده از کانال سه DMA برای انتقال اعداد به رجیستر BSRR (گذاشتن داده روی باس) بجای انتقال داده توسط CPU در اینتراپت
سنسور دما و رطوبت AM2302 و پیاده سازی سخت افزاری ارتباط one wire با تایمر و DMA
- دیتاشیت سنسور دما و رطوبت AM2302 : پین ها، پروتکل ارتباطی
- چگونگی پیاده سازی بستر سخت افزاری ارتباط one wire توسط تایمر stm32f103
- روش اول : خوندن بیت ها در 43 اینتراپت CCR2
- تنظیم TIMBASE با دوره تناوب شمارنده 65ms و دوره تناوب کلاک 1us
- کانال 3 تایمر برای زمین کردن باس در حالت خروجی pwm mode 2 و حالت پین AF OD
- یک کردن خروجی PWM بعد از توقف تایمر
- کانال یک و دو هر دو ورودی و متصل به TI1، کانال یک ثبت عدد کانتر در لبه ی بالارونده و کانال دو لبه ی پایین رونده
- محاسبه ی 40 بیت در 43 اینتراپت لبه ی پایین رونده
- طراحی union برای نگهداری داده های سنسور
- شمارش لبه های بالارونده و پایین رونده
- محاسبه ی checksum
- تنظیم اینتراپت تایمر دوم برای استارت تایمر اصلی
- روش دوم: تایمر دوم master و تایمر اصلی slave
- تریگر خروجی تایمر master : آپدیت ،تایمر slave در حالت trigger mode
- استفاده از کانال خروجی تایمر master برای زمین کردن باس one wire
- روش دوم: انتقال اعداد از رجیسترهای CCR1 و CCR2 به حافظه توسط DMA و محاسبه ی بیت ها در یک اینتراپت TC
- تنظیم دو کانال DMA برای انتقال اعداد رجیستر ها CCR1 و CCR2 به دو آرایه 43 عضوی
سنسور دمای DS18B20 بدون delay و بصورت سخت افزاری با تایمر و DMA
- دیتاشیت سنسور دما DS18B20 : پینها، ترانزیستور C1815 برای زمین کردن باس one wire
- زمان بندی نوشتن و خوندن بیتهای 0 و 1 از باس و چگونگی خوندن و نوشتن از باس با PWM
- نوشتن بیت ها با کانال خروجی تایمر : مشخص کردن بیت با زمان زمین بودن پالس PWM
- خوندن بیت ها با کانال ورودی تایمر : رجیستر CCR1
- تنظیم TIMBASE با دوره تناوب شمارنده 80us و دوره تناوب کلاک 1us: مدت زمان نوشتن یا خوندن یک بیت
- تغییر تنظیم TIMBASE برای ارسال پالس استارت
- تنظیم کانال 5 DMA برای 8 بار نوشتن عدد در رجیستر CCR3 در 8 آپدیت ایونت، برای فرستادن یک بایت به DS18B20
- کانال 5 DMA برای 72 بار برداشتن عدد از رجیستر CCR1 در 72 آپدیت ایونت، برای خوندن 72 بیت
- طراحی union برای ذخیره سازی بیتها
- اینتراپت DMA برای محاسبه ی بیت ها و CRC، کتابخانه ی CRC
- دیتاشیت DS18B20 : حافظه ها، بررسی transaction، کامند ROM و function،
- تنظیم اینتراپت تایمر دوم برای مدیریت زمان بندی ارسال کامندها
- نوشتن تابع برای انجام 7 عملیات با فاصله ها زمانی نامنظم با استفاده از قابلیت پریلود رجیستر ARR تایمر STM32F103
- خوندن دما از DS18B20 با STM32
آنالوگ با خروجی PWM، اندازه گیری فرکانس و دیوتی در ورودی PWM
- خروجی انکودر incremental، روتاری انکودر، تشخیص سرعت و جهت با شمردن لبه با توجه به وضعیت کانال دیگر
- ورودی های TI1FP1 و TI2FP2 ، بررسی تفاوت سه حالت مختلف شمارش پالس های انکودر توسط تایمر STM32
- شمارش پالس های روتاری انکودر و تشخیص جهت با تایمر STM32
انکودر با تایمر STM32F103
- فیلتر پایین گذر خازن مقاومتی ، فرکانس شکست
- تنظیم عرض پالس PWM برای تنظیم ولتاژ آنالوگ خروجی فیلتر
- اندازه گیری فرکانس و مدت زمان یک بودن PWM ورودی با دو کانال ، TI1FP1 تریگر ورودی
کنترل سرعت و موقعیت استپر موتور با درایور TB6600 و DRV8825
- درایور DRV8825 : تغذیه ها، پین های enable, reset, sleep, step, dir, مشخص کردن رزولوشن و محدود کردن دما با پتانسیومتر
- مدار ایزوله کردن پین های STEP و DIR با دو اپتوکوپلر 6N137
- درایور TB6600 : تغذیه و اتصال به موتور و میکروکنترلر ، محدود کردن جریان و مشخص کردن رزولوشن با DIP switch
- دیتاشیت استپرموتور
- رابطه ی فرکانس PWM خروجی با مقدار رجیسترهای ARR و PSC
- رابطه ی فرکانس PWM با سرعت زاویه ای و رابطه ی سرعت زاویه ای به دور بر دقیقه با رجیسترهای ARR و PSC
- مقایسه ی رزولوشن تولید سرعت زاویه ای در بازه های مختلف سرعت برای دو حالت ARR=1 و PSC=0
- کانال یک در حالت PWM mode2 با ARR=1 و CCR1=1 برای پین STEP
- کانال دو در حالت PWM mode2 با CCR2=0or2 برای مشخص کردن جهت حرکت
- پروژه تنظیم سرعت و جهت استپر موتور با درایور ها DRV8825 و TB6600 : خروجی PWM با فرکانس متغیر
- استفاده از TIM1 برای شمارش آپدیت های TIM3 و توقف TIM3 توسط TIM1 بعد از ارسال تعداد مشخص پالس
- بررسی مقادیر بیت های TS, SMS, MMS برای TIM1 و TIM3 در حالت master/slave دو طرفه
- استفاده از RCR برای شمارش تعداد دور و CNT برای دور ناقص
- بررسی تاثیر تولید آپدیت بر رجیستر CNT
- کنترل موقعیت استپر موتور : مشخص کردن تعداد پالس های خروجی TIM3 با TIM1 با master/slave دو طرفه
فصل سوم : ADC و DMA
در فصل دوم آموزش برنامه نویسی میکروکنترلر ARM با STM32 : ورژن های زبان برنامه نویسی سی ، فایل ها سورس و هدر در زبان سی ، مراحل کامپایل کد سی ، جدول سمبل های کامپایلر ، کلاس های ذخیره سازی ، اکستنشن های GCC و آپشن های کامپایل بررسی میشن.
منابعی که در این فصل بررسی میشن:
- Using the GNU Compiler Collection
کنترل سرعت و موقعیت استپر موتور با
- معرفی نرم افزار keil و ساخت پروژه خالی در keil
- ورژن های c ، c80 ، c90 ، c99 ، c11 و c17
- محدودویت های ورژن c89 در مورد for
- ورژن c در keil
- تغییر ورژن c در cubeide
- معرفی کامپایلر ARMCC در keil
- کامپایلر GCC در STM32CubeIDE
- معرفی GNU project
- فایلهای .c و .h و اضافه کردن به پروژه
- ساخت کتابخانه
- معرفی مکان فایل های .c و .h به نرم افزار STM32CubeIDE
- بررسی نحوه ی عملکرد و اجزای کامپایلر gcc و وظیفه ی هر بخش
- preprocessor , compiler , assembler , linker , locater
- فایل های .c , .h , .s , .i , .o , .a در مراحل مختلف کامپایل
- section ها و ساختار فایل assembly
- .text , .rodata , .data , .bss
- symbol table , import table , export table با مثال
- فرایند relocation در مرحله linker
- بررسی symbol resolution در مرحله linker
- مرحله locater و فایل linker script
- section های ram
- Section های flash
- بررسی تمام storage class ها با مثال
- کلاس ذخیره سازی static برای متغیر های local
- static برای متغیر های global
- کلاس ذخیره سازی static برای متغیر های داخل header file
- static برای توابع محدود به فایل
- کلاس ذخیره سازی extern برای متغیر global
- auto برای متغیر local
- کلاس ذخیره سازی register برای متغیر local
سوالات متداول