Jump to content

    
Sign in to follow this  
Artos5

STM32F0+Keil=простой старт

Recommended Posts

глобальная переменная. Декремент смотреть в прерывании системного таймера

объявлена в main.c (как вы ищите - непонятно)

 

Переменную нашел в мейн .

Теперь не найду где выполняется декремент..

 

Все, нашел! Урааааааааа! :)

 

Share this post


Link to post
Share on other sites
Все по своим отдельным файлам, не люблю когда все в одном в виде каши. Думаю так удобнее.

 

А скажите пожалуйста, с какой частотой происходит прерывание системного таймера?

И как например задействовать

 

void TIM17_IRQHandler(void)
{
    
}

 

Это прерывание?

Достаточно вбить туда переменную? Подозреваю, что нужны еще дополнительные телодвижения :)

 

Посмотрел даташит на МК, и я просто в шоке :)

Такая куча возможностей!!!

Таймеров дофига и всего прочего :)

 

Share this post


Link to post
Share on other sites
А скажите пожалуйста, с какой частотой происходит прерывание системного таймера?

И как например задействовать

 

void TIM17_IRQHandler(void)
{
    
}

 

Это прерывание?

Достаточно вбить туда переменную? Подозреваю, что нужны еще дополнительные телодвижения :)

 

Прерывание системного таймера происходит согласно указанию

SysTick_Config(SystemCoreClock / 1000); //1ms

Если делить на 10000, то будет 0.1ms.

Здесь можно изменить значение по своему усмотрению, в пределах возможного.

В Keil нажав правую кнопку на непонятной переменной или функции, выбираете в меню "Go To Definition Of '...' " и попадаете в место ее определения. Очень удобно.

Да это прерывание, Прерывание Timer17 и для этого сначала нужно проинициализировать таймер, включить режим прерываний и так далее.

Share this post


Link to post
Share on other sites
Прерывание системного таймера происходит согласно указанию

SysTick_Config(SystemCoreClock / 1000); //1ms

Если делить на 10000, то будет 0.1ms.

Здесь можно изменить значение по своему усмотрению, в пределах возможного.

В Keil нажав правую кнопку на непонятной переменной или функции, выбираете в меню "Go To Definition Of '...' " и попадаете в место ее определения. Очень удобно.

Да это прерывание, Прерывание Timer17 и для этого сначала нужно проинициализировать таймер, включить режим прерываний и так далее.

 

Спасибо Вам за помощь!

 

 

 

 

Буду дальше пробовать разбираться :)

 

А сколько времени происходит вход в прерывание и его выполнение а потом выход из него?

 

Edited by Artos5

Share this post


Link to post
Share on other sites
А сколько времени происходит вход в прерывание и его выполнение а потом выход из него?

Когда отладку включал с платой на stm32f103 через JTAG отладчик, то видел время каждого шага. Сейчас на этой плате не знаю. Я сам только учусь.

Share this post


Link to post
Share on other sites

Я имел в виду на компе из кейла шьёшь?

Попробуй ST-шную утилиту - http://www.st.com/web/en/catalog/tools/PF258168#header поставить. Только кейл перед этим закрой.

Share this post


Link to post
Share on other sites
Я имел в виду на компе из кейла шьёшь?

Попробуй ST-шную утилиту - http://www.st.com/web/en/catalog/tools/PF258168#header поставить. Только кейл перед этим закрой.

Блин... закрыл Кейл. Запустил СТ Линк. И он отказывается дружить с программатором... все равно не видит программатор. Хотя система видит устройство прекрасно.

 

Начал шить СТ Линк, после шаманства...

Поставил в настройках Connect under reset.

Что то не могу вкурить что это произошло... кейл по прежнему отказывается шить...

 

 

 

Теперь Кейл пишет такую херню: flash download failed - Target DLL has been canсelled

Что то СТМ начинает тошнить :)

 

Что ему то не хватает?!

Edited by Artos5

Share this post


Link to post
Share on other sites
В свойствах проекта, на вкладке Utilites, в св-вах St-Link (settings), выбран STM32F05x Flash?

Выбран ST Link debugger и его поменять нельзя, он не активный

 

Оно шилось нормально , шилось-шилось пока не "заглючило" резко . Резко начал ругаться Кейл...

post-77613-1374425087_thumb.png

Share this post


Link to post
Share on other sites
Нажать левой кнопкой на Use Target Drive for Flash Programming.

Спасибо Вам за наводку! Заработало!

Только не могу понять почему оно заглючило! :(

 

Есть еще серьезная проблема...

Не работает полностью PORTB

 

инициализирую так:

 

void Init_GPIO(void)
{
    /* Private typedef ---------------------------------------------------------*/
    GPIO_InitTypeDef GPIO_InitStruct_butt;
    GPIO_InitTypeDef GPIO_InitStruct_led;
    //GPIO_InitTypeDef GPIO_InitStruct_led1;
    
    /*Enable or disable the AHB peripheral clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    
    /** Configure pins as GPIO for USER button
         PA0     ------> GPIO_Input
    */

  /* Configure Button pin as input */
  GPIO_InitStruct_butt.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStruct_butt.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStruct_butt.GPIO_Pin = GPIO_Pin_0;
  GPIO_Init(GPIOA, &GPIO_InitStruct_butt);
    
    /** Configure pins as GPIO for led
         PC8     ------> GPIO_Output  blue
         PC9     ------> GPIO_Output    green
    */

    /*Configure GPIO pin */
    GPIO_InitStruct_led.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
    GPIO_InitStruct_led.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct_led.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct_led.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct_led.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct_led);
    
        /*Configure GPIO pin PORTB*/
    GPIO_InitStruct_led.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStruct_led.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct_led.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct_led.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStruct_led.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct_led);
}

 

и

 

#define LED_Greeen_On (GPIOC->BSRR = GPIO_Pin_9)
#define LED_Blue_On (GPIOC->BSRR = GPIO_Pin_8)
#define LED_Greeen_Off (GPIOC->BRR = GPIO_Pin_9)
#define LED_Blue_Off (GPIOC->BRR = GPIO_Pin_8)
#define LED_Green_Toggle (GPIOC->ODR ^= GPIO_Pin_9)
#define LED_Blue_Toggle (GPIOC->ODR ^= GPIO_Pin_8)
#define Butt_User_Get_State (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
// led out config
#define DATA_LED_1 (GPIOB->BSRR = GPIO_Pin_13)
#define DATA_LED_0 (GPIOB->BRR = GPIO_Pin_13)
#define CLOCK_LED_1 (GPIOB->BSRR = GPIO_Pin_14)
#define CLOCK_LED_0 (GPIOB->BRR = GPIO_Pin_14)
#define LATCH_LED_1 (GPIOB->BSRR = GPIO_Pin_15)
#define LATCH_LED_0 (GPIOB->BRR = GPIO_Pin_15)

 

Если настраиваю другой порт например: PORTA

То все работает...

 

Подозреваю что умер у меня в отладчике порт В :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this