مهندس لطفا این عکس رو هم ببین...
سطحي و كار راه انداز
دقيق و حرفه اي
مهندس لطفا این عکس رو هم ببین...
*** اللّهم عجّل لولیک الفرج ***
_____________________________________
_____________________________________
تایپ شد ولی بازم جواب نمیدهاون مواردي كه مربوط به define ميشه رو خودتون تايپ كنيد.
*** اللّهم عجّل لولیک الفرج ***
سلام این اروره:
[PHP]
Build target 'Target 1'
compiling stm32f10x_it.c...
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h(81): warning: #47-D: incompatible redefinition of macro "_GPIO"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: #define _GPIO
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h(115): warning: #47-D: incompatible redefinition of macro "_SPI"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: #define _SPI
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h(135): warning: #47-D: incompatible redefinition of macro "_USART"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: #define _USART
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_conf.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(136): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void SysTick_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(36): error: #1268-D: declaration aliased to undefined entity "SysTickHandler"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void SysTick_Handler(void) __attribute__ ((alias("SysTickHandler")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(127): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void PendSV_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(35): error: #1268-D: declaration aliased to undefined entity "PendSVC"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void PendSV_Handler(void) __attribute__ ((alias("PendSVC")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(109): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void SVC_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(34): error: #1268-D: declaration aliased to undefined entity "SVCHandler"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void SVC_Handler(void) __attribute__ ((alias("SVCHandler")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(118): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void DebugMon_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(33): error: #1268-D: declaration aliased to undefined entity "DebugMonitor"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void DebugMon_Handler(void) __attribute__ ((alias("DebugMonitor")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(96): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void UsageFault_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(32): error: #1268-D: declaration aliased to undefined entity "UsageFaultException"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void UsageFault_Handler(void) __attribute__ ((alias("UsageFaultException")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(83): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void BusFault_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(31): error: #1268-D: declaration aliased to undefined entity "BusFaultException"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void BusFault_Handler(void) __attribute__ ((alias("BusFaultException")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(70): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void MemManage_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(30): error: #1268-D: declaration aliased to undefined entity "MemManageException"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void MemManage_Handler(void) __attribute__ ((alias("MemManageException")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(57): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void HardFault_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(29): error: #1268-D: declaration aliased to undefined entity "HardFaultException"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void HardFault_Handler(void) __attribute__ ((alias("HardFaultException")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c(48): error: #1270: entity declared as alias cannot have definition
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: void NMI_Handler(void)
STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h(28): error: #1268-D: declaration aliased to undefined entity "NMIException"
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: void NMI_Handler(void) __attribute__ ((alias("NMIException")));
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: ^
E:\instal pro\keil 4.00\ARM\INC\ST\STM32F10x\stm32f10x_it.h: STM32F103RBT6_GPIO\library\STM32F10x_StdPeriph_Dri ver\src\stm32f10x_it.c: 3 warnings, 18 errors
Target not created
[/PHP]
عکس اون قسمت رو هم میزارم ببینید درسته
لطفا در مورد قسمتی که علامت زدم بیشتر توضیح بدید که این ادرس ها برای چی هست
من این سه تا ادرس رو از دو تا پوشه مختلف انتخاب میکنم موردی نداره
یکی از پوشه ها همون library پروژه شماست و پوشه دیگری هم از همون فایل 21 مگابایتی هست
ولی هردوتا رو تو محل ذخیره پروژه کپی کردم
*** اللّهم عجّل لولیک الفرج ***
متاسفانه استفاده کردن از ورژن های قدیمی cmsisمشکلات فراوانی مثل این رو به دنبال داره ! من تمام این مراحل رو گذروندم ! فقط 1 هفته با این فایلها کلنجار رفتم تا قلق همه دستم اومد . همون طور که چند بارم گفتم اگه تمام فایلهاتون رو به cmsis 3.5 آپدیت کنید مشکل دیگه ندارید . و بهترین راه هم که اینقدر مشکل آدرس دهی فایل نداشته باشید اینه که کل پوشه درایور همراه پروژتون باشه نه اینکه پوشه درایور رو جایگزین پوشه تو مسیر کیل کنید . دلیلشم حتما بهتون میگم . تو چند پست قبل من یه پروژه template گذاشتم برای یکی از دوستان که همه میتونن ازش استفاده کنن بدون هیچ مشکلی کار میکنه . مهندس یبار امتحانش کن ..
مهندس تشکر برنامت بدون ارور کامپایل شد
الان میخام خودم پروژه درست کنم ببینم جواب میده یا نه!!!
گفته بودین فقط سورس ها و main رو تو پوشه سورس کپی کنیم بعد دیگه از این تنظیمات آدرس دهی نمیخاد؟؟؟
یه سوال دیگه؟
تو عکس زیر اون دوتا LED که مشخص کردم برای چیه؟
پروژه ای که مهندس صادق گذاشته بود وقتی کامپایل کردم اون LED زرده خاموش شد!!!!
والان که پروژه شمارو کامپایل کردم روشن شد!!!
*** اللّهم عجّل لولیک الفرج ***
نه دیگه . هم آدرس ها داده شده . هم میکرو تعریف شده . ... پروژه پیش ساخته هست دیگهگفته بودین فقط سورس ها و main رو تو پوشه سورس کپی کنیم بعد دیگه از این تنظیمات آدرس دهی نمیخاد؟؟؟
فقط هر دفعه یه کپی از این پوشه template بگیر و فایلای مورد نظرتو تو پوشه source بزار . اگه کتابخانه جدید C می خوای اضافه کنی حواست باشه . فایل .h رو تو main باید include کنی و .c ش رو تو پنجره سمت چپ پهلوی main اضافه add کنی.
خب دیگه ما اینیمپروژه ای که مهندس صادق گذاشته بود وقتی کامپایل کردم اون LED زرده خاموش شد!!!!
والان که پروژه شمارو کامپایل کردم روشن شد!!!
مهندس اون دوتا led فقط نشانگر یا indicator پورت سریال rx,tx هستن . فکر کنم چون تو پروژه مهندس اون پین کانفیگ شده بود . led خاموش شد . مهم نیست حالا ...
بله تو پروژه مهندس صادق پین tx کانفیگ شده . بخاطر همین led خاموش شده .
[PHP]//---------- cofiguration PORT---------------------------------------
/* Configure USART1 Tx (PA9) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); [/PHP]
اگه این عبارت رو حذف کنی . روشن میشه .
مهندس واقعا اگه شما نبودی ما چیکار می کردیم (لابد باید میرفتیم غاز می...)
خیلی کمک کردی
قبل از اینکه جواب بعدیت رو بخونم رفتم باز خودم یه پروژه درست کردم
که نشد بعد دوهزاریم افتاد که منظورتون چی بود
ولی کاشکی میشد خودم یاد میگرفتم چطوری پروژه درست کنم
اونموقع که شما اون همه از کتابخونه های CMSIS تعریف میکردین چرا حرفی از این دردسراش نمیزدین
بازم تشکر
موفق باشی
*** اللّهم عجّل لولیک الفرج ***
سلام مهندس
خوشحالم بالاخره بدون ارور كامپايل شد.
من ار ورژن 4.5 كيل استفاده ميكنم و اونطور كه فهميدم شما از ورژن 4.0 استفاده ميكنيد.
شايد مطابقت نداشتن ورژن كيلي كه شما دارين استفاده ميكنيد با اون ورژني كه من دارم استفاده ميكنم، يكي از دلايل اين ارورها بوده.
البته دوستمون مهندس سعيد به نكته خوبي اشاره كردن.
_____________________________________
_____________________________________
خوب مهندس من همون کارو کردم پروژه شمارو باز کردم و main پروژه مهندس صادق رو بهش اضافه کردم حالا دوتا ارور میده که از این هدر هست :
کد:RCC_INIT.hگفتین باید .h رو اینکلود کنم و .cش رو تو قسمت target اضافه کنم ولی این هدر .cش رو از کجا باید بیارم تو پروژه مهندس صادق هم نبودکد:Build target 'Target 1' compiling main.c... ..\Source\RCC_init.h(20): warning: #223-D: function "FLASH_PrefetchBufferCmd" declared implicitly ..\Source\RCC_init.h: FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); ..\Source\RCC_init.h: ^ ..\Source\RCC_init.h(20): error: #20: identifier "FLASH_PrefetchBuffer_Enable" is undefined ..\Source\RCC_init.h: FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); ..\Source\RCC_init.h: ^ ..\Source\RCC_init.h(23): warning: #223-D: function "FLASH_SetLatency" declared implicitly ..\Source\RCC_init.h: FLASH_SetLatency(FLASH_Latency_2); ..\Source\RCC_init.h: ^ ..\Source\RCC_init.h(23): error: #20: identifier "FLASH_Latency_2" is undefined ..\Source\RCC_init.h: FLASH_SetLatency(FLASH_Latency_2); ..\Source\RCC_init.h: ^ ..\Source\RCC_init.h: ..\Source\main.c: 2 warnings, 2 errors Target not created
*** اللّهم عجّل لولیک الفرج ***
مهندس جان ، فایل هدر rcc_init.h یه هدر هست که خود صادق جان درستش کرده و توش تابع کانفیگ rcc رو قرار داده .
خب حالا طبق معمول باید تو main اینو include کنی که فکر کنم کردی . تو همین هدر عبارت
[PHP]#include "stm32f10x_rcc.h"[/PHP]را پاک کن . احتیاجی به include کردن توابع cmsis در روش جدید نیست .
حالا یه نکته مهم هم مونده که برای استفاده از cmsis باید همیشه یادت باشه :
فایل stm32f10x-conf.h رو که همراه سورس هاست باز کن . اولش همچین چیزی رو می بینی :
[PHP]/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
//#include "stm32f10x_adc.h"
//#include "stm32f10x_bkp.h"
//#include "stm32f10x_can.h"
//#include "stm32f10x_cec.h"
//#include "stm32f10x_crc.h"
//#include "stm32f10x_dac.h"
//#include "stm32f10x_dbgmcu.h"
//#include "stm32f10x_dma.h"
//#include "stm32f10x_exti.h"
//#include "stm32f10x_flash.h"
//#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
//#include "stm32f10x_i2c.h"
//#include "stm32f10x_iwdg.h"
//#include "stm32f10x_pwr.h"
//#include "stm32f10x_rcc.h"
//#include "stm32f10x_rtc.h"
//#include "stm32f10x_sdio.h"
//#include "stm32f10x_spi.h"
//#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
//#include "stm32f10x_wwdg.h"
[/PHP]
حالا قبل از کار رو هر پروژه جدید باید با توجه به واحد هایی که بهشون احتیاج داری مثل adc , usart , ... باید اون سطر رو از حالت comment در بیاری . در اینجا شما به واحد های GPIO - FLASH - RCC رو از حالت comment در بیاری . مهندس دلیل اون چند تا خطا نشناختن دستورات flash به جهت include نشدن توابع کتابخانه flash بود !!!
حالا اگه کامپایل کنی باید همچی درست باشه . قبلا هم گفتم این روش کار مربوط به آخرین نسخه cmsis یعنی 3.5 هست . در نسخه های پیشین روشهای مختلفی وجود داشت. مثلا include کردن تک تک توابع یا define کردن یه عبارت مثل _ADC که با این کار تو فایل conf قدیمی خودش فایل رو include می کرد ....
مهندس روش یزره کار کنی پی به راحتیه کار با ورژن جدید و در کل cmsis می بری . باور کن !
ضمنا تو چند پست قبل گفتم که بهتره درایور های cmsis همراهش باشه مثل همین template که گذاشتم . دلیلش اینه که مسیر این درایور ها تو پروژه تعریف شده با آدرس دهی نسبی ! مثلا گفته شده از این پوشه بیرون بیای تو پوشه library هست (این روش میشه نسبی ) . حالا اگه من مثلا من درایور ها رو تو یه مسیر ثابت بزارم باید به این روش c:\program\keil\... بهش آدرس بدم . حالا اگه من این پروژه رو به شما بدم ، چون کیل شما شاید تو یه مسیر دیگه باشه یا نسخه cmsis شما فرق کنه ، هزار تا ارور میده !!!! نمی دونم منظورم رو درست فهموندم یا نه ؟!
به هر حال این روش مطمئن ترین روشه ...
یا حق
راستش دادا سعید زیاد متوجه نشدم چی شد؟؟؟حالا قبل از کار رو هر پروژه جدید باید با توجه به واحد هایی که بهشون احتیاج داری مثل adc , usart , ... باید اون سطر رو از حالت comment در بیاری . در اینجا شما به واحد های GPIO - FLASH - RCC رو از حالت comment در بیاری . مهندس دلیل اون چند تا خطا نشناختن دستورات flash به جهت include نشدن توابع کتابخانه flash بود !!!
حالا اگه کامپایل کنی باید همچی درست باشه . قبلا هم گفتم این روش کار مربوط به آخرین نسخه cmsis یعنی 3.5 هست . در نسخه های پیشین روشهای مختلفی وجود داشت. مثلا include کردن تک تک توابع یا define کردن یه عبارت مثل _ADC که با این کار تو فایل conf قدیمی خودش فایل رو include می کرد ....
مهندس روش یزره کار کنی پی به راحتیه کار با ورژن جدید و در کل cmsis می بری . باور کن !
ضمنا تو چند پست قبل گفتم که بهتره درایور های cmsis همراهش باشه مثل همین template که گذاشتم . دلیلش اینه که مسیر این درایور ها تو پروژه تعریف شده با آدرس دهی نسبی ! مثلا گفته شده از این پوشه بیرون بیای تو پوشه library هست (این روش میشه نسبی ) . حالا اگه من مثلا من درایور ها رو تو یه مسیر ثابت بزارم باید به این روش c:\program\keil\... بهش آدرس بدم . حالا اگه من این پروژه رو به شما بدم ، چون کیل شما شاید تو یه مسیر دیگه باشه یا نسخه cmsis شما فرق کنه ، هزار تا ارور میده !!!! نمی دونم منظورم رو درست فهموندم یا نه ؟!
به هر حال این روش مطمئن ترین روشه ...
ولی موفق شدم دقیقا فایل main مهندس صادق رو با پروژه شما اجراش کنم
البته با راهنمائی شما رفتم تو هدر conf و comment قسمت flash رو درست کردم (برداشتم)
کامپایل شد.
با تشکر فراوان از دکترمون
ولی آخر نفهمیدم چطوری تنظیم کنم تا بدون هدر RCC_Init.h کار کنه میشه بیشتر راهنمائی کنید
یعنی اگه اینو حذف کنم باید comment قسمت RCC رو بردارم که اون خودش برداشته بود من دست نزدم
خوب مهندس من حذفش کردم برنامه بدون ارور کامپایل میشه ولی LEDها که باید چشمک بزنه نمیزنه !!!
من که فکر کنم RCC غیر فعاله ولی commentش برداشته شدس،جای دیگه ای هم باید تنظیماتی انجام بشه؟
ویرایش توسط Doloop : 13-04-2012 در ساعت 22:21
*** اللّهم عجّل لولیک الفرج ***
راستش دادا سعید زیاد متوجه نشدم چی شد؟؟؟
ولی آخر نفهمیدم چطوری تنظیم کنم تا بدون هدر RCC_Init.h کار کنه میشه بیشتر راهنمائی کنید
خوب مهندس من حذفش کردم برنامه بدون ارور کامپایل میشه ولی LEDها که باید چشمک بزنه نمیزنه !!!
بدون اون هدر که کار نمی کنه ! گفتم قبلا ، مهندس صادق اومده تابع کانفیگ RCC که داخلش دستورات راه اندازی اسیلاتور و pll و کلاک پورتهاست رو بصورت جدا تو یه هدر بنام rcc_init.h گذاشته و تو main اونو فراخوانی کرده .
شما دستورات داخل این تابع رو هر طوری هست باید اجرا کنید وگرنه هیچ چیز کار نمی کنه ...
میتونی این تابع رو کپی کنی تو main و این هدر رو بی خیال بشی . بقیه کارایی که کردی درست بوده مهندس . منظور منو گرفتی
خوب مهندسا چی شد دوباره بیکار شدیم !!!
من قسمت ADC رو دیدم دارم گیج میشم
اونطور که من برداشت کردم مهندس صادق با این قسمت های هدر کار کرده که منم رفتم بهش یه سر زدم حالشم خوب بود
من این قسمت رو تعریف کردم
بعد این قسمت رو خودم هم نفهمیدم چیکار کردمکد:GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStruct;
بعد رفتم تو هدر ها همون قسمت هائی که مهندس برای راه اندازی GPIO استفاده کرده بود رو دیدمکد:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);
[PHP]
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
((SPEED) == GPIO_Speed_50MHz))
/**
* @brief Configuration Mode enumeration
*/
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
/**
* @brief GPIO Init structure definition
*/
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
[/PHP]
بعد فکر کنم مهندس دستورات SET و RESET رو هم از اینجا گرفته
تا اینجا درسته ؟!!!کد:void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
البته تو این قسمت هم ADC رو فعال کردم
حالا من اومدم تو هدر ADC رو دیدم حالم بد شدکد:#include "stm32f10x_adc.h" //#include "stm32f10x_bkp.h" //#include "stm32f10x_can.h" //#include "stm32f10x_cec.h" //#include "stm32f10x_crc.h" //#include "stm32f10x_dac.h" //#include "stm32f10x_dbgmcu.h" //#include "stm32f10x_dma.h" //#include "stm32f10x_exti.h" #include "stm32f10x_flash.h" //#include "stm32f10x_fsmc.h" #include "stm32f10x_gpio.h" //#include "stm32f10x_i2c.h" //#include "stm32f10x_iwdg.h" //#include "stm32f10x_pwr.h" #include "stm32f10x_rcc.h" //#include "stm32f10x_rtc.h" //#include "stm32f10x_sdio.h" //#include "stm32f10x_spi.h" //#include "stm32f10x_tim.h" #include "stm32f10x_usart.h" //#include "stm32f10x_wwdg.h" #include "misc.h"
اونطور که من گرفتم باید از این قسمت برای کانفینگ کردن ADC استفاده کرد درسته ؟!!!
دیگه از اینجا به بعد قفل شدمکد:typedef struct { uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or dual mode. This parameter can be a value of @ref ADC_mode */ FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion is performed in Scan (multichannels) or Single (one channel) mode. This parameter can be set to ENABLE or DISABLE */ FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in Continuous or Single mode. This parameter can be set to ENABLE or DISABLE. */ uint32_t ADC_ExternalTrigConv; /*!< Defines the external trigger used to start the analog to digital conversion of regular channels. This parameter can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */ uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment is left or right. This parameter can be a value of @ref ADC_data_align */ uint8_t ADC_NbrOfChannel; /*!< Specifies the number of ADC channels that will be converted using the sequencer for regular channel group. This parameter must range from 1 to 16. */ }ADC_InitTypeDef; /**
راستی با اینا باید چیکار کنیم ؟!!!
از اینا چطوری باید استفاده کنیم ؟!!!کد:void ADC_DeInit(ADC_TypeDef* ADCx); void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); void ADC_ResetCalibration(ADC_TypeDef* ADCx); FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx); void ADC_StartCalibration(ADC_TypeDef* ADCx); FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx); void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); uint32_t ADC_GetDualModeConversionValue(void); void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length); void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog); void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold); void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); void ADC_TempSensorVrefintCmd(FunctionalState NewState); FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
*** اللّهم عجّل لولیک الفرج ***
سلام مهندس
خوبه كه شما هم دارين روش اين قسمت كار ميكنيد.
اگه تو توتضيحات دقت كرده باشي، منظورم براي اين قسمت:
[PHP]typedef struct
{
uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or
dual mode.
This parameter can be a value of @ref ADC_mode */
FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion is performed in
Scan (multichannels) or Single (one channel) mode.
This parameter can be set to ENABLE or DISABLE */
FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in
Continuous or Single mode.
This parameter can be set to ENABLE or DISABLE. */
uint32_t ADC_ExternalTrigConv; /*!< Defines the external trigger used to start the analog
to digital conversion of regular channels. This parameter
can be a value of @ref ADC_external_trigger_sources_for_regular_channels_ conversion */
uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment is left or right.
This parameter can be a value of @ref ADC_data_align */
uint8_t ADC_NbrOfChannel; /*!< Specifies the number of ADC channels that will be converted
using the sequencer for regular channel group.
This parameter must range from 1 to 16. */
}ADC_InitTypeDef;[/PHP]گفته شده، براي مقدار دهي به ADC_ExternalTrigConv به ADC_external_trigger_sources_for_regular_channels_ conversion مراجعه كنيد و همين طور براي مقدار دهي به بقيه هم توضيحات كامل رو داده و عنوان كرده كه به كدوم قسمت مراجعه كنيد.
_____________________________________
_____________________________________
سلام دوستان . مثل اینکه رفتین رو adc
خب باید بگم که این بخش جزو مفصلترین بخشهای میکرو هست که فهم دقیق مطالب اون فقط با کاربرد خاص خودش حاصل میشه . از اینهمه امکانات بخش adc ما فقط یه امکان معمولی ( نمونه برداری تکی ) برامون معمولا کافیه ! این میشه مثل مبدل avr یا pic .. پس فعلا با همین تک نمونه گیری شروع میکنیم ..
برای فهم نمونه برداری تکی یه مثال ساده میزنم :
[PHP]
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure); // A1 -> Analoge Input ( for ADC)
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // No Scan
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 1 Conversion
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_13Cycles5); // CH1 = A1
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1); // Calibration
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
x = ADC_GetConversionValue(ADC1); // 0~4096
[/PHP]
همون طور که معلومه اول پین مورد نظر رو که به کانال وصله باید آنالوگ ورودی کنیم .سپس تنظیمات حالت و نحوه نمونه برداری رو مثل بالا انجام بدیم . بعد مبدل رو کالیبره کنیم و سپس با فرمان ADC_GetConversionValue مقدار کانالی که تنظیم کردیم رو بخونیم . حواستون باشه متغیر x باید 16 بیتی باشه چون مبدل 12 بیتی هست ..
******
من برای بیشتر واحد ها مثال برای برد خودم آماده کردم . علت اینکه نمیزارم اینه که برد من با شما مطابقت نداره ! پس لطفا یا به هر روش پین led ها و کلید ها و adc و ... رو به من بگید یا من مثالمو بزارم و تغییر و مطابقت با شما باشه ... ؟؟؟؟
ضمنا من الان السیدی n96 و تاچ رو هم تموم کردم . لطفا یکم سریعتر و فعالتر پیش برین و جواب سوال بالا رو هم بمن بدید که منم کمک کنم در مطالب ....