من فکر میکنم حدکثر فرکانسی که بتونیم با تایمر یه برنامه تو خروجی پورت ایجاد کنیم 36 مگاهرتز باشه چون ماکزیمم فرکانسمون 72 مگاهرتزه.
اما این آپشن خروجی 50 مگاهرتز برای اینه که اگه خواستیم خروجی پی ال ال رو به یکی از پورت ها بدیم وجود داره(پین mco)
سطحي و كار راه انداز
دقيق و حرفه اي
من فکر میکنم حدکثر فرکانسی که بتونیم با تایمر یه برنامه تو خروجی پورت ایجاد کنیم 36 مگاهرتز باشه چون ماکزیمم فرکانسمون 72 مگاهرتزه.
اما این آپشن خروجی 50 مگاهرتز برای اینه که اگه خواستیم خروجی پی ال ال رو به یکی از پورت ها بدیم وجود داره(پین mco)
با سلام خدمت دوستان
این برنامه ی جدید برای تست فرکانس روی پورت
به صورت دسترسی بیتی دستور دادم ولی تهش شد این فرکانس
شکل موج کاملا سوزنی شده ...
مشکل از کجاست ؟؟
اینم لینک برنامه ...
اگه میشه این برنامه رو نگاه کنید
ببینید فرکانسش روی چند هست ..
شاید من تنظیمات رو بد انجام داده باشم ...
GPIO - Download - 4shared
با سلام خدمت شما مهندس عزیز
بعد از دو روز کل اینپیج رو خوندم ... چقدر طولانی بووود ولی کاملا ارزشش و داشت :D
دوست عزیز یکی دو تا مشکل دارم با واحد RCC
ببینید همون طور که شما گفتید تو کیل ورژن 5 از توی system_stm32f10x.h استارت اپ میشه فرکانس کاری رو دست زد ..
مثل این عکس :
فکر کنم تا اینجای مطلب رو درست اومده باشم ... حالا سوالاتی که دارم ؟
1. ایا واقعا فقط با ریمارک کردن این چند خط میشه فرکانس کاری میکرو رو روی 24 با 56 یا72 تنظیم کرد ؟ فقط با ریمارک کردن ؟ احتیاجی نیست کار خاص دیگه ای انجام بدیم ؟؟؟
2. این تنضیمات روی HSI تاثیر داره یا HSE ؟ کدومش انتخاب میشه ؟ انتخاب این دو تا به چه شکل انجام میشه ؟
3. چطور میتونم مطمین بشیم که فرکانس مثلا روی 72 تنظیم شده ؟
4. بعد از مطمین شدن کلاک کاری صحیح میکرو چجوری میشه یه delay هوشمند بنویسیم که بیاد فرکانس میکرو رو خودش بخونه و با تقسیمات بیاد تابع مورد نظرمونو اصلاح کنه . یعنی فرقی نداشه باشه فرکانس چند باشه 1ms توی تابع همون عدد باشه ؟؟؟
5. کار تابع RCC توی preph.. تنظیم hse یا hsi هست یا خود system_stm32f10x.h این کار رو انجام میده و فقط این واحد کارش فعال سازی و کنترل و ... preph.. ها هست ؟؟
شرمنده سوالات طولانی و زیاده ....
ویرایش توسط sina_mehraban : 24-08-2014 در ساعت 18:34
با سلام خدمت همه دوستان
من ب stbperiph Driver ورژن 5 adc رو اضافه کردم ولی وقتی کامپایل میکنم خطای زیر رو میده مشکل کجاست؟
سلام خدمت همه مهندسین گرامی
به نظرتون مشکل این برنامه چیه که دیتا را درست جا به جا نمیکنه
یک بایت دیتا از روی باس سریال دریافت میشه و میره روی باس SPI_1 (Master) 1 و از طریق این باس به SPI_2 (Slave) 2 منتقل میشه و از این طریق دوباره به باس سریال برمیگرده
اصولا برنامه باید درست کار کنه اما درست کار نمیکنه یعنی اصلا دیتا از طریق SPI جابجا نمیشه
کد:#include <stm32f10x.h> void RCC_Configuration ( void ); void GPIO_Configuration ( void ); void USART_Configuration( void ); void EXTI_Configuration ( void ); void SPI_Configuration ( void ); int main() { unsigned long s; unsigned char a, b; RCC_Configuration ( ); GPIO_Configuration ( ); USART_Configuration ( ); EXTI_Configuration ( ); SPI_Configuration ( ); do { for(s = 0 ; s <100000; s++); if ( USART_GetFlagStatus(USART1, USART_FLAG_RXNE ) != RESET ) { a = (uint16_t) USART_ReceiveData ( USART1 ); for(s = 0 ; s <50000; s++); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI1, a + 1); b = (uint16_t) SPI_I2S_ReceiveData ( SPI2 ); for(s = 0 ; s <50000; s++); USART_SendData(USART1, b );while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET ); } }while(1); } void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); // Set external XTAL For STM osillator ( 8 MHz ) HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); } /* RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|\ RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); */ } void GPIO_Configuration ( void ) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); // GPIO Clock ENABLE GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // Configure GPIO for SPI slave: SCK, MOSI, SS as inputs GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_13| GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Configure SCK and MOSI pins as Input Floating GPIO_Init(GPIOB, &GPIO_InitStructure); // Configure GPIO for SPI slave: NSS as AF output GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); } void USART_Configuration(void) { USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // USART.1 Clock ENABLE /* USART1 configuration ------------------------------------------------------*/ /* USART1 configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled - USART Clock disabled - USART CPOL: Clock is active low - USART CPHA: Data is captured on the middle - USART LastBit: The clock pulse of the last data bit is not output to the SCLK pin */ USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1, &USART_ClockInitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // Set PORTA.0 as External interrupt PIN EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void SPI_Configuration(void) { SPI_InitTypeDef SPI_InitStructure; // GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE); //enable spi2 & PORTB clock. SPI_Cmd(SPI1, DISABLE); SPI_I2S_DeInit( SPI1 ); /* SPI1 configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 , ENABLE); //enable spi2 & PORTB clock. SPI_Cmd(SPI2, DISABLE); SPI_I2S_DeInit( SPI2 ); /* SPI1 configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI2, ENABLE); }
ویرایش توسط arsensp : 30-08-2014 در ساعت 17:20
سوالات زیاد شد ولی اساتید نیستن جواب بدن ؟؟؟
_____________________________________
_____________________________________
مشکل assert_param در انتخاب stdperiph:
تو کیل ورژن5 وقتی از زبانه stdperiph drivers یک درایور رو انتخاب کنین در حالت عادی بعد از کامپایل خطای assert_param رو بهتون میده و برای رفع این مشکل باید ایتدا از زبانه project روی پروژه ای که ساختین کلیک کنین:
بعد از منوی project گزینه option for .... رو انتخاب کنین
بعد از صفحه ای که باز شد رو زبانه C/C++ رو انتخاب کنین و تو قسمت define این عبارت رو اضافه کنین:
USE_STDPERIPH_DRIVER
حالا برنامتون رو کامپایل کنین و میبینین مشکلتون رفع شده
_____________________________________
_____________________________________
با سلام و عرض ادب، یک سوال داشتم اگر ممکنه راهنمایی بفرمایید!
من lcd برد expansion را برای میکرو stm32f407vg راه اندازی کردم. وقتی خواستم یک تصویر را با آن نمایش بدهم این Error را گرفت:
امیدوارم دوستان بتوانند راهنمایی کنند. ممنون
- - - Updated - - -
فایل پیوست 8030
دستت درد نکنه اقا صادق ....
کم کم دارم لایبراری ها شو میخونم واسه اینکه سر در بیارم .
دوستان کم میان و طول می کشه جواب بدن ولی انصافا لایبراری ها شو خوب توضیح میده .
فقط یه مقدار لمش دسته آدم بیاد راه میوفته ..
راستی مهندس جان سوال من و در مورد اون شکل موج ها تو چند تا پست قبل تر جواب میدی اگر امکانش هست ؟؟؟؟
نظر به اینکه من اون فرکانس رو روی پینی که led روش بود اجرا کردم ..
دوستان کسی با اینتراپت تایمر 2 کیل ورژن 5 کار کرده؟
من توی حلقه اصلی فلگ اینتراپتو بررسی میکنم میبینم فعال شده ولی تابع اینتراپتو فراخونی نمیکنه نمونه کدو میزارم
#include <stm32f10x.h>
#include "delay.c"
#define LED1 GPIOD
#define LED1_BIT GPIO_Pin_2
void TIM2_IRQHandler()
{
TIM_ClearFlag(TIM2, TIM_IT_Update);
LED1->ODR ^= LED1_BIT;
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmm
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_Init(&NVIC_InitStructure);
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mm
void EnableCLK(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE) ;
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmm
void TIM_Configuration(void)// Timer Config
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Prescaler = (40000);
TIM_TimeBaseStructure.TIM_Period = (1800);
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmm
void InitPort()
{
GPIO_InitTypeDef gp1;
//Clock Enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE );
gp1.GPIO_Speed=GPIO_Speed_10MHz;
gp1.GPIO_Pin=LED1_BIT;
gp1.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(LED1,&gp1);
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmm
int main()
{
int i=0;
FlagStatus f;
EnableCLK();
InitPort();
// NVIC_Config();
NVIC_EnableIRQ(TIM2_IRQn);
TIM_Configuration();
TIM_Cmd(TIM2, ENABLE);
while(1)
{
f=TIM_GetITStatus(TIM2,TIM_IT_Update);
//delay_ms(1000);
if(f !=RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
LED1->ODR ^=LED1_BIT;
}
}
}
سلام
برای اینکه مشکلت سریعتر رفع بشه پروژه و قرار بده
*** اللّهم عجّل لولیک الفرج ***