سطحي و كار راه انداز
دقيق و حرفه اي
خب به این خاطر گفتم چون نند یا رم اکسترنال از واحد fsmc استفاده میکنه و یکسری از پینهای پورت g کاربرد برای fsmc دارند پس حتما به نند هم متصلند . شاید تداخل داره ! از پینهای دیگه استفاده کن . و همیشه یادت باشه شماتیک بردت رو داشته باشی وقتی باهاش برنامه مینویسی اگه همراهش نبود شماتیک ، خودت مهندسی معکوس کن ، سخت نیست.
سلام به همه دوستان.می خواستم بدونم چطوری میتونم زمان تایمر رو محاسبه کنم مثلا زمان 10میلی ثانیه رو بدست بیارم؟TIM_TimeBaseInitTypeDef TIM_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE) ;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitStructure.TIM_Period = 1000;
TIM_InitStructure.TIM_Prescaler = 1;
TIM_TimeBaseInit(TIM3,&TIM_InitStructure);
TIM_Cmd(TIM3,ENABLE);
NVIC_SetPriority(TIM3_IRQn,0);
NVIC_EnableIRQ(TIM3_IRQn);
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
(stm32f030)
یک سئوال دیگه هم داشتم چطوری میتونم میکرو رو قفل کنم تا hex و از رو میکرو نشه برداشت
ممنون.
سلام
زمان تایمر رو باید بر حسب فرکانس کار میکرو حساب کنی.
مثلا اگه داری با 24MHZ کار میکنی 10ms رو میتونی به روش زیر بدست بیاری.
برای قفل کردن میکرو هم باید توی Option Bytes گزینه Read out protection رو فعال کنی.TIM_InitStructure.TIM_Period=10000;
TIM_InitStructure.TIM_Prescaler=23;
معمولا سه سطح 0 و 1 و2 داره . سطح 0 همون Unlock هست . سطح 1 ، همون چیزیه که شما میخوای یعنی Read Out Protection و سطح 2 ، باید حواستون خیلی جمع باشه اشتباهی نزنید که غیر قابل بازگشته ! یعنی فیوزبیت های میکرو با آخرین کانفیگ میسوزه و دیگه باز نمیشه ! یعنی نه erase میشه نه پروگرام و فقط آخرین برنامه رو اجرا میکنه . ولی سطح 1 بزاری در مقابل خوندن محافظت شده هست اگه بخوای تغییر بدی برنامه رو میبری سطح 0 همچی پاک میشه و مثل روز اول .. با stlink utility این کار راحتتره ...
سلام به همه دوستان ممنون از راهنمایی های ارزشمندتون .
اگه میشه (((فرمول))) محاسبه زمان تایمر رو بگید.(فرکانس ۴۸mhzهستش).ممنون.
TIM_InitStructure.TIM_Period=10000;
TIM_InitStructure.TIM_Prescaler=23;
از پین 0 تا 15 همین پرت استفاده میکنم در مد 16 بیتی
برا مد 8 پین از کدام پاییه های ال سی دی باید استفاده کرد ؟
دیتا شت میگه d8 تا d15
درسته؟
Ù ÛÙÛ Ø¨Ø±Ø¯ STM32F103ZET6
ویرایش توسط Hadi_ghr_e : 23-08-2015 در ساعت 19:01
سلام
روز بخیر
از دوستان کسی فرصت راهنمایی رو نداشت؟
هنوز نتونستم رو مد 8 بیتی و با پاییه های g0-7 ال سی دی n96 رو راه اندازی کنم
سلام به همه دوستان .من یک برنامه pwm ساده نوشتم که نور یک led رو کنترل کنم برنامم به خوبی کار میکنه و میتونم نور led رو کنترل کنم اما نمتونم بعد از پیکر بندی timer وpwm ومقدار دادن به TIM_Pulse،مقدار TIM_Pulse رو تو برنامم تغییر بدم که میزان نور رو نسبت به یک پارامتر تغییر بدم.چطوری میتونم مقدارش رو تغییر بدم؟
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "lcd4bit.h"
#include "stm32f10x_tim.h"
#include "delay.h"
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_initStructure;
uint16_t CCR1_Val = 10;
uint16_t PrescalerValue = 0;
void RCC_Configuration(void)
{ /* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_AP B2Periph_AFIO, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_initStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_initStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_initStructure);
}
void TIMER_Configuration (void)
{
CCR1_Val=CCR1_Val*6.65;
PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
TIM_TimeBaseStructure.TIM_Period = 665;//* Time base configuration *
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
TIMER_Configuration();
delay_init(72);
lcd_init();
while (1)
{
CCR1_Val++;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
delay_ms(200);
if(CCR1_Val>100)
CCR1_Val=0;
}
}
ویرایش توسط naeb : 25-08-2015 در ساعت 19:25
مگه قبلا نگفتی با پینهای G8 تا G15 می خوای کار کنی ؟! الان میگی 0 تا 7 !!هنوز نتونستم رو مد 8 بیتی و با پاییه های g0-7 ال سی دی n96 رو راه اندازی کنم
برای 8 تا 15 ،اینم یه امتحان کن:
ضمنا برای اطمینان میگم . برای کار تو مد 8 بیتی باید :کد:GPIOG->BRR = 0xff00; GPIOG->BSRR = data<<8;
1- از پینهای DB10 تا DB17 استفاده بشه.
2- مد ال سی دی باید روی 8 بیت تنظیم بشه . توسط Hi کردن پین IM0 .
منظورتون از TIM_pulse چی هست ؟ شما داررید مقدار pwm رو تغییر میدید و درست کار میکنه !!مقدار TIM_Pulse رو تو برنامم تغییر بدم که میزان نور رو نسبت
سلام
زیاد مطمئن نیستم اما شما اومدین به متغییر، یه عددی نسبت دادین نه به تایمر!!
اگه اینجوری که نوشتین درست باشه (که فکر نمی کنم) باید بعد از اون این ساختار به تایمر اعمال بشه با دستوری شبیه این:
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
بهتره داخل تابع بالا رو ببینید. معمولا می تونید با نگاه کردن به نحوه مقدار دهی رجیستر ها، خودتون اون مقدار لازمو مستقیم اعمال کنید.
سلام
من موفق به راه اندازی spi شدم در واقع مشکل روی تنظیمات jlink در نرم افزار keil بود. حالا میخام از چیپ w5100 که یک رابط اترنت هست استفاده کنم که از طریق spi به میکرو وصل شده.
میخاستم بدونم چطور میشه از طریق spi رجیسترهای این چیپ رو مقدار دهی کرد و با چه دستوری؟
ممنون.
سلام دوستان. واقعا متشکر از زحمات شما و مطالب بسیار مفیدی که قرار دادید.
سوالی که داشتم اینه که تمام جاهایی که من دیدم چند کانال adc رو با dma راه اندازی کردند. میخواستم بدونم آیا امکانش هست که اینکار رو بدون استفاده از dma انجام داد ؟
سلام دوستان.
کسی تا بحال adc رو بیشتر از یک کانال با dma تست گرفته و نتیجه بگیره؟
وقت بخیر
با dma بهتر و راحت تر هست !! چون که نتیجه تبدیل در یک رجیستر ریخته میشه و بعد از تبدیل باید فوری برش داری در غیر این صورت با نتیجه بعدی پر میشه !! یا dma خودش نتایج رو برمیداره !! و جالبتر این که میتونی چند نمونه برداری رو خود کار بدون دخالت cpu انجام بدی ! من تست کردم خوب بوده !