Таймер на stm32f429zi

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Таймер на stm32f429zi

Сообщение Illigarium »

Не работает прерывание. Народ, помогите, я только новичок, особо не разбираюсь.

Код: Выделить всё

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_tim.h"

#define TIMER_PRESCALER	720
 
uint16_t previousState;
GPIO_InitTypeDef port;
TIM_TimeBaseInitTypeDef timer;
void initAll()
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    GPIO_StructInit(&port);
    port.GPIO_Mode = GPIO_Mode_OUT;
    port.GPIO_Pin = GPIO_Pin_14;
    port.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &port);
    TIM_TimeBaseStructInit(&timer);
    timer.TIM_Prescaler = TIMER_PRESCALER;
    timer.TIM_Period = 50;
    TIM_TimeBaseInit(TIM4, &timer);	
}
int main()
{
    __enable_irq();
    initAll();
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
    NVIC_EnableIRQ(TIM4_IRQn); //<--- problem
    while(1)
    {
	__NOP();
    }		
}
 
void TIM4_IRQHandler()
{	
    GPIO_SetBits(GPIOG, GPIO_Pin_14); //red led
    if (previousState == 0)
    {
	previousState = 1;
	timer.TIM_Period = 50;
	TIM_TimeBaseInit(TIM4, &timer);	
	TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }
    else
    {
	previousState = 0;
	timer.TIM_Period = 250;
	TIM_TimeBaseInit(TIM4, &timer);	
	TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }	
}


P.S. пользовал stm32f429i-discovery
Реклама
Аватара пользователя
Zud
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн авг 19, 2013 03:23:00
Откуда: замкадье

Re: Таймер на stm32f429zi

Сообщение Zud »

Возможно не хватает что-то типа :

Код: Выделить всё

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
т.е. настройки контроллера прерывания.
Реклама
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Не пашет :(

Код: Выделить всё

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_tim.h"
#include "misc.h"

#define TIMER_PRESCALER	720
 
uint16_t previousState;
GPIO_InitTypeDef port;
TIM_TimeBaseInitTypeDef timer;
NVIC_InitTypeDef NVIC_InitStructure;

void initAll()
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    GPIO_StructInit(&port);
    port.GPIO_Mode = GPIO_Mode_OUT;
    port.GPIO_Pin = GPIO_Pin_14;
    port.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &port);
    TIM_TimeBaseStructInit(&timer);
    timer.TIM_Prescaler = TIMER_PRESCALER;
    timer.TIM_Period = 50;
    TIM_TimeBaseInit(TIM4, &timer);	
}
int main()
{
    __enable_irq();
    initAll();
    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
	  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    NVIC_EnableIRQ(TIM4_IRQn); //<--- problem
    while(1)
    {
	__NOP();
    }		
}
 
void TIM4_IRQHandler()
{	
		GPIO_SetBits(GPIOG, GPIO_Pin_14);
    if (previousState == 0)
    {
	previousState = 1;
	timer.TIM_Period = 50;
	TIM_TimeBaseInit(TIM4, &timer);	
	TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }
    else
    {
	previousState = 0;
	timer.TIM_Period = 250;
	TIM_TimeBaseInit(TIM4, &timer);	
	TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }	
}

Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Таймер на stm32f429zi

Сообщение urry »

GPIO_Init(GPIOB,
Не наблюдаю в тексте его тактирование.
Реклама
Эиком - электронные компоненты и радиодетали
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Таймер на stm32f429zi

Сообщение HHIMERA »

SPL + злокопипаст = абсолютное зло...

Не вяжется как-то...
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);

и
GPIO_Init(GPIOB, &port);

Или... всё по рангу... и согласно купленным билетам???
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Я переделывал код с учебника под свою плату. Забыл исправить. Но суть не в том. На включении NVIC прерывания контроллер виснет.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Таймер на stm32f429zi

Сообщение dosikus »

Illigarium писал(а): Но суть не в том. На включении NVIC прерывания контроллер виснет.
И в этом также. :)))
Что за учебник ? Стартап подключен?
Короче можно только гадать, пока проект целиком не предоставишь...
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Естессна :)) .
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Таймер на stm32f429zi

Сообщение dosikus »

Естесно что? :)))
Где проект?
Аватара пользователя
Zud
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн авг 19, 2013 03:23:00
Откуда: замкадье

Re: Таймер на stm32f429zi

Сообщение Zud »

и кстати

Код: Выделить всё

GPIO_SetBits(GPIOG, GPIO_Pin_14);
всего лишь зажигает лампочку. Гасить кто будет ?
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Нафига вам проект? Код - вот. Отвяньте вы от лампочки! Не надо её гасить. :facepalm:
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Таймер на stm32f429zi

Сообщение dosikus »

Illigarium писал(а):Нафига вам проект?
Тебе помощь нужна?
Или бум и далее гадать?
Illigarium писал(а): я только новичок, особо не разбираюсь.
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Таймер на stm32f429zi

Сообщение dosikus »

Illigarium, проект создан через ж.
Структура проекта - полная бездумная мешанина.
Но это все мелочи - проект создан в плюсах а не С и это естественно не осознано.
Для С++ хэндлеры прерываний надо обрамлять в

Код: Выделить всё

#ifdef __cplusplus extern "C" { #endif

handler()

#ifdef __cplusplus
 }
#endif

Файл startup_stm32f429_439xx.s отсутствует в проекте.
Проект настроен на 25МГц кварц - эти грабли вылезут потом ...

Illigarium, придется тебе забросить SPL и заняться вплотную С .
Иначе в дальнейшем все будет еще хуже ...
Illigarium
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт авг 13, 2013 13:36:23

Re: Таймер на stm32f429zi

Сообщение Illigarium »

Переделал в си. Добавил стартап. Нифига не работает.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Таймер на stm32f429zi

Сообщение dosikus »

Проект в студию...
Ответить

Вернуться в «ARM»