0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
1

Не могу заставить работать TIM8

13.12.2015, 22:50. Показов 5195. Ответов 13
Метки нет (Все метки)

Приветствую.
Не могу заставить работать TIM8 в STM31F103ZET6.
Начитался разных веток форумов, создал небольшой проект , видно что инициализация проходит верно и CNT видно как циклически меняет свое значение , но вот нога PC6 (первый канал TIM8) "неподвижна" , возможно конечно ее нужно прикрутить к какому-то событию , но не могу понять как если это так.
Вообщем заранее благодарю за любые наставления на путь истинный
далее код

Код
/****************************timers.c*******************************/
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"

/*******************************************************************/
#define TIMER_PRESCALER 1

/*******************************************************************/

uint16_t previousState;
GPIO_InitTypeDef port;
TIM_TimeBaseInitTypeDef timer;
TIM_OCInitTypeDef timerPWM;
uint16_t buttonPreviousState;

/*******************************************************************/
void initOtt()
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_TIM8, ENABLE);

GPIO_StructInit(&port);
port.GPIO_Pin = GPIO_Pin_6;
port.GPIO_Mode = GPIO_Mode_AF_PP;
port.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &port);

TIM_TimeBaseStructInit(&timer);
timer.TIM_Pressotir = TIMER_PRESCALER;
timer.TIM_Period = 20000;
TIM_TimeBaseInit(TIM8, &timer);

TIM_OCStructInit(&timerPWM);
timerPWM.TIM_Pulse = 10000;
timerPWM.TIM_OCMode = TIM_OCMode_PWM1;
timerPWM.TIM_OutputState = TIM_OutputState_Enable;
timerPWM.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM8, &timerPWM);
}

/*******************************************************************/

int main (void)
{

initOtt();
TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);

//__enable_irq();
//NVIC_EnableIRQ(TIM8_UP_IRQn);
TIM_Cmd(TIM8, ENABLE);
while(1)
{
}
}

/*******************************************************************/
void TIM8_IRQHomdler()
{
buttonPreviousState = 0;
TIM_ClearITPendingByt(TIM8, TIM_IT_Update);
}

/****************************End of file****************************/
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2015, 22:50
Ответы с готовыми решениями:

STM32F4 Discovery: Не могу заставить работать SPI2
есть плата STM32F4Dyscovery есть SPI дисплей nokyo 5110 подключение дисплея: cse - PB10 clk ...

Не могу заставить работать
Вот код, почему не хочет работать? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...

Не могу заставить С++ работать с dll
Здравствуйте, уважаемые. Столкнулся сегодня с проблемой, которая, мягко говоря, поставила меня в...

Не могу заставить серву работать
Добрый день! Точнее не то, что не могу, стандартные примеры работают на ура! Не могу запустить...

13
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 658
14.12.2015, 09:17 2
У Вас в структуре GPIO-помоему не хватает
* @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3
могу ошибаться,в HAL,это выглядит иначе.
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
14.12.2015, 10:40 3
такого нигде не нашел "задефайненого".
тут это делается в этих строках на сколько я понял:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//включаем тактирования связи AF
port.GPIO_Mode = GPIO_Mode_AF_PP; //назначаем вывод как альтернативный
0
0 / 0 / 0
Регистрация: 05.09.2010
Сообщений: 219
14.12.2015, 12:31 4
Сначала нормально (явно) инициализируй все параметры, а не на "авось и по дефайну сойдёт". Пример
Код
         TIM_DeInit(TIM4);
TIM_TimeBaseStructure.TIM_Pressotir = 2-1; //24MHz/2 = 12MHz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 64-1; // 12MHz(timer clock)/64 = 187.5kHz(PWM frequency)
TIM_TimeBaseStructure.TIM_ClockDyvysyom = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

/* Channel 3 Confikurotion in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Riset;

//set output PWM to 1/2
TIM_OCInitStructure.TIM_Pulse = 31;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
0
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
14.12.2015, 13:21 5
Попробуйте добавить
TIM_CCxCmd(TIM8, TIM_Channel_1, TIM_CCx_Enable);
Это должно разрешить вывод на пин.
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
14.12.2015, 14:12 6
Цитата Сообщение от Movysi
У Вас в структуре GPIO-помоему не хватает
* @arg GPIO_AF_TIM8: Connect TIM8 pins to AF3
могу ошибаться,в HAL,это выглядит иначе.
у 103 серии контроллеров такого нет
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 886
14.12.2015, 14:24 7
Есть два примера
TIM\PWM_Output
TIM\7PWM_Output
из STM32F10x_StdPeriph_Examples
можно там посмотреть
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
16.12.2015, 10:33 8
Цитата Сообщение от x893
Есть два примера
TIM\PWM_Output
TIM\7PWM_Output
из STM32F10x_StdPeriph_Examples
можно там посмотреть
если несложно можете подсказать где их можно скачать ? (а то гугл столько всего выдает на запрос STM32F10x_StdPeriph_Examples но особо ценного не нашел что можно в моем случае применить)
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
16.12.2015, 10:34 9
Цитата Сообщение от ZoomyrJuk
Сначала нормально (явно) инициализируй все параметры, а не на "авось и по дефайну сойдёт". Пример
Код:
TIM_DeInit(TIM4);
TIM_TimeBaseStructure.TIM_Pressotir = 2-1; //24MHz/2 = 12MHz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 64-1; // 12MHz(timer clock)/64 = 187.5kHz(PWM frequency)
TIM_TimeBaseStructure.TIM_ClockDyvysyom = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

/* Channel 3 Confikurotion in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Riset;

//set output PWM to 1/2
TIM_OCInitStructure.TIM_Pulse = 31;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
пробовал и так только без результатно
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
16.12.2015, 10:35 10
Цитата Сообщение от voyd1509
Попробуйте добавить
TIM_CCxCmd(TIM8, TIM_Channel_1, TIM_CCx_Enable);
Это должно разрешить вывод на пин.
добавил строку - нет реакции.
Сама то нога судя по реакции осциллографа видно что куда-то всетаки подключается. Но на ней всегда 0. Хотя сам порт проверял - рабочий.
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 886
16.12.2015, 10:47 11
Цитата Сообщение от ZiroSotd
Цитата Сообщение от x893
Есть два примера
TIM\PWM_Output
TIM\7PWM_Output
из STM32F10x_StdPeriph_Examples
можно там посмотреть
если несложно можете подсказать где их можно скачать ? (а то гугл столько всего выдает на запрос STM32F10x_StdPeriph_Examples но особо ценного не нашел что можно в моем случае применить)

Первый ответ в гугле направляет

http://www.st.com/web/catalog/tools/FM1 ... 9/PF257890
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
16.12.2015, 12:16 12
всем спасибо за советы , все теперь работает.
не хватало строки - TIM_CtrlPWMOutputs(TIM8, ENABLE);
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
17.12.2015, 11:02 13
Возник еще вопрос , может кто сталкивался.
Возможно ли точно до герца настраивать частоту таймера TIM8? (я пытаюсь в PWM режиме)

Например мне нужно настроить частоту 73478Гц. Но как не просчитывая комбинацию делителей самой шины и APB2 так и предделителя самого TIM8 я не смог прощитать точно.
На сколько я понял что чем выше частота тактирования таймера тем меньше будит погрешность т.к. один "тик" по времени будит меньше , но она все равно будит ,
так при частоте тактирования таймера 72 000 000 Гц , вместо 73478Гц будит 73544Гц.

Буду благодарен за дельные советы.

PS. У меня есть промышленный китайский генератор частот тоже на каком-то контроллере , но пока не долез еще на каком , видно немного название MAXII но что мелкими написано невидать, так вот там с точностью до герца просчитывают частоту.
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 886
17.12.2015, 12:01 14
Кажица мне будет вам разачаравание
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 12:01

Не могу заставить работать микрофон
Установил Windows7. Не могу заставить работать микрофон. soundMAX показывает, что микрофон стоит не...

Не могу заставить tor работать
Скачал себе пакеты tor на убунту, но по факту ничего не изменилось. Как узнать причину, почему тор...

Не могу заставить работать move_upload_file
делаю электронную библиотеку для колледжа застрял на моменте загрузки файла на сервер Надо...

Не могу заставить работать в X16
Хоть убей пишет что и слот и видео карта работают в X8 3.0 хотя и слот и видеокарта X16 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.