آموزش رجیستری میکروکنترلر STM32F103

  1. Home
  2. /
  3. آموزش میکروکنترلر STM32F103

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

آموزش در قالب بررسی مثال ها و نوشتن کد های نمونه در STM32CubeIDE

بررسی نمونه کد ها و انجام پروژه ها روی میکروکنترلر STM32F103C8 برد Blue pill

بدون پیشنیاز ، از مبتدی تا پیشرفته

t

طرح سوال و تمرین برای دانشجو در طول دوره

آموزش خوندن منابع تخصصی

N

عدم استفاده از delay در کل آموزش

N

اسمبلی آرم thumb instruction

N

GCC ؛ آپشن ها و اتربیوتها

N

پیاده سازی سخت افزاری و CPU load کم

N

برنامه نویسی رجیستری با CMSIS، توضیح تمام رجیسترها

N

کتابخانه newlib  و بررسی کامل تابع پرینت اف، SWV

N

الگوریتم های سرچ و سورت آرایه، اندازه گیری و مقایسه ی سرعت cpu در اجرای الگوریتم های متفاوت

N

میکروکنترلر STM32F103 : بررسی کامل رجیستر ها و استفاده از امکانات پریفرال های GPIO , RCC, PWR, AFIO, NVIC, SYSTICK, SCB با تغییر مستقیم رجیسترها و استفاده از فایل CMSIS اصلاح شده

معرفی دوره جامع آموزش برنامه نویسی میکروکنترلر ARM با STM32

این دوره آموزشی راجع به چیه؟

ثدفخثهدف

مشاهده ویدئو در youtube

    یکی از جلسات دوره آموزش میکروکنترلر stm32f103

    راه اندازی سنسور AM2302 بدون delay 

    در قالب انجام پروژه led چشمک زن ، روش های مختلف دسترسی به رجیسترهای پریفرال ها و لایه نرم افزاری CMSIS تدریس میشه. برد بلوپیل blue pill ، میکروکنترلر STM32F103 ، نرم افزار STM32CubeIDE

    1. ساخت پوینتر برای هر رجیستر
    2. نوع استراکچر برای هر پریفرال
    3. استراکچر دارای یونیون و بیت فیلد
    4. لایه نرم افزاری cmsis استاندارد
    5. ساخت فایل های 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

    سوالات متداول

    آیا قبل از یادگیری میکروکنترلرهای ARM باید AVR بلد باشیم؟

    خیر  

    برای استفاده از دوره آموزشی چی لازمه؟

    1- یک کامپیوتر با سیستم عامل ویندوز ترجیها 8 به بعد
    2- یک میکروکنترلر از خوانواده ی STM32 نیاز دارید. برای تمرین محتویات دوره می تونید از برد های دیسکاوری یا نوکلئو یا بلوپیل یا هر برد دارای یکی از میکروکنترلر های STM32 استفاده کنید. در طول دوره من از برد blue pill دارای میکروکنترلر STM32F103C8 استفاده میکنم.
    3- اگر از بردهایی استفاده میکنید که پروگرمر ST-link روی برد نیست ، مثل بلوپیل، به یک پروگرم ST-link v2 هم نیاز دارید.  

    دوره آموزشی در چه محیطی تدریس میشه؟

    بیشتر دوره در نرم افزار STM32CubeIDE برنامه نویسی می کنیم یا کد و حافظه رو در بخش دیباگ بررسی میکنیم. داکیومنت ها رو از روی فایل pdf بررسی میکنیم در مواقع نیاز از پاور پوینت هم استفاده میکنیم.
    در تمام موارد صفحه کامپیوتر ظبط شده و مدرس روش صحبت می کنه.