ماژول های التراسونیک کاربرد های مختلفی دارند. یکی از کاربرد های مهم آن تشخیص فاصله است. پیش از با استفاده از ماژول SRF05 که یک فاصله سنج التراسونیک است. پروژه های مختلفی انجام داده ایم که با کلیک بر روی این لینک میتوانید این آموزش هارا مطالعه کنید. در این آموزش قصد داریم تا ماژول srf05 با STM32 را راه اندازی کینم و فاصله ماژول تا موانع را تشخیص داده و روی LCD نمایش دهیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول آلتراسونیک فاصله سنج SRF05
ماژول التراسونیک یک دستگاه الکترونیکی است که برای ارسال و دریافت امواج صوتی با فرکانس بالا استفاده می شود. این ماژولها از اصول فیزیکی پرتوصوت استفاده میکنند تا با استفاده از تفاوت زمانی بین ارسال و دریافت امواج صوتی، فاصله را اندازهگیری کنند.ماژولهای تراسونیک به طور گسترده در انواع برنامهها و صنایع مورد استفاده قرار میگیرند، از جمله رباتیک، اتوماسیون صنعتی، سنسورهای فاصله، سیستمهای امنیتی و غیره. این ماژولها میتوانند در فاصلههای کوتاه تا متوسط (چند سانتیمتر تا چند متر) به طور دقیق فواصل را اندازهگیری کنند.عملکرد یک ماژول تراسونیک بر اساس اصل تأخیر زمانی موجود در امواج صوتی است. این ماژول شامل یک ترانسدیوسر (Transducer) است که وظیفه تولید امواج صوتی و دریافت سیگنالهای بازتابی را دارد. امواج صوتی توسط ترانسدیوسر از ماژول ارسال میشوند و با برخورد با یک سطح یا موجودیت، امواج بازتابی میشوند و توسط ترانسدیوسر دریافت میشوند.ماژولهای تراسونیک شامل مدارهای الکترونیکی جهت کنترل و پردازش سیگنالهای دریافتی هستند.
این سیگنالها به صورت الکتریکی تبدیل و توسط میکروکنترلر یا سایر دستگاهها پردازش میشوند. اطلاعات مربوط به فاصله بر اساس تأخیر زمانی بین ارسال و دریافت امواج صوتی محاسبه میشود. این اطلاعات به صورت دیجیتال یا آنالوگ ارائه میشوند و میتوانند توسط میکروکنترلر، ماژولهای الکترونیکی یا سیستمهای خارجی دیگر استفاده شوند.ماژولهای التراسونیک شامل دو بخش اصلی هستند: ترانسدیوسر ارسالکننده (Transmitter) و ترانسدیوسر دریافتکننده (Receiver). ترانسدیوسر ارسالکننده وظیفه تولید امواج صوتی با فرکانس بالا را دارد و ترانسدیوسر دریافتکننده سیگنالهای بازتابی را دریافت میکند. این دو بخش به صورت جفتی کار میکنند تا فواصل را به صورت دقیق اندازهگیری کنند.ماژولهای دارای ویژگیها و پارامترهای مختلفی هستند، از جمله فرکانس کاری، دقت اندازهگیری، فاصله قابل اندازهگیری، زمان پاسخ و نوع رابط ارتباطی. برخی از ماژولهای تراسونیک دارای رابطهای استاندارد مانند UART، I2C یا SPI برای ارتباط با سایر دستگاهها هستند.در کاربردهای مختلف، ماژولهای تراسونیک ممکن است برای اندازهگیری فواصل، تشخیص حضور یا عدم حضور، تعیین سرعت، مانیتورینگ مواد مایع، اندازهگیری سطح آب و بسیاری دیگر از وظایف استفاده شوند.
مشخصات فنی آلتراسونیک SRF05
ماژول آلتراسونیک SRF05 یک ماژول تراسونیک پرکاربرد است که برای اندازهگیری فواصل و ارتفاعها استفاده میشود. این ماژول از تکنولوژی ترازوئیستور تشخیصی (CMOS) استفاده میکند و دارای یک ترانسدیوسر ارسالکننده و یک ترانسدیوسر دریافتکننده است.ماژول SRF05 قابلیت ارسال امواج صوتی با فرکانس بالا توسط ترانسدیوسر ارسالکننده را دارد و سپس با استفاده از ترانسدیوسر دریافتکننده سیگنالهای بازتابی را دریافت میکند. با توجه به تأخیر زمانی بین ارسال و دریافت امواج صوتی، ماژول قادر به محاسبه فاصله مورد نظر میباشد.SRF05 دارای پایههای مختلفی است که میتواند به میکروکنترلرها یا سایر دستگاههای الکترونیکی متصل شود. این ماژول دارای پارامترهای قابل تنظیمی مانند فرکانس ارسال و حساسیت دریافت است که میتواند بر اساس نیازهای کاربر تنظیم شود.یکی از ویژگیهای جالب SRF05، قابلیت اندازهگیری فواصل در محدوده وسیعی است. این ماژول قادر است فواصلی در محدوده ۲ سانتیمتر تا ۳ متر را با دقت بالا اندازهگیری کند. همچنین، با استفاده از امواج صوتی با فرکانس بالا، قابلیت عملکرد در محیطهای صوتی پرسر و صدای محیط را دارد.
بررسی پایه های آلتراسونیک SRF05
- Vcc: این پایه به منبع تغذیه ۵ ولت متصل میشود. این پایه برای تامین برق مورد نیاز ماژول استفاده میشود.
- Trig: پایه Trig وظیفه فعال کردن فرایند ارسال امواج صوتی را دارد. با اعمال یک پالس با دامنه مشخص بر روی این پایه، ماژول آماده ارسال امواج میشود.
- Echo: پایه Echo سیگنال بازتابی را دریافت میکند. بر اساس تأخیر زمانی بین ارسال و دریافت سیگنال، میزان فاصله قابل اندازهگیری تعیین میشود.
- GND: این پایه به زمین متصل میشود و ارتباط الکتریکی ماژول را با منبع تغذیه و سایر دستگاهها فراهم میکند.
- NC: پایه NC (No Connection) پایه اضافی است که به طور معمول استفاده نمیشود و برای کاربردهای خاص مورد استفاده قرار میگیرد یا برای پایههای غیر استاندارد استفاده میشود.
پایه Trigger و Echo در خروجی پالس دیجیتال ۱۰uS ایجاد میکند. خروجی پایه Echo بین ۰ تا Vcc متغیر است. دراین حالت پالس ۱۰uS به پایه تریگر Trigger ارسال شده و سپس سنسور به صورت اتوماتیک در خروجی فرکانس ۴۰ کیلوهرتز را ارسال خواهد کرد. توسط پایه Echo مانیتورنیگ خروجی انجام میشود. هنگامی که خروجی Echo افزایش یابد، تابمر فعال میشود. سپس با کاهش یافتن خروجی Echo، مدت زمان سپری شده در تایمر ذخیره شده و در نهایت فاصله توسط فرمولی که برای محاسبه فاصله شی تا سنسور تعریف شده است، اندازه گیری خواهد شد.
اتصالات پروژه srf05 با STM32
در این پروژه از LCD کاراکتری برای نمایش فاصله استفاده شده است. برای آشنایی با نحوه راه اندازی LCD کاراکتری و نمایش اطلاعات بر روی آن آموزش راه اندازی LCD کراکتری به کمک میکروکنترلر STM32 را مطالعه کنید. همانطور که گفته شد ماژول SRF05 دارای ۵ پایه است. پایه out در این پروژه کاربردی ندارد و از آن استفاده نمیکنیم. اما ترتیب اتصال پایه های دیگر ماژول به صورت زیر است.
- پایه VCC ماژول SRF05 به خروجی ۵ ولت برد BluePill متصل شود.
- پایه GND ماژول SRF05 به GND برد BluePill متصل شود.
- پایه Trig ماژول SRF05 به پایه PA9 برد BluePill متصل شود.
- پایه Echo ماژول SRF05 به پایه PA8 برد BluePill متصل شود.
اتصالات LCD کاراکتری به میکروکنترلر نیز به صورت زیر است.
- پایه شماره ۱ ال سی دی به GND برد BluePill متصل شود.
- پابه شماره ۲ ال سی دی به ۵ ولت برد BluePill متصل شود.
- پایه شماره ۳ ال سی دی با یک مقاومت ۲٫۲ کیلو اهم به GND متصل شود.
- پایه شماره ۴ ال سی دی به پایه PA0 برد BluePill متصل شود.
- پایه شماره ۵ ال سی دی به پایه PA1 برد BluePill متصل شود.
- پایه شماره ۶ ال سی دی به پایه PA2 برد BluePill متصل شود.
- پایه شماره ۱۱ ال سی دی به پایه PA3 برد BluePill متصل شود.
- پایه شماره ۱۲ ال سی دی به پایه PA4 برد BluePill متصل شود.
- پایه شماره ۱۳ ال سی دی به پایه PA5 برد BluePill متصل شود.
- پایه شماره ۱۴ ال سی دی به پایه PA6 برد BluePill متصل شود.
- پایه شماره ۱۵ ال سی دی به GND برد BluePill متصل شود.
- پابه شماره ۱۶ ال سی دی به ۵ ولت برد BluePill متصل شود.
پیکر بندی میکروکنترلر در STM32CubeMX
میزان فاصبه ماژول SRF05 با موانع را از روش های مختلفی میتوان دریافت نمود. در این آموزش ما با استفاده از تایمر میکروکنترلر در مد Input Capture direct میزان فاصله ماژول با موانع را تشخیص میدهیم. پس از ساخت پروژه در نرم افزار STM32CubeMX و انجام تنظیمات مربوط به بخش های RCC و SYS، بایستی وارد بخش TIM1 شده و گزینه Channel 1 را بر روی Input Capture direct mode تنظیم کنید. پس از تنظیم گزینه مشاهده خواهید نمود که پایه PA8 میکروکنترلر به رنگ سبز درآمده و عبارت TIM1_CH1 در کنار آن نوشته شده است.
سپس بایستی در بخش Parameter Setting مقدار Prescaler را بر روی ۷۲ قرار دهید. این کار کلاک APB را بر ۱-۷۲ تقسیم میکند و فرکانس تایمر بر روی ۱ مگاهرتز تنظیم میشود. این کار لازم است زیرا ماژول SRF05 سیگنال را در میکروثانیه ارسال میکند. سپس مقدار Counter Period یا همان ARR را بر روی ۱-۰xFFFF تنظیم کنید. در واقع این با این کار حداکثر میزان قابل محسابه را تعیین میکنیم. حداکثر مقداری که در میکروثانیه میتوانیم محاسبه کنیم.
در ادامه بایستی وارد بخش NVIC تایمر شده و تیک مربوط به گزینه TIM1capture compare interrupt را بزنید.
تا به اینجا تنظیمات مربوط به تایمر و پایه Echo ماژول SRF05 انجام شده است. برای تنظیم پایه مربوط به پایه Trig ماژول تنها کافی است که پایه PA9 را به عنواخ خروجی تعریف کنید. برای راه اندازی LCD کاراکتری بایستی پایه های PA0 تا PA6 را به صورت خروجی تعریف کنید.
سپس بایستی وارد بخش Clock Configuration شده و کلاک میکروکنترلر را بر روی ۷۲ مگاهرتز تنظیم کنید. در آخر در قسمت Project Manager ابتدا نام پروژه و مسیر مورد نظر برای ذخیره پروژه را مشخص کنید. سپس گزینه Toolchain را بروی MDK-ARM و ورژن آن را بر روی ۵ تنظیم کرده و بر روی گزینه GENERATE CODE در قسمت نوار بالایی کلیک کنید تا پروژه ساخته شود.
کدنویسی در نرمافزار KEIL
در پروژه srf05 با STM32 پس از ورود به نرم افزار KEIL بایستی وارد فایل main.c شوید. سپس در این فایل ابتدا بایستی کتابخانه مربوط به LCD را به برنامه اضافه کنید.
#include "character_lcd.h"
سپس متغییر هایی که برای محاسبه فاصله ماژول نیاز داریم را تعریف کنیم.
uint32_t IC_Val1 = 0; uint32_t IC_Val2 = 0; uint32_t Difference = 0; uint8_t Is_First_Captured = 0; uint8_t Distance = 0; char buff[16];
سپس بایستی پایه ای که برای اتصال به پایه Trig ماژول به عنوان خروجی تعریف کردیم را معرفی کنیم.
#define TRIG_PIN GPIO_PIN_9 #define TRIG_PORT GPIOA
در ادامه برای راه اندازی ماژول نیاز است که تاخیری در واحد میکرو ثانیه ایجاد کنیم. تابع HAL_Delay تاخیری که ایجاد میکند در واحد میلی ثانیه است. با قرار دادن تابع زیر در کد میتوانیم تاخیر در واحد میکرو ثانیه در کد خود داشته باشیم. این تابع از TIM1 برای ساخت تاخیر میکروثانیه استفاده میکند.
void delay (uint16_t time) { __HAL_TIM_SET_COUNTER(&htim1, 0); while (__HAL_TIM_GET_COUNTER (&htim1) < time); }
تابع زیر برای شروع برای شروع کار ماژول تعریف شده است که بایستی برای شروع محاسبه فاصله یک پالس مربعی با فرکانس ۱۰۰ کیلوهرتز به پایه Trig ماژول ارسال شود. و سپس تایمر برای تشخیص وضعیت پایه Echo فعال میشود.
void HCSR05_Read (void) { HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET); // pull the TRIG pin HIGH delay(10); // wait for 10 us HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET); // pull the TRIG pin low __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_CC1); }
کد زیر قسمت تشخیص فاصله توسط پایه Echo است. در این قسمت تابع HAL_TIM_IC_CaptureCallback قرار داده شده است. تایمر برای شروع شمارش ابتدا حساس به لبه بالا رونده است. پس از تغیر وضعیت پایه Echo از صفر به یک این تابع فراخوانی میشود. در ادامه حساسیت تایمر به لبه پایین رونه تغییر میکند. در اخر مقدار فاصله محاسبه شده در متغیر Distance ذخیره میشود.
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // if the interrupt source is channel1 { if (Is_First_Captured==0) // if the first value is not captured { IC_Val1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // read the first value Is_First_Captured = 1; // set the first captured as true // Now change the polarity to falling edge __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING); } else if (Is_First_Captured==1) // if the first is already captured { IC_Val2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // read second value __HAL_TIM_SET_COUNTER(htim, 0); // reset the counter if (IC_Val2 > IC_Val1) { Difference = IC_Val2-IC_Val1; } else if (IC_Val1 > IC_Val2) { Difference = (0xffff - IC_Val1) + IC_Val2; } Distance = Difference * .034/2; Is_First_Captured = 0; // set it back to false // set polarity to rising edge __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_CC1); } } }
برای شروع کار تایمر نیاز است که دستور Start تایمر را در تایع main قبل از حلقه while(1) بنویسید. دستور Start تایمر به صورت زیر است.
HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1);
همچنین در این قسمت نیاز است که تابع راه انداز LCD نیز فراخوانی شود. در صورتی که با نحوه راه اندازی LCD کاراکتری بر روی میکروکنترلرهای STM32 آنشایی کافی را ندارید. آموزش راه اندازی LCD کراکتری به کمک میکروکنترلر STM32 را مطالعه کنید.
LCD_Config.Font = _FONT_5X7; LCD_Config.Mode = _4BIT_INTERFACE; LCD_Config.NumberOfLine = _2LINE_DISPLAY; LCD_Init();
سپس داخل حلقه while(1) بایستی ابتدا تابع راه اندازی ماژول را فراخونی نموده سپس مقدار فاصله را بر روی LCD نمایش دهید. که این موارد در کد زیر قرار داده شده است.
HCSR05_Read(); HAL_Delay(200); LCD_GotoXY(2,0); LCD_PutString("DigiSpark.ir"); sprintf(buff,"Distance = %4d ",Distance); LCD_GotoXY(0,1); LCD_PutString(buff);
در ادامه پروژه srf05 با STM32 کد هایی که بایستی به پروژه خود اضافه کنید به صورت کامل نوشته شده است. میتوانید کد زیر را با توجه به محل قرار گیری هر دستور در فایل ساخته شده توسط نرم افزار STM32CubeMX کپی کرده و داخل پروژه خود قرار دهید.
#include "character_lcd.h" uint32_t IC_Val1 = 0; uint32_t IC_Val2 = 0; uint32_t Difference = 0; uint8_t Is_First_Captured = 0; uint8_t Distance = 0; #define TRIG_PIN GPIO_PIN_9 #define TRIG_PORT GPIOA void delay (uint16_t time) { __HAL_TIM_SET_COUNTER(&htim1, 0); while (__HAL_TIM_GET_COUNTER (&htim1) < time); } void HCSR05_Read (void) { HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET); // pull the TRIG pin HIGH delay(10); // wait for 10 us HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET); // pull the TRIG pin low __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_CC1); } // Let's write the callback function void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // if the interrupt source is channel1 { if (Is_First_Captured==0) // if the first value is not captured { IC_Val1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // read the first value Is_First_Captured = 1; // set the first captured as true // Now change the polarity to falling edge __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING); } else if (Is_First_Captured==1) // if the first is already captured { IC_Val2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // read second value __HAL_TIM_SET_COUNTER(htim, 0); // reset the counter if (IC_Val2 > IC_Val1) { Difference = IC_Val2-IC_Val1; } else if (IC_Val1 > IC_Val2) { Difference = (0xffff - IC_Val1) + IC_Val2; } Distance = Difference * .034/2; Is_First_Captured = 0; // set it back to false // set polarity to rising edge __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_CC1); } } } int main(void) { HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1); LCD_Config.Font = _FONT_5X7; LCD_Config.Mode = _4BIT_INTERFACE; LCD_Config.NumberOfLine = _2LINE_DISPLAY; LCD_Init(); while (1) { HCSR05_Read(); HAL_Delay(200); LCD_GotoXY(2,0); LCD_PutString("DigiSpark.ir"); sprintf(buff,"Distance = %4d ",Distance); LCD_GotoXY(0,1); LCD_PutString(buff); } }
در آخر بایستی برنامه را کامپایل کرده و بر روی برد Bluepill پروگرام کنید. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول آموزش های میکروکنترلر Stm32 را مطالعه نمایید. پس از دانلود کد بر روی برد BluePill بایستی یک بار کلید reset را بر روی برد فشار دهید. در صورت که اتصالات را به طور صحیح متصل کرده باشید.
پروژه کامل این آموزش را میتوانید در این لینک دانلود کنید.
جمع بندی
پیش از این با نحوه راه اندازی ماژول SRF05 به کمک میکروکنترلرهای دیگر مثل انواع برد های آردوینو آشنا شده بودیم اما در این آموزش با نحوه راه اندازی ماژول SRF05 با کمک میکروکنترلر STM32 آشنا شدیم. ماژول فاصله سنج التراسونیک یا همان SRF05 غیر از اندازه گیری فاصله ماژول تا مانع و نمایش آن میتواند کاربرد های دیگری نیز داشته باشد. از جمله این کاربرد ها میتوان به ساخت ربات حل ماز ، ساخت مایع ریز برای جلوگیری از انتقال ویروس کرونا و یا خیلی از کاربرد های دیگر اشاره نمود.
لوازم مورد نیاز
- پروگرامر STC Auto Programmer
- برد STM32 مدل F103C8T6 دارای تراشه ARM
- نمایشگر LCD کاراکتری ۱۶*۲
- ماژول آلتراسونیک تشخیص فاصله SRF05
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.
ببخشید srf05 با srf04 چه تفاوتی داره ؟؟
با سلام
در عملکرد و نحوه راه اندازی تفاوت خاصی ندارند. تنها پایه out بر روی SRF05 اضافه شده است که در این آموزش از این پایه استفاده نمیکنیم.
سلام
برد آماده هست ؟ اگه بخواهیم قیمت چند و چگونه می توانیم تهیه کنیم.
سلام
پروژه را به صورت برد آماده نیاز دارید و یا ماژول SRF05 را به صورت برد لازم دارید؟
سلام و ارادت فراوان . اگر از میکرویی که فرکانس کاری ۴۸ مگاهرتز دارد استفاده کنیم . آیا امکان استفاده از SRF05 رو داریم . برای میکرو ثانیه بودن .
با سلام
تنها بایستی در نظیم تایمر فرکانس جدید را بجای فرکانس ۷۲مگاهرتز در نظر بگیرید.
باسلام
میخواستم بدونم همین پروژه رو اگر بخوام روی نرمفزار پروتوس شبیه سازی کنم چیکار باید کنم؟
با سلام
متاسفانه نرم افزار پروتئوس از میکروکنترلر های STM32 به خوبی پشتیبانی نمیکند. پیشنهاد میکنم برای تست و بررسی مدار را روی بردبورد ببندید.
سلام خیلی ممنون از آموزش خوبتون
اگر بخوایم عملکرد سنسور را در دیباگر نرم افزار کیل ببینیم آیا باید متغیر Is_First_Captured را اضافه کنیم؟
با سلام
خروجی نهایی ماژول داخل متغیر Distance قرار میگیرد. اما برای بررسی عملکرد شما میتوانید هر یک از متغیر ها را به دلخواه در قسمت دیباگیر مورد بررسی قرار دهید.
سلام
پایه شماره ۱۴ ال سی دی به پایه PA9 برد BluePill متصل شود. چون داخل عکس به پایهpa6متصل شده اینو میشه بهم جواب بدین با تشکر و ممنون از سایت خوبتون.
با سلام
از توجه شما سپاسگزارم، شماتیک قرار گرفته داخل آموزش درست است و درقسمت توضیحات اشتباه تایپی رخ داده بود.
با سلام
یک سوال داشتم آیا این برنامه رو میشه روی stm32 c6 اجرا کرد یا باید برنامه تغییر کنه.
با سلام
در صورتی که میکروکنترلر مورد نظر دارای تایمر با مد InputCaptue باشد، امکان اجرای برنامه بر روی میکروکنترلر وجود خواهد داشت.
ببخشید یعنی الان فایل کامل پروژه که شما آپلود کردین و برای میکرو stm32f103c8 بوده رو من میتونم بدون تغییر روی میکرو خودم stm32f103c6 پروگرام کنم یا باید از اول برنامه رو بنویسم
باسلام
بایستی پروژه ای که ساخته میشود بر اساس میکروکنترلر مورد اسفتاده شما باشد. بنابراین بایستی پروژه جدیدی بسازید و کد های آموزش را داخل آن کپی کنید.
با سلام
چرا تابع void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) رو نوشتیم ولی جایی استفاده نکردیم توی main؟؟
ممنون میشم توضیح بدید