Показать сообщение отдельно
Старый 18.08.2015, 23:26   #1
Бурый
Резидент клуба
 
Аватар для Бурый
 
Регистрация: 05.01.2014
Сообщений: 508
По умолчанию STM32F103C8T6 Тактирование и таймеры

Пипол кто работал с данным ARM (Cortex M3), нужен совет. У меня плата с кварцем на 8MHz.

При настройки и инициализации базового таймера TIM2 возникла проблемы с его работой. Снял с ноги что дергает данный таймер временную характеристику, получается совсем то что хотелось бы. Настроил тактирование на внешний кварц HSE. Необходимо чтобы один тик таймера был 1мкс, а сейчас 14.6250мкс.

Скидываю проект (пишу в CoIDE 1.7.7) и картинку с анализатора (то что подсветчено и есть время одного тика).

Код:
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_conf.h"

void InitTMI(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	TIM2->CR1=(1<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1);
	TIM2->ARR=5+1;
	TIM2->PSC=7+1;
	TIM2->CR1|=(1<<0);
}

int main(void)
{
	RCC->CR=RCC_HSE_ON;
	while (!(RCC->CR & RCC_CR_HSERDY)) {}; // Ожидание готовности HSE.
	RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
	RCC->CFGR |= RCC_CFGR_SW_HSE; // Выбрать HSE для тактирования SW0=1.


	GPIO_InitTypeDef gpioA;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	gpioA.GPIO_Mode=GPIO_Mode_Out_PP;
	gpioA.GPIO_Speed=GPIO_Speed_2MHz;
	gpioA.GPIO_Pin=GPIO_Pin_1;
	GPIO_Init(GPIOA,&gpioA);
	InitTMI();

    while(1)
    {
    	if(TIM2->CNT==1){GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
    	if(TIM2->CNT==2){GPIO_SetBits(GPIOA,GPIO_Pin_1);}
    }
}
Изображения
Тип файла: jpg STM32.jpg (69.2 Кб, 36 просмотров)
Бурый вне форума   Ответить с цитированием