Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
ZiroSotd
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
1

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

13.12.2015, 22:50. Просмотров 3384. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2015, 22:50
Ответы с готовыми решениями:

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

Не запускается ШИМ на TIM8.
Всем привет. Хочу запустить ШИМ на TIM8 (процессор STM32F429) на третьем канале. Судя по...

Заставить работать J-Link с SWB + SystemView
Недавно узнал про SystemView от SEGGER, захотел попробовать. Но для этого нужен J-Link Нашел такую...

Режим Capture для продвинутых таймеров TIM1 и TIM8 (STM32F4)
Добрый день. Возникло непонимание по режиму Capture для продвинутых таймеров TYM1 и TIM8. В RF для...

Заставить работать SPI+DMA для SD Card на STM32CL 105
Добрый день, уважаемые коллеги! Пробую реализовать работу с SD картой через SPI+DMA. Прочитал...

13
Movysi
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
ZiroSotd
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
ZoomirJuk
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
14.12.2015, 12:31
voyd1509
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 225
14.12.2015, 13:21 5
Попробуйте добавить
TIM_CCxCmd(TIM8, TIM_Channel_1, TIM_CCx_Enable);
Это должно разрешить вывод на пин.
0
itysiy
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
x893
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 886
14.12.2015, 14:24 7
Есть два примера
TIM\PWM_Output
TIM\7PWM_Output
из STM32F10x_StdPeriph_Examples
можно там посмотреть
0
ZiroSotd
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
ZiroSotd
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
ZiroSotd
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
x893
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
ZiroSotd
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
16.12.2015, 12:16 12
всем спасибо за советы , все теперь работает.
не хватало строки - TIM_CtrlPWMOutputs(TIM8, ENABLE);
0
ZiroSotd
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
x893
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 886
17.12.2015, 12:01 14
Кажица мне будет вам разачаравание
0
17.12.2015, 12:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2015, 12:01

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

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

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


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

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

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