سطحي و كار راه انداز
دقيق و حرفه اي
سلام به همه دوستان
من تقریبا کل این تاپیک و خوندم. درسته که Keil نسبتا کامپایلر خوبی هست اما در واقع با استفاده از همون توابع CMSIS باز هم اینقدر دردسر هست که همش باید بری بگردی و سیخونک بزنی و ...
مثلا برای ایجاد یه تاخیر در حد ثانیه یه کاری باید بکنی در حد قتل عمد!!!
پیشنهاد میکنم عزیزان یه سری به کامپایلر MikroC بزنن. واقعا عالیه
خوب با کیل به صورت رجیستری کد بنویسید اگه می خواهید با cmsis نباشه
سلام بزن توی گوگل دانلود جاوا مثلا می تونی از لینک زیر دانلود کنی
Java SE Runtime Environment 8.0 Update 45 / 7.0 Update 80 / JDK x86/x64
من یک سوالی را چند صفحه قبل در مورد شبیه سازی میکروهای STM32 پرسیدم که کسی جوابی نداد
http://www.iranmicro.ir/forum/5971-%...%DB%8C-53.html
چند وقته که دنبالشم و فهمیدم که میکروهای cortexm0,cortexm4 داخل کیل قابلیت شبیه سازی ندارند البته می تونید دیباگ کنیدولی simulation نمی تونید بکنید
التماس دعا
دوستان میدونید این ایراد برای چیه؟
کتابخانه rcc باید اد شده باشه و هدرشم اینکلاد شده باشه
مرسی از اینکه سریع و دقیق جواب دادین
یه مشکل دیگه دارم. اینکه فایل STM32_Init و به پروژه اضافه کردم منتها توی فایل STM32_Init.c یه هدر هست به اسم STM32_Reg.h که ازش ایراد میگیره. این و چطور میشه حلش کرد؟
STM32_Init.rar
اگر تازه شروع کردید برنامه stm32cubemx رو که تو صقحات قبل معرفی کردم نصب کنید خیلی از مشکلاتون حل میشه
بعد که راه افتادید میتونید با رجیستر ها هم کار کنید ولی cmsis بهتره چون کمتر درگیر رجیستر میشید
من نرم افزاری که گفتید رو چند وقته پیش با آپدیت هاش نصب کردم. سؤالی که دارم اینه که آیا میشه فقط با همون توابعی که این نرم افزار میده کار کرد با توجه به اینکه نام های اون با CMSIS متفاوته؟
چون اگه قرار باشه داخل توابع اون از CMSIS استفاده کنیم دوباره روز از نو روزی از نو. باید همه رو دوباره بشناسونیم و دردسر داره.
یه چیز دیگه اینکه کار با توابع CMSIS چرا اینقدر گنگ و کج و کوله است؟ توی توابع به چیزهایی میخوریم که فراخونی شده ولی عمرا وجود خارجی نداره؟!!
اینقد ایراد و خطا میگیره که آدم بیزار میشه. حالا یا من واقعا مشکل دارم یا خیلی درست و حسابی نیست. یک هفته ست میخوام فقط یک پین و صفر و یک کنم ولی واقعا موندم دیگه. کدهای آماده دیگران و باز میکنم اصلا معلوم نیست توش چه خبره.حتی یه دونه پیدا نکردم که کلاک و تعریف کرده باشه. همینجوری کامپایل میکنی همش خطا میده با اینکه همه توابع و تعریف میکنم.کامپایلر من آخرین ورژنه.
آیا میشه اطلاعاتی از نحوه کارکرد توابع نرم افزار cubemx پیدا کرد؟
من توی MikroC برنامه مینویسم و تقریبا همه کار میکنم نمیدونم چرا توی KEIL اینقد به مشکل خوردم.
سلام
روز همگی بخیر
از اساتید کسی هست که بتونه در مورد توابع و امکانات مربوط به timer 1 توضیحاتی ارایه بده؟
منظورم با cmsis هستش
از stm32f103zet6 استفاده میکنم و میخوام با اپدیت کردن مقدار ocr3n (در avr به این اسمها شهرت داشت) در طول برنامه یه موج خاص در خروجی تایمر ایجاد کنم
اینا رو نوشتم براش، لطفا راهنمایی کنید که کجاشهاش ایراد داره.
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_DeInit(TIM1);
TIM_TimeBaseInitStruct.TIM_Prescaler = (65535);
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = 2000;
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStruct.TIM_Pulse = 0x0000;
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_Low;
TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC3Init(TIM1, &TIM_OCInitStruct);
TIM_InternalClockConfig(TIM1);
TIM_PrescalerConfig(TIM1, 1, TIM_PSCReloadMode_Update);
TIM_CounterModeConfig(TIM1, TIM_CounterMode_Up);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
TIM_ARRPreloadConfig(TIM1, DISABLE);
از دیتا شیت و منوال شرکت st همینارو متوجه شدم
لطفا ایراداتش رو بگیرین
یه متغییر دارم به نام CCR3_Value که مقدار جدید CCR رو داخل اون میریزم
تشکر
روز خوش
ویرایش توسط Hadi_ghr_e : 30-06-2015 در ساعت 17:41
سلامیه پروژه درست کردم که داخل while دوخط کد هست مقدار puls رو از 0-1024 میتونی تغییر بدی که اندازه pulse رو تعیین میکنهDropbox - f103zet6.rar
سلام
مرسی دوست عزیز
فقط کتابخانه های پروزه شما برام نا اشناست
یعنی جایی ندیدم
برای ساخت اینجور پروژه ها ایا نرم افزار ویزاردی وجود داره که با cmsis جواب بده؟
تشکر
- - - Updated - - -
من نیاز دارم ماهیگیری یاد بگیرم
اساتید پشت مارو خالی نکنن لطفا
یه اموزش حتی مختصر
از کامپیر باید استفاده کنم؟
سلام
من که قبلا یهتون توضیح دادم شما اول stm32cubemx رو نصب کنید و از قسمت update پکیج مربوت به سری میکرو تون رو نصب کنید
این فایل رو هم تو گوگل سرچ کنید و دانلود کنید اگر نتونستید باز هم باهاش کار کنید من راهنمایی میکنم
البته این نرم افزار مستقیم با رجیستر ها کار نمیکنه ولی تویه آرم ها کار با رجیسترها واقعا سخت میشه و نیازی هم نیست
این فایل منوال هم که گفتم dm00154093.pdf
اساتید ارجمند، آیا روشی هست که بشه فرکانس میکرو رو به دست آورد؟ مثلا یه رجیستر و خوند که فرکانس به دست بیاد؟
سلام و روز بخیر عرض میکنم
ممنون که وقت میزارین
میخوایتم با اندازه گیری دمای داخل جعبه واستفاده از پایه CH3N یعنی PB.15 بیس ترانزیستوری رو تحریک کنم که یک فن رو کنترل میکنه
با افزایش دما دور فن زیاد و با کاهش اون دور فن کم میشه
cubemx رو نصب دارم ولی خروجیش رجیستره نه cmsis
لطفا اگه امکان داره یه توضیحاتی در مورد تایمر بدین
مثلا پری اسکیلر چیه و مربوط به کدام قسمت شکلی که من گذاشتم میشه؟
پری یود چیه ؟
از چه مدی باید استفاده کرد؟
بازم تشکر
سلام
اون فایل رو که فرستادم داخلش یه پروژه با cubemx هست اون رو باز کنید و ADC رو هم تنظیم کنید و جنریت رو بزنید تا تغییرات اعمال بشه
موقع نوشتن کد هم باید همه کدهاتون رو بین این دو جمله بنویسید
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
تا وقتی دوباره تنظیمات رو عوض کردید cubemx کدهاتون رو پاک نکنه
اون یوزر منوال رو که گفتم تو پست قبل هم دانلود کنید بدرتون میخوره
cubemx برایه مقدار دهی به رجیستر ها میاد یه struct درست میکنه و به اعضایه اون اعداد رو نصبت میده و در آخر با ارسال به یه تابع اعداد رو دریافت میکنه و به رجیستر ها میده
به طور مثال داخل این تابع در پروژه ای که ارسال کردم تنظیمات تایمر انجام میشه void MX_TIM1_Init(void)
داخل تابه یه متغیر هست چنتا اسم
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
TIM_OC_InitTypeDef sConfigOC;
که هرکدوم قسمتی از تایمر رو تنظیم میکنه مثلا TIM_OC_InitTypeDef sConfigOC; برایه قسمت PWM هست که داره تعدادی عضو هست
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 512;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
شما بسته به نیازتون در برنامه این پارامتر ها رو تغییر میدید و آخرین خط رو یعنی HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); ذوباره فراخوانی میکنید تا تغییرات اعمال بشه
ولی برایه این کار یا باید استراکت TIM_OC_InitTypeDef sConfigOC; خارج از همه توابع به صورت عمومی تعریف کنید یا داخل هرتابع دیگه که استفاده میکنید یه استراک دیگه هم تعریف کنید و همون استراکت
رو به عنوان آرگومان به تابع تنظیمات ارسال کنید شما برایه تغییر در عرض پالس کافیه sConfigOC.Pulse = 512; رو به مقدار دلخواه تغییر بدید و حداکثر هم 1024 چون تو تابه اصلی تایمر نگاه کنید من پریود هایه
شمارش تایمر رو 1024 دادم که قابل تغییر هست تا 65535 بعد از اعمال عدد مورد نظر به هر عضو از استراکت باید تابع مورد نظرش رو هم فراخوانی کنی تا تغییرات رو در خروجی ببینی
امیدوارم متوجه شده باشی من بلد نیستم خوب توضیح بدم
تایمر هایه بیشتر آرمها خیلی پیچیده هستند و امکانات زیادی رو ارایه میدن
فرکانس باسی رو که تایمر بهش وصل هست (apb1 ,apb2 بسته به آیسی و شماره تایمر ممکنه رو یکی از اینا باشه)
رو به عدد پری اسکیل تقسیم میکنه و فرکانس کاری تایمر بدست میاد
پریود هم همون عدد 65535 تویه شکل هست که میتونه از 0 تا 65535 تغییر کنه
عزض پالس رو هم که تو پست قبلی توضیح دادم