سوالتان کلی و گنگ است.
آیا این موضوع مربوط به فیلم مقدماتی می شود؟
نمایش نسخه قابل چاپ
سوالتان کلی و گنگ است.
آیا این موضوع مربوط به فیلم مقدماتی می شود؟
من دارم با فیلم آموزشی پیش میرم و gpio رو دارم کار میکنم
و نیاز به تعریف متغیر eeprom دارم
چطور میشه متغیر در eepromتعریف کرد ؟
توی فیلم چیزی در مورد این قضیه گفته نشده برای همین برام سوال شد که چطور باید انجام بدم
ممنون بابت پاسخ
- - - Updated - - -
سخت افزار چطور مشکلی میتونه داشته باشه؟
چی رو باید بررسی کنم که بفهمم مشکل دقیقا چی هست؟
این سری میکروها ایتوپرام داخلی ندارند. ولی از فلاش داخلی میکرو می توانید به این منظور استفاده کنید.
----------------------------
استفاده از فلش داخلی میکرو برای نوشتن و خواندن :
EEPROM emulation in STM32F101xx and STM32F103xx microcontrollers (AN2594) :
[Dear Guest/Member you can't see link before replyclick here to register]
armeducation
سلام
من در برنامه تست GPIO از 4 ورودی دیجیتال و 4 خروجی که به led متصل هست استفاده کردم.
ورودی ها به PC2~PC5
و LED ها هم به PC6~PC9 متصل هستن.
وقتی یک و یا دو کلید را همزمان میزنم عملکرد درسته ولی با زدن کلید سوم (در حالتی که دو کلید قبل وصل هستن) همه LED ها خاموش میشن.
مشکل چی هست?
آیا به این مربوط میشه که 2 تا از کلید ها در بایت پایین هستن و دو تای دیگه در بایت بالا ???
GPIO->CRL
GPIO->CRH
این هم کد برنامه
if ((GPIOC->IDR & (1<<6)) == 0) GPIOC->BSRR = (1<<2) ;
else GPIOC->BSRR = (1<<18);
if ((GPIOC->IDR & (1<<7)) == 0) GPIOC->BSRR = (1<<3) ;
else GPIOC->BSRR = (1<<19);
if ((GPIOC->IDR & (1<<8)) == 0) GPIOC->BSRR = (1<<4) ;
else GPIOC->BSRR = (1<<20);
if ((GPIOC->IDR & (1<<9)) == 0) GPIOC->BSRR = (1<<5) ;
else GPIOC->BSRR = (1<<21);
اینکه اون پایه های خروجی تان و ورودی تان بایستی درست تنظیم کرده باشید که بله وگر نه درست کار نمی کنه.
دیباگ کنید ببینید ایراد تنظیماتتان کجاست و در دیباگ از روی برد کدام دستورات از شرط ها اجرا میشود
پایه ها همه درست تعریف شدن و به صورت تکی هر کلید led معادل خودش رو روشن و خاموش میکنه
زمانی که کاید اول رو میزنم LED اول روشن
با زدن کلید دوم led دوم هم روشن میشه
ولی با زدن کلید سوم دو led قبلی هم خاموش میشن
تفاوتی توی ترتیب کلیدها هم نداره و به محض زدن کلید سوم این اتفاق میفته.
من میکروم stm32f103vc هست. چطور میتونم دیباگ کنم؟
- - - Updated - - -
نقل قول:
من از نمونه مثال داخل DVD استفاده کردم و کمی تغییرات دادم. کد برنامه به این صورت هست.
int main (void)
{
SystemInit();
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; /* Enable GPIOC clock */
GPIOC->CRL &= ~0xFFFF00; /* PC.2 clear */
GPIOC->CRL |= 0x222200 ; // PC2 output Max Speed 2 Mz(push-pull)
GPIOC->CRL &= ~0xFF000000; /* PC6 clear */
GPIOC->CRL |= 0x88000000 ; // PC6 input with pull up/down
GPIOC->CRH &= ~0xFF; /* PC8 clear */
GPIOC->CRH |= 0x88 ; // PC8 input with pull up/down
//----------------------------------------
while (1)
{
if ((GPIOC->IDR & (1<<6)) == 0) GPIOC->BSRR = (1<<2) ;
else GPIOC->BSRR = (1<<18);
if ((GPIOC->IDR & (1<<7)) == 0) GPIOC->BSRR = (1<<3) ;
else GPIOC->BSRR = (1<<19);
if ((GPIOC->IDR & (1<<8)) == 0) GPIOC->BSRR = (1<<4) ;
else GPIOC->BSRR = (1<<20);
if ((GPIOC->IDR & (1<<9)) == 0) GPIOC->BSRR = (1<<5) ;
else GPIOC->BSRR = (1<<21);
}
}
در برنامه میکرو رو به برد آموزشی مثال کویر تغییر دادم و دیباگ کردم.
مشکلی توی این حالت نبود ولی در عمل ظاهرا نکته دیگه ای داره
سلام
نیاز به یک سورس کد دارم.
ممکن هستش که بدون خرید فیلم آموزشی مهندس زرکوب سورس برنامه راه اندازی پخش فایل صوتی از فلش خود میکرو یا DAC مربوط به فیلم آموزشی stm32 رو در اختیارم قرار بدین؟
سلام
مجدد
من از اون مشکلی که در GPIO داشتم صرف نظر کردم تا بتونم با آموزش جلو برم.
یک سوال دیگه دارم در مورد ارتباط سریال
توی این بخش اشاره کردید که اگر کلاک هسته درست تنظیم نشده باشه، بادریت درست نیست و ارتباط به صورت صحیح عمل نمیکنه.
به نظرم باید توی این بخش در مورد کلاک هسته بیشتر صحبت کنید. این آموزش مقدماتی هست و من مبتدی از کجا باید بدونم که کلاک هسته رو چطوری باید تنظیم کنم.
آیا همون مقداری هست که در option for target تنظیم میکنیم هست یا نه؟
ممنون میشم جواب بدید
سوال خوبی پرسید.نقل قول:
مبحث کلاک کمی تنظیمات و رجیستر زیاد دارد و اصلا مناسب شروع کار آرم آموز نیست. بنابراین برای شروع باید یک سری فرض ها بکنید که این درسته برید جلو تا بعد آشنایی با خود میکرو و راه اندازی چند پریفرال بتوانید در ابتدای فیلم پیشرفته در صورتی که نیاز داشتید تنظیمات کلاک را تغییر دهید. و گرنه وقتی کلاک رو 72 مگ هست و نیاز ندارید برای چی برید تغییر بدید و باهاش آشنا بشوید!؟
ممنون بابت پاسختون، من فیلم پیشرفته رو هم تهیه گردم ولی هنوز شروع نکردم آموزش های اون رو. در اون بخش بررسی میکنم.نقل قول:
موردی که هست من با avr کار میکنم و به صورت حرفه ای. خیلی از مباحث رو مقایسه میکنم با اون. مثلا برای کلاک مقایسه میکنم با کریستال خارجی avr. آیا این فرض درسته یا اینکه کریستال خارجی روی برد برای arm کاربردی نداره. چون توی فیلم ها هم متوجه نشدم در موردش صحبتی شده باشه. و اینکه برای استفاده از کریستال خارجی چه تنظیماتی باید انجام بشه.
و اگر ممکنه در موردمقداری که در option for target تنظیم میکنیم هم یک توضیح بدید.
سپاس فراوان
شما ابتدا کلاک را از پیشرفته ببینید اجرا کنید بعد اگر سوالی بود مطرح کنید.
الان این کلاک میکرو از اسلاتور خارجی تنظیم شده.
چه چیزهایی ازمقداری که در option for target هست مد نظره؟ تنظیمات زیاد داره و آنچه لازم بوده انجام شده یا پیش فرض بوده است.
در تب target مقدار Xttal منظورم هست.نقل قول:
اینجا مقدار اسیلاتور خارجی قرار میدیم.
البته کیوب تا کد تولید می کنه فکر کنم میزنه 72 به جای 8 !
سلام مهندس جان خوبین ببخشید در فیلم stm در قسمت وقفهexternal interrupt فرمودین که برایفعال کردن پایه A0 از دستور gpio->crh استفاده می کنیم سوالداشتم مگهCRH برای 8 بیت بالا استفاده نمیشه
سلام
فکر کنم این اشتباه را قبلا دوستان ذکر کرده اند.
بله درسته باید crl تنظیم شود.
ولی سوال اینجاست که اگر اشتباه تنظیم شده چرا دارد کار می کند!؟
به خاطر اینکه برای تنظیم پایه برای ورودی وقفه 4 باید قرار داده شود و این همان مقدار پیش فرض رجیستر است. پس تنظیمی هم نکنیم درست است.
ولی اگر غیر این بود و به اشتباه پایه دیگری را ست می کردیم ان پریفرال درست عمل نمی کرد چون پایه اش درست تنظیم نشده بود.
دیباگ برای همین است که خط به خط اجرا کنید این چیزها چک کنید اگر دیدید ان تنظیمی که باید بشود نشد به خط مربوطه نگاه کنید ببینید چی گذاشتید.
باسلام ببخشید مهندس جان من خواستم lcd کاراکتری با stm32f103c8 راه بندازم پایه هاش تغییر دادم طبق توضیحاتتون وای نمایش نمیده lcd مشکلی نداره ممنون میشم راهنماییم کنید
/*------------------------- Speed dependant settings -------------------------*/
#define DELAY 20
/*------------------------- Text LCD size definitions ------------------------*/
#define LineLen 16 /* Width (in characters) */
#define NumLines 2 /* Hight (in lines) */
/*-------------------- LCD interface hardware definitions --------------------*/
/* PINS:
- DB4 = PA4
- DB5 = PA5
- DB6 = PA6
- DB7 = PA7
- RS = PC1
- RW = PC2
- E = PC3
*/
#define DB4 4
#define PIN_RS (1<<3) //PB.3
#define PIN_RW (1<<4) //PB.4
#define PIN_E (1<<5) //PB.5
#define GPIO_Data GPIOA
#define GPIO_CTRL GPIOB
#define PINS_DATA (0x0F << DB4)
/* Enable Clock for peripheral driving LCD pins */
#define LCD_CLOCKA_EN RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // enable clock for GPIOA
#define LCD_CLOCKC_EN RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // enable clock for GPIOB
/* pin RS setting to 0 or 1 */
#define LCD_RS(x) (x ? (GPIO_CTRL->BSRR = PIN_RS) : (GPIO_CTRL->BRR = PIN_RS));
/* pin RW setting to 0 or 1 */
#define LCD_RW(x) (x ? (GPIO_CTRL->BSRR = PIN_RW) : (GPIO_CTRL->BRR = PIN_RW));
/* pin E setting to 0 or 1 */
#define LCD_E(x) (x ? (GPIO_CTRL->BSRR = PIN_E) : (GPIO_CTRL->BRR = PIN_E));
/* Reading DATA pins */
#define LCD_DATA_IN ((GPIO_Data->IDR & PINS_DATA) >> DB4) & 0x0F
/* Writing value to DATA pins */
#define LCD_CLR_OUT(x) GPIO_Data->BRR = 0xF << DB4;
#define LCD_DATA_OUT(x) GPIO_Data->BSRR = (x&0x0f) << DB4;
/* Setting all pins to output mode */
#define LCD_ALL_DIR_OUT1 GPIO_Data->CRL &= ~0xFFFF0000;\
GPIO_Data->CRL |= 0x33330000;
#define LCD_ALL_DIR_OUT2 GPIO_CTRL->CRL &= ~0x00FFF000;\
GPIO_CTRL->CRL |= 0x00333000;
/* Setting DATA pins to input mode */
#define LCD_DATA_DIR_IN GPIO_Data->CRL = (GPIO_Data->CRL & 0xFFFF0000) | 0x44440000;
/* Setting DATA pins to output mode */
#define LCD_DATA_DIR_OUT GPIO_Data->CRL &= ~0xFFFF0000;\
GPIO_Data->CRL |= 0x33333333;
extern void lcd_init (void);
extern void lcd_clear (void);
extern void lcd_putchar (char c);
extern void set_cursor (int column, int line);
extern void lcd_print (char *string);
extern void lcd_bargraph (int value, int size);
extern void lcd_bargraphXY (int pos_x, int pos_y, int value);
void lcd_write_cmd (unsigned char c);
/************************************************** ****************************/
سلام ببخشید مهندس عزیز میشه بگین مفهوم این خط چی هستش در قسمت lcd در توابش نوشته بودین
#define LCD_RS(x) (x ? (GPIO_CTRL->BSRR = PIN_RS) : (GPIO_CTRL->BRR = PIN_RS));
این یک ماکرو هست که اگر به ورودی 1 دهید قسمت اول gpio_ctrl->bsrr = pin_rs را اجرا می کند در غیر این صورت صفر باشد قسمت دوم. در فیلم سی به اینت موارد برنامه نیسی پرداخته شده است.نقل قول:
نوشته اصلی توسط mohammadya [Dear Guest/Member you can't see link before replyclick here to register]
---------------------
در این پست :
[Dear Guest/Member you can't see link before replyclick here to register]
این سوال مطرح شد که :
- عملکرد این ماکرو به چه نحو است :
#define LED1_ON(x) ((x) ? (LPC_GPIO1->FIOSET = LED1) : (LPC_GPIO1->FIOCLR = LED1));
در ماکرو می توان به یک عبارت دیفاین شده، یک ورودی شرطی تعریف کرد. به عنوان مثال در عبارت ذکر شده، در صورتی که ورودی x برابر 1 باشد عبارت اول اجرا می شود (یعنی LPC_GPIO1->FIOSET = LED1) و اگر x برابر صفر باشد عبارت دوم اجرا می شود(یعنی LPC_GPIO1->FIOCLR = LED1) . عملگر (x) ? نیز یک if مختصر می باشد. به عنوان نمونه دیگر این ماکرو را در نظر بگیرید و عملکرد آن را بررسی کنید :
#define LCD_E(x) GPIOC->ODR = (GPIOC->ODR & ~PIN_E) | (x ? PIN_E : 0);
@armeducation
شما باید برا اساس توضیحات پاورپوینت و مثال عملی سری 107 در اینیشیالیز و تابع ارسال و دیفاین های پایه های کنترلی بر اساس سخت افزارتان تغییرات اعمال بکنید.نقل قول:
نوشته اصلی توسط mohammadya [Dear Guest/Member you can't see link before replyclick here to register]
حالا اگر کار نکرد و تغییرات برنامتون درست باشه مسلما سخت افزارتون ایراد داره.