PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل باstm32f103



kazem67sh
30-11-2012, 21:42
با سلام خدمت دوستای گلم
من روی پورتهای stm به یک مشکل خوردم
:روی پورت ها A,B,C,D همه رو با هم (پین های یک پورت رو با هم)0و1 میکنم ولی!
از پورت A شماره پین های 0و13و14و15
از پورت B شماره پین های 0و2و3و4و13
از پورت C شماره پین های 0
دوست ندارند تغییر وضعیت بدن
میگن تصمیمت رو بگیر ما رو گیج کردی بالاخره 0 یا1:baad:
ولی بقیه درست کار می کنند
جریان چیه؟

sigma-mx
30-11-2012, 21:47
دوست ندارند ! مگه دست خودشونه ... مجبورند !!! 0 یا 1 تکلیف رو مشخص کن !

مهندس این پایه ها مربوط به jtag و swd هست که تو حالت پیش فرض فعاله و برای استفاده باید به حالت GPIO در اصطلاح remap بشند ...

kazem67sh
30-11-2012, 21:49
آره خوب ولی چطوری؟

sigma-mx
30-11-2012, 21:58
از دستور زیر برای remap کردن استفاده میشه . مثلا میشه یک قابلیت رو پین رو فعال و غیر فعال کرد ( تو کتابخانه gpio این دستور وجود داره ) :


void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

گزینه هاش هم تو همون gpio.h هست . مثلا برای غیر فعال کردن بخش های دیباگ :



GPIO_PinRemapConfig( GPIO_Remap_SWJ_Disable, ENABLE); // Full SWJ Disabled (JTAG-DP + SW-DP)

kazem67sh
30-11-2012, 22:01
خوب اونوقت اگه jtag روغیر فعال کنم سری بعد دوباره میتونم پروگرمش کنم؟

sigma-mx
30-11-2012, 22:11
تنها راهش همینه که اون پین ها فعال بشه . من با jtag ش کار نکردم . من از بوت لودر استفاده میکنم ...

kazem67sh
30-11-2012, 22:37
برای پروگرم از طریق بوت چطوری باید عمل کنم؟

sigma-mx
30-11-2012, 22:50
در انجمن stm32 سرچ کنید .. چندین بار گفته شده ..
باید خطوط rx وtx از usart1 رو به کامپیوتر با مبدل وصل کنید و سپس حالت بوت ( کلید یا جامپر ) رو رو حالت بوت لودر قرار بدید و ریست کنید تا لود بشه .. سپس با برنامه flash loader میتونید پروگرام کنید .

kazem67sh
02-12-2012, 09:24
با سلام مجدد من برای بوت لودر کلی گشتم
نرم افزار flash loader demonstrator رو براش پیدا کردم
برد رو به rx,tx سیستم وصل کردم boot=0و microرو هم ریست کردم
ولی نرم افزارش پیغام زیرو میده وبرنامه قبلی هم هنوز اجرا میشه

kazem67sh
02-12-2012, 10:45
یه سوال دیگه مگه usart ارتباط سنکرون سه سیمه نیست؟چرا همینطوره :018:
پس پایه ی کلاک usart رو کجا باید وصل کنیم ؟:gop:

kazem67sh
02-12-2012, 10:49
راستی ft232فقط uart پشتیبانی میکنه وclock برای usartنداره

Doloop
02-12-2012, 12:17
یه سوال دیگه مگه usart ارتباط سنکرون سه سیمه نیست؟چرا همینطوره :018:
پس پایه ی کلاک usart رو کجا باید وصل کنیم ؟:gop:


مهندس اگه کلاک رو وصل نکنی uart اطلاعات رو پشت سرهم دریافت میکنه و به لبه کلاک حساس نمیشه ولی اگه کلاک سیستم رو وصل کنی مثلا میتونی بگی با هر لبه منفی یا مثبت اطلاعات رو دریافت کن:wink:

sigma-mx
02-12-2012, 12:37
یه سوال دیگه مگه usart ارتباط سنکرون سه سیمه نیست؟چرا همینطوره :018:
پس پایه ی کلاک usart رو کجا باید وصل کنیم ؟:gop:
مهندس پیشفرض واحد usart تو مد آسنکرون هست و کلاک نداره . شما دنبال مشکل باش ... داری اصل قضیه رو زیر سوال میبری ! من 1000 باره دارم با همین روش پروگرام میکنم .. میکروی شما بوت لودرش لود نمیشه که یا مشکل ریست داری یا جامپر های بوت مشکل داره ... شما اتصالات رو تا پین های میکرو چک کن .. حتما راه میوفته ..

kazem67sh
02-12-2012, 21:28
دوستان مشکل نداره ft232 رو روی 5ولت بذارم میکرو اوف نمیشه
البته معنیش این نیست که بوت لودرم راه افتاده
الان 2 تا trainer دارم یکیش با stm32f103RBT هست و یکیشم با stm32f103RET
ولی هیچ کدوم جواب نمیده ii998)ii998)ii998)ii998)ii998)ii998)ii998)

kazem67sh
02-12-2012, 21:41
راستی تنظیمات boadrate و...توی flash loader برای شناسایی میکرو مهمه؟
یا فقط جهت سرعت programming هست؟

kazem67sh
02-12-2012, 21:42
راستی تنظیمات boadrate و...توی flash loader برای شناسایی میکرو مهمه؟
یا فقط جهت سرعت programming هست؟

sigma-mx
02-12-2012, 22:51
نه مهندس ، سر 3.3 باشه . در نتیجه کار تغییری ایجاد نمیکنه 5 ولت بزاری ..
چرا تاثیر داره .. با باود ریت پایین امتحان کن اول اگه جواب داد ببرش بالا بعد .. مثلا با 9600 تست کن ..

kazem67sh
02-12-2012, 23:55
دم همتون درد نکنه
حلللللللللللللللللللللللل للللللللللللللللللللللللل للللله
:fan::018::fan::018::fan::018::018::018::018::018: :018::018:

kazem67sh
02-12-2012, 23:58
مقاومت 10 کیلو رو یادم رفته بود بزنم:mrgreen::mrgreen::mrgreen:

kazem67sh
03-12-2012, 11:11
از دستور زیر برای remap کردن استفاده میشه . مثلا میشه یک قابلیت رو پین رو فعال و غیر فعال کرد ( تو کتابخانه gpio این دستور وجود داره ) :


void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

گزینه هاش هم تو همون gpio.h هست . مثلا برای غیر فعال کردن بخش های دیباگ :



GPIO_PinRemapConfig( GPIO_Remap_SWJ_Disable, ENABLE); // Full SWJ Disabled (JTAG-DP + SW-DP)



باسلام مجدد خدمت دوستان گلم
مهندس این قسمت اولش دقیقا ماله چیه؟
یعنی باید توی FunctionalState newstate یکی از چند کاربرد مورد نظرمونو انتخاب کنیم؟
درواقع ورودی های این تابع چیه و کلا به چه کارمیاد؟چون باتابع دومی تونستم remap کنم (البته فقط PA0)رو .برای بقیه pinها گیر کردم چون تابعش رو نمیدونم کدومه:(
portA:13,14,15
Portb:3,4

sigma-mx
03-12-2012, 11:58
سلام
مهندس اولی که شکل کلی تابع هست . و دومی ( خط پایین ) یک نمونه مثال که اگه اشتباه نکنم SWJ رو disable میکنه و پایه هاش تبدیل به gpio میشند . اگه منظور شما مرجع این پارامتر های مثل gpio_remap_swj_disable هست که گفتم قبلا اگه تو فایل gpio.h (یعنی stm32f10x_gpio.h ) رو بگردید 30-40 مورد از این پارامتر ها پیدا میکنید که جلوی هر کدوم توضیحشو نوشته ... تمامش هم مربوط به ریمپ کردن یک واحد هست .مثلا واحد usart1 پایه های rx,tx مربوط به دو پایه خاص هست دیگه ... شما میتونید با ریمپ کردن اونا رو رو دو پایه مشخص دیگه ( البته نه هر پایه ای ! تو دیتاشیت گفته شده ) منتقل کنید .
قسمت دوم تابع هم که باید enable یا disable باشه . یعنی شما این قابلیت و ریمپ رو فعال یا غیر فعال میکنید .
در مورد اینکه آیا باز هم پین هایی هستند که gpio نشدن تو همون گزینه ها بگرد چند تا مورد هست برای غیر فعال کردن swd و jtag که باید از اونا استفاده کنی .

kazem67sh
03-12-2012, 14:57
مهندس من دقیقا stm32f10x_gpio.h رو نگاه کردم
وهمینطور دیتاشیت stm رو
اونجا 3 موضوع بود که هنوز برام حل نشدست
1)main function after rest
(که خوب یعنی کارکرد اصلی pinبعد از reset وقبل از اعمال تغییر به پین)
2)default
3)Remap
حالامنظور شما اینه که اگه توی تابع GPIO_PinRemapConfig( GPIO_Remap_SWJ_NoJTRST, DISABLE);
disable بذاریم config پین میره روی I/Oواگه enableبذاریم میره روی remap?
پس default اینجا چیکارست ؟
یا اینکه توی تابع
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
بجای uint32_t GPIO_Remap حالت فعلی پین رو بذاریم و بجای FunctionalState NewState حالتی رو که میخوایم پین بهش تبدیل بشه؟
وکلا اگه یه مثال باشه خیلی بهتره چون من خیلی از تابع های stm32f10x_gpio.hرو امتخان کردم ولی از هیچ کدومش جواب نگرفتم بعد یه سوال دیگه اگه بخوایم یه پین تو حالت I/O باشه با ید حتما خاصیتش رو به یه پین دیگه بدیم؟
حالا من الان توی این برنامه ای که دارم فقط میخوام همه pin هام ioباشن اینم برنامه

kazem67sh
03-12-2012, 14:57
در واقع الان گیج گیجم:cry::cry:

sigma-mx
03-12-2012, 16:13
مهندس من دقیقا stm32f10x_gpio.h رو نگاه کردم
وهمینطور دیتاشیت stm رو
اونجا 3 موضوع بود که هنوز برام حل نشدست
1)main function after rest
(که خوب یعنی کارکرد اصلی pinبعد از reset وقبل از اعمال تغییر به پین)

2)default

3)Remap
حالامنظور شما اینه که اگه توی تابع GPIO_PinRemapConfig( GPIO_Remap_SWJ_NoJTRST, DISABLE);
disable بذاریم config پین میره روی I/Oواگه enableبذاریم میره روی remap?
پس default اینجا چیکارست ؟
یا اینکه توی تابع
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
بجای uint32_t GPIO_Remap حالت فعلی پین رو بذاریم و بجای FunctionalState NewState حالتی رو که میخوایم پین بهش تبدیل بشه؟
وکلا اگه یه مثال باشه خیلی بهتره چون من خیلی از تابع های stm32f10x_gpio.hرو امتخان کردم ولی از هیچ کدومش جواب نگرفتم بعد یه سوال دیگه اگه بخوایم یه پین تو حالت I/O باشه با ید حتما خاصیتش رو به یه پین دیگه بدیم؟
حالا من الان توی این برنامه ای که دارم فقط میخوام همه pin هام ioباشن اینم برنامه ببین مهندس . اون جدولی که دیدی تو ستون اول نوشته Main Function که کاملا واضحه ... یعنی بطورپیش فرض بعد ریست پین ها تو این حالت قرار دارند که یا بصورت نام پین نوشته ( مثل PC11 ) که تو حالت GPIO قرار دارند و یا پین در حالت دیباگ ( مثل JTDI ) و یا پین های اسیلاتور و کریستال (مثل OSC32_IN ) . این از این .....

تو ستون دوم و سوم اگه بالاشون رو نگاه کنی نوشته برای هر دو .. جزو Alternate function هستند . یعنی مثلا اگه رو پین PA9 ( که در حالت عادی GPIO هست ) واحد USART1 رو فعال کنیم ، حالت این پین میره رو USART1_TX .. یا اگه ،Timer1 رو فعال کنیم ، این پین میتونه TIM1_CH2 بشه ( کانال 2 تایمر 1 ) ..
ولی تعدادی انتخاب برای ما گذاشته که برای چند GPIO - پین یا Alternate Function رو بتونیم جاشو عوض کنیم . برای سری های بالاتر این میکرو مثل سری Conectivity Line این انتخاب ها خیلی بیشتره و شما میتونید مثلا برای واحد سریال 3-4 تا پین مختلف رو انتخاب کنید ... پس اینم مفهوم Remap ..

حالا اگه تو همون ستون اول نگاه کنی پین های A13-A14-A15-B3-B4 بطور پیش فرض تو مد دیباگ هستند و پین های D0-D1 هم برای اسیلاتور LSE هستند . حالا شما میری و تو همون فایل gpio.h که گفتم اون لیست ریمپ ها رو نگاه میکنی و با چند تا انتخابی که داری اون قابلیت رو فعال یا غیر فعال میکنی . معنی و مفهوم اونها هم کاملا معلومه و گفتم مقابلشون نوشته شده ... فقط حواست باشه ( تو تمامی کتابخانه های CMSIS ) ممکنه کلی توابع یا پارامتر نوشته شده باشه که برای میکروی شما نباشه . اینا کلی برای تمام خانواده نوشته شده .

مثلا اینجا که نوشته GPIO_Remap_SWJ_NoJTRST و جلوش نوشته

Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST

و شما با نوشتن ENABLE در واقع میگویید که عبارت فوق رخ بده یعنی تمام امکانات SWJ فعال بشه اما بدون پین JTRST ... و اگه می خواهید به شکل اول برگرده همین عبارت رو DISABLE کنید تا خنثی بشه ..

یا مثلا برای ریمپ کردن واحد CAN ( چون پین های CAN و USB بطور پیش فرض روی هم قرار گرفتند ) از این دستور باید استفاده کرد تا اونا رو رو B8 و B9 ریمپ کنیم :





GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);
تو فایل هدر اگه نگاه کنید برای CAN نوشته :

GPIO_Remap1_CAN1 ----> CAN1 Alternate Function mapping

که تو دیتاشیت نوشته Remap1 برای واحد CAN روی پین های B8 و B9 منتقل میشه ..

یا حق

kazem67sh
03-12-2012, 21:02
مهندس پس با این تفاصیر باید برنامه زیر pb3رو ببره روی حالت ioدیگه !
ولی تو برنامه جواب نمیده:(:(:(:(:(:(
امکان ش هست تابع مشکل داشته باشه؟(از همین سایت دانلود کردم)

kazem67sh
09-12-2012, 14:45
دوستان من کلی توی سایت های دیگه (st) گشتم ومورد رو پیدا کردم میزارم بقیه هم خواستن ببینن
با تشکر از همه دوستان که وقت گذاشتن
مشکل خط زیر بود که توی برنامه اضافه نشده بود
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

:o:o:o

sigma-mx
09-12-2012, 23:17
این تاپیک الان به چشمم خورد . من فکر کردم مشکل شما حل شده بود !!
عجب !!!!!!!! پس فعال کردن کلاک پورت یادت رفته بود . در مورد اون جداولی که قبلا بحثش رو کردم حواست باشه هر وقت بغیر از حالت عادی یعنی main function از حالت های alternate function استفاده کردی باید کلاک واحد AFIO رو هر فعال کنی که تو خطی که نوشتی هم این وجود داره ...

n340
28-03-2013, 20:49
من بلاخره با این روش تونستن پروگرم کنم
اما باز بعد از پروگرم میکرو عکس العملی نشون نمیده
برنامه ساده چشمک زدن پورت b هست
که در اموزش ها ضمیمه شده

Doloop
28-03-2013, 23:25
اگر نیاز به راهنمائی دارید فایل پروژه رو قرار بدید :0013:

n340
28-03-2013, 23:30
لینک پروژه
ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - شروع آموزش stm32 بر پایه برد سفارشی (You can see links before reply)
میکرو هم 103brt6 هست

Doloop
29-03-2013, 00:56
سلام

مهندس اون فایل رو بیخیال شو

لایبرریش قدیمی بود دردسر زیاد داشت

بیا اینو تست هم کردم توی سیمولاتور درسته ؟

پورت B چشمک زنه

راستش خودمم یه مشکلی داشتم موقع انجام این اون مشکل نبود تا حدودی گرفتم ایرادم کجاست :o

سبب خیر بودی :wink:

موفق باشی ... :0013:

n340
29-03-2013, 02:08
مهندس من تازه st رو شروع کردم
هیچی بلد نیستم

Build target 'GPIO'
compiling main.c...
C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
compiling system_stm32f10x.c...
C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
Target not created
این ارور میده موقع کامپایل

Doloop
29-03-2013, 09:28
سلام

درسته این پیغام میگه شما سری میکرو بر حسب حافظه فلشش رو توی هدر stm32f10x.h انتخاب نکردی
این قسمت جدیدا به طور پیشفرض غیر فعاله و با درست کردنش دیگه توی پروژه های بعدی با RBT6 مشکلی نخواهد بود :0013:
من هدر ویرایش شده رو برات کپی کردم ... توی فایل های پروژه هست اما چون از لایبرری کیل استفاده میکنه شما باید یکبار اون رو تغیر بدی ...

توی تصویر زیر همه چیز مشخصه :

برو توی هدر stm32f10x.h و خط 68 رو مطابق شکل کامنتش رو حذف کن ( /* */ )
دقت کن خط 68 من و شما یکی باشه که قاعدتا هم همینطور باید باشه :0013:

n340
29-03-2013, 17:28
دوست عزیز بازم همون ارور
در خط 49 همچین عبارتی وجود داشت
فکر کنم چون ورژن keil منو شما متغییر هست و با توجه به استفاده از هیدر keil این ارور پیش امده
ورژن keil شما چنده؟

Doloop
30-03-2013, 01:55
من از 4.70a استفاده میکنم

یعنی هنوز درست نشده ؟!!!

خوب این ارور برای همون قسمته که با حذف کامنت مورد نظر درست میشه

روی ارور دابل کلیک کن تا بری به محل خطای مورد نظر بعد از اونجا یه عکس قرار بده
یه عکس هم از همون خط 49 قرار بده :wink:

n340
03-04-2013, 22:37
پروگرم شد ولی باز هم میکرو استارت نشد
احتمالا اسیب دیده
چون موقع لحیم پایه 1 رو مثل (از روی متن رو ای سی) Avr گزاشتم و اشتباه بود
امکانش هست؟

Doloop
04-04-2013, 16:25
ممکنه ...!!!

میکروت الان داغ نمیکنه ..؟؟

sadmonew
04-04-2013, 20:55
پروگرم شد ولی باز هم میکرو استارت نشد
احتمالا اسیب دیده
چون موقع لحیم پایه 1 رو مثل (از روی متن رو ای سی) avr گزاشتم و اشتباه بود
امکانش هست؟
سلام مهندس
ببینید مقاومت بین پایه های vcc و gnd چند اهمه؟

n340
05-04-2013, 13:28
خیر نه جریان میکشه،نه اتصال کوتاه و نه داغ میکنه
خیلی شیک و مجلسی پروگرم و ویفرای میشه

n340
24-04-2013, 20:18
نکته جالب اینه که 3.3 رو به gnd اتصال میدیم میکرو راهندازی میشه
vss-avss به gnd
vdd-avdd-bat به 3.3
وصل شده
boot0
boot1
ازاد است و 3.3 ولت از سره رگولاتور گرفته شده

sigma-mx
24-04-2013, 20:27
میکرو رو با چی پروگرام میکنی ؟ جیلینک ؟ یا بوت لودر ؟


نکته جالب اینه که 3.3 رو به gnd اتصال میدیم میکرو راهندازی میشه

یعنی چی ؟! یعنی تغذیه رو اتصال کوتاه میکنی میکرو کار میکنه ؟!!!!

sadmonew
24-04-2013, 20:55
نکته جالب اینه که 3.3 رو به gnd اتصال میدیم میکرو راهندازی میشه
vss-avss به gnd
vdd-avdd-bat به 3.3
وصل شده
boot0
boot1
ازاد است و 3.3 ولت از سره رگولاتور گرفته شده
سلام
boot0 و boot1 رو با یه مقاومت 10k به gnd وصل کنید. همینطور آزاد نباشن!

n340
25-04-2013, 00:12
با بوت لودر پروگرم کردم
راحت پروگرم شد ولی راه نمی افته
5 ولت به رگولاتور میدم
وقتی خروجی 3.3 ولت رو به زمین وصل میکنم و اتصال کوتاه میشه
و میکرو راه می افته
فکر میکنم یک پایه رو اشتباه به vcc وصل کردم ک وقتی زمین میشه میکرو راهندازی میشه
پول داون هارو متصل کنم ببینم چی بشه

alishekarriz
25-04-2013, 01:56
دقت كنيد پايه 18 زمين و پايه 19 vcc هست در برد ابتدايي اين اشكال وجود داشت كه در همان موقع با راهنمايي دوستان رفع شد

گفتم اگر بردتان تاحالا كار نكرده اين مورد رو چك كنيد
بعد از سخت افزار كلاك سيستم و فعال كردن قسمتهاي داخلي اهميت بالايي دارند