Сб апр 06, 2013 10:40:08
#include "stm32f10x.h"
//#include "header\settings.h"
//----------
void init(void);
//----------
int main(void)
{
init();
while(1)
{}
}
//----------
void TIM6_DAC_IRQHandler(void)
{
if(TIM6->SR & TIM_SR_UIF)
{
TIM6->SR &= ~TIM_SR_UIF; //сбросить флаг
if(GPIOA->IDR & GPIO_IDR_IDR0) // если на выходе PA0 единица
{
GPIOA->BSRR |= GPIO_BSRR_BR0; // сбросить в ноль
}
else
{
GPIOA->BSRR |= GPIO_BSRR_BS0; // выставить в единицу
}
}
}
//----------
void init(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // включение тактирования порта А
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // включение тактирования порта В
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // включение тактирования таймера 6
//RCC->APB1ENR |= RCC_APB1ENR_TIM7EN; // включение тактирования таймера 7
// настройка PA0 на выход (излучатель)
GPIOA->CRL &= ~GPIO_CRL_CNF0; // сброс настроек направления PA0 (CNF0[1:0] - push-pull)
GPIOA->CRL &= GPIO_CRL_MODE0; // сброс настроек частоты PA0
GPIOA->CRL |= GPIO_CRL_MODE0_1; // максимальная частота 2MHz
// настройка таймера TIM6
TIM6->PSC = 8001;
TIM6->ARR = 500; // счетчик автоперезагрузки
TIM6->DIER = TIM_DIER_UIE; // разрешить обновления прерывания TIM6
TIM6->CR1 |= TIM_CR1_ARPE | TIM_CR1_CEN; // разрешить автоперезагрузку
// по предустановленному значению
// включить таймер
NVIC_EnableIRQ(TIM6_DAC_IRQn); // разрешить прерывания TIM6
NVIC_SetPriority(TIM6_DAC_IRQn, 0); //задаем приоритет прерывания
__enable_irq(); // разрешаем глобальные прерывания
}
Вт апр 09, 2013 15:01:25
Ср апр 10, 2013 19:39:32
gruffi писал(а):Все таки запустил тактирование от внешнего кварца на 12 МГц, а вот почему без настроек тактирования выдавало 4.5 Гц так и не понял...перелопатил весь раздел reset and clock, но ничего не нашел, только то что по умолчанию контроллер стартует от внутреннего генератора на 8 МГц...а на практике оказалось не так....