Andrey514 0 16 августа, 2010 Опубликовано 16 августа, 2010 · Жалоба Второй день маюсь. Не могу запустить ШИМ на ноге PB7. Что я делаю не так? Подскажите ,плиз! :1111493779: main.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 16 августа, 2010 Опубликовано 16 августа, 2010 · Жалоба А включить таймер: RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; или RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE)... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Включил теперь... -не помогает. RCC->APB2ENR|=1; - альтернативные фнкции портов включил и тоже ничего... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Вот мой рабочий код (таймер 2, канал 2): #define ARR_VAL 36 #define CCR2_VAL ARR_VAL / 2 // 1. set up timer TIM2->CR1 = TIM_CR1_ARPE; // count up, no divisor, auto reload TIM2->ARR = ARR_VAL; // timer period TIM2->PSC = 0; // prescaler TIM2->EGR = TIM_EGR_UG; // generate an update event to reload the prescaler value TIM2->CR2 = 0; // 2. set up ccr2 TIM2->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P); // disable cc2 output, clear polarity TIM2->CCR2 = CCR2_VAL; // cc2 period TIM2->CCMR1 = TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE; // PWM 1 (0x6000), enable preload; TIM2->CCER |= TIM_CCER_CC2E; // enable cc2 output TIM2->CR1 |= TIM_CR1_CEN; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Сделал как ты написал, Антоха. С поправкой на таймер 4 - все равно не работает. А в режиме симуляции таймер должен вести отсчеты? И еще вопрос: на ножке порта в симуляторе я увижу ШИМ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А в регистре RCC_APB2ENR бит AFIO_EN установлен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А в регистре RCC_APB2ENR бит AFIO_EN установлен? да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба #include "stm32f10x_map.h" #define RCC_APB1ENR_TIM4EN ((u32)(2)) #define RCC_APB2ENR_IOPAEN ((u32)(2)) #define RCC_APB2ENR_IOPBEN ((u32)(3)) #define RCC_APB2ENR_AFIOEN ((u32)(0)) #define RCC_CFGR_ADCPRE ((u32)(14)) #define RCC_CFGR_PPRE1 ((u32)(8)) #define AF_PP_50 ((u32)(11)) #define CFG_PIN7 ((u32)(28)) #define TIM_CCER_CC1E ((u32)(0)) #define TIM_CCER_CC2E ((u32)(4)) #define OC_MODE_PWM1 ((u32)(6)) #define TIM_CCMR1_OC1M ((u32)(4)) #define TIM_CCMR1_OC2M ((u32)(12)) #define TIM_CR1_CEN ((u32)(0)) #define TIM_CR1_ARPE ((u32)(7)) int main() { RCC->AHBENR=0; RCC->APB1ENR= (1<<RCC_APB1ENR_TIM4EN); RCC->APB2ENR= (1<<RCC_APB2ENR_IOPAEN) |(1<<RCC_APB2ENR_IOPBEN) |(1<<RCC_APB2ENR_AFIOEN); RCC->CFGR= (3<<RCC_CFGR_ADCPRE) |(4<<RCC_CFGR_PPRE1); GPIOB->CRL=(AF_PP_50<<CFG_PIN7); // T4_C2 TIM4->ARR=(12000000/75000)-1; // запись периода TIM4->PSC=0; // запись базы TIM4->CCR1=10; // длительность импульса DIM0 TIM4->CCR2=20; // длительность импульса DIM1 TIM4->CCER= (1<<TIM_CCER_CC1E) |(1<<TIM_CCER_CC2E); // разрешить первый и второй выходы сравнения TIM4->CCMR1= (OC_MODE_PWM1<<TIM_CCMR1_OC1M) // режим ШИМ для первого канала |(OC_MODE_PWM1<<TIM_CCMR1_OC2M); // режим ШИМ для второго канала TIM4->CNT=0; TIM4->CR2=0; TIM4->CR1= (1<<TIM_CR1_CEN) // разрешить счет |(1<<TIM_CR1_ARPE); // разрешить автоматическую перезагрузку while(1); } В Keil даже симулируется... АХТУНГ! А есть ли четвертый таймер у 103T8? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Нашёл ошибку: GPIOB->CRL=0x30000000;//альтерн.функция push-pull,PB7-50МГц, 0x3 - это просто output, а надо 0xB - альтернативный output. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Нашёл ошибку: GPIOB->CRL=0x30000000;//альтерн.функция push-pull,PB7-50МГц, 0x3 - это просто output, а надо 0xB - альтернативный output. это я уже исправил. Все равно не помогает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А есть ли четвертый таймер у 103T8? Вроде есть. это я уже исправил. Все равно не помогает... В симуляторе или в реальном железе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Вроде есть. В симуляторе или в реальном железе? Не работает и в симуляторе, и в железе. Таймер4 есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Покажите полный код, что есть сейчас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey514 0 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба Покажите полный код, что есть сейчас. Вот mn.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 августа, 2010 Опубликовано 17 августа, 2010 · Жалоба А куда делась строка RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться