реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F3Discovery не могу запустить таймер
Pavel339
сообщение Aug 6 2013, 07:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 17-04-06
Пользователь №: 16 183



Имееться девайс STM32F3Discovery с родным контроллером STM32F303VCT который заменен на STM32F373VCT.

Есть проект вывод числа с плавующей точкой на дисплей WH2004A-TGK-CT#, пробывал запустить с помощью таймера, почему то не срабатывает вроде бы все делаю правильно. Потом в итоге сделал по задержкам, но мне теперь надо с АЦП работать, а там таймер нужен, который у меня не работает, может кто подскажет причину, начинающему почему не работает (код работы таймера заремен). Проект прикрепить не удалось даю ссылку на яндек диск http://yadi.sk/d/_XdJlLnw7cAH4.

Заранее спасибо. И еще работаю в Keil uVision4.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 6 2013, 08:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



таймер включили?
затактировали?
прерывания включили?
разрешили?
приоритет задали?

вы бы не проект выкладывали не пойми куда, а тут тексты функций инициализации, вызовов привели бы
Go to the top of the page
 
+Quote Post
Pavel339
сообщение Aug 6 2013, 08:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 17-04-06
Пользователь №: 16 183



Вот код иницилизации портов
CODE
#include "init_gpio.h"

#define SYS_CLK 48000000 // we use SPEED_HIGH = 48 MHz
#define DELAY_TIM_FREQUENCY 1000000 // 1MHZ -> timer runs in microseconds

void init_gpio(void) {
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

// Enable or disable the AHB peripheral clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// Configure GPIO pin (ADC_IN4)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);


// Enable or disable the AHB peripheral clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);

// Configure GPIO pin
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);


GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_1
4;
GPIO_Init(GPIOD, &GPIO_InitStruct);


// Enable timer clock - use TIMER5
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

// Time base configuration
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = (SYS_CLK / DELAY_TIM_FREQUENCY) - 1;
TIM_TimeBaseStructure.TIM_Period = UINT16_MAX;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* Enable counter */
TIM_Cmd(TIM2, ENABLE);
}

Вот подпрограмма вывода на дисплей

#include "init_gpio.h"
#include "wh2004a.h"

// void Delay_us (uint16_t uSecs) {
// uint16_t Start = (uint16_t)TIM_GetCounter(TIM2);
// while((uint16_t)((uint16_t)TIM_GetCounter(TIM2) - Start) <= uSecs);
// }

void Delay_us (uint16_t uSecs) {
volatile uint32_t Start;
Start = (uint32_t)uSecs*72;
while(Start--);
}

void wh2004_write_4_bit (char Byte, char DI) {
GPIO_ResetBits(GPIOD, GPIO_Pin_14); // E = 0
if (DI) GPIO_SetBits(GPIOD, GPIO_Pin_12); // RS = 1, Write Data
else GPIO_ResetBits(GPIOD, GPIO_Pin_12); // RS = 0, Write Instruction
GPIO_ResetBits(GPIOD, GPIO_Pin_13); // Wn/R = 0
Delay_us(2);

GPIO_SetBits(GPIOD, GPIO_Pin_14); // E = 1

GPIO_SetBits(GPIOD, ((uint16_t)Byte << 8) & 0x0F00);
GPIO_ResetBits(GPIOD, ~((uint16_t)Byte << 8) & 0x0F00);
//GPIO_Write(GPIOB, (GPIOB->ODR & 0xC3FF) | ((((uint16_t)Byte) << 10) & 0x3C00)); // Write Data
Delay_us(2);
GPIO_ResetBits(GPIOD, GPIO_Pin_14); // E = 0
Delay_us(2);
}

void wh2004_write_8_bit (char Byte, char DI) {
wh2004_write_4_bit (Byte >> 4, DI);
wh2004_write_4_bit (Byte, DI);
}

void wh2004_write_data (char Byte, char Pos) {
wh2004_write_8_bit((Pos & 0x7F) | 0x80, 0); // Set Position
Delay_us(50); // Wait 50 us
wh2004_write_8_bit(Byte, 1); // Write Data
Delay_us(50); // Wait 50 us
}

void wh2004_init () {
Delay_us(20000); // Wait 20 ms (Power On)
wh2004_write_4_bit(3, 0); // Set 4-bit mode
Delay_us(5000); // Wait 5 ms
wh2004_write_4_bit(3, 0);
Delay_us(500);

wh2004_write_4_bit(3, 0);
Delay_us(1000);
wh2004_write_4_bit(2, 0);
Delay_us(100);

wh2004_write_8_bit(0x28, 0);
Delay_us(2000); // Wait 100 us

wh2004_write_8_bit(0x0C, 0); // Display Off
Delay_us(2000); // Wait 100 us
wh2004_write_8_bit(0x01, 0); // Display Clear
Delay_us(5000); // Wait 100 us
wh2004_write_8_bit(0x06, 0); // Display Clear
Delay_us(5000); // Wait 100 us
}

Сейчас сделал на задержках функция таймера в верху программы заремлина ибо START при отладке всегда равен 0.

Сообщение отредактировал IgorKossak - Aug 6 2013, 11:22
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 6 2013, 08:56
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

GPIO - вы включили, а таймер где?
Go to the top of the page
 
+Quote Post
Pavel339
сообщение Aug 6 2013, 09:04
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 17-04-06
Пользователь №: 16 183



Точно, спасиб. А я уже всю голову сломал)))

Хотя нет тактирование включал я
// Enable timer clock - use TIMER5
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
вот
Go to the top of the page
 
+Quote Post
Pavel339
сообщение Aug 7 2013, 09:29
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 17-04-06
Пользователь №: 16 183



Заметил ошибку опечатался
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
не пойму тока почему кэйл не сриагировал на такую опечатку)

Сообщение отредактировал Pavel339 - Aug 7 2013, 09:30
Go to the top of the page
 
+Quote Post
Flexz
сообщение Aug 7 2013, 10:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



А какая кейлу разница? Функция есть и с APB1 и с APB2, передаете вы ей int, все честно. Для контроля аргументов есть C++ и enum.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016