Перейти к содержанию

Илья Болдырев

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Воронеж

Электроника

  • Стаж в электронике
    Менее года

Достижения Илья Болдырев

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме

Последние значки

0

Репутация

  1. Все прекрасно работает, если вызывать прерывание в ручную. while ( 1 ) { if ( TIM2->SR & TIM_SR_UIF ) { NVIC_SetPendingIRQ( TIM2_IRQn ); } }
  2. Сделал два прерывания на кнопку и на таймер. Нажатие кнопки прекрасно обрабатывается. А вот с таймером проблемы. Решил потетстить свою настройку RCC, т.к. она не хочет работать корректно, ну или мне так кажется, но наткнулся еще на одну проблему. Код: void exti_init() { RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; SYSCFG->EXTICR[3] |= SYSCFG_EXTICR1_EXTI0_PA; EXTI->RTSR |= EXTI_RTSR_TR0; EXTI->PR = EXTI_PR_PR0; EXTI->IMR |= EXTI_IMR_MR0; NVIC_EnableIRQ( EXTI0_IRQn ); NVIC_SetPriority( EXTI0_IRQn, 14 ); // NVIC_EnableIRQ ( RCC_IRQn ); // NVIC_SetPriority( RCC_IRQn, 10 ); __enable_irq(); } void RCC_Init(void ) { SET_BIT( RCC->CR, RCC_CR_HSEON ); while ( READ_BIT( RCC->CR, RCC_CR_HSERDY == RESET ) ); FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY_0WS; SET_BIT( RCC->PLLCFGR, RCC_PLLCFGR_PLLM_2 ); SET_BIT( RCC->PLLCFGR, RCC_PLLCFGR_PLLM_3 ); SET_BIT( RCC->PLLCFGR, RCC_PLLCFGR_PLLN_5 ); SET_BIT( RCC->PLLCFGR, RCC_PLLCFGR_PLLN_6 ); SET_BIT( RCC->PLLCFGR, ~RCC_PLLCFGR_PLLP_Pos ); SET_BIT( RCC->CFGR, RCC_CFGR_PPRE2_DIV1 ); SET_BIT( RCC->CFGR, RCC_CFGR_PPRE1_DIV2 ); SET_BIT( RCC->CFGR, RCC_CFGR_HPRE_DIV1 ); SET_BIT( RCC->CR, RCC_CR_PLLON ); while ( READ_BIT( RCC->CR, RCC_CR_PLLRDY == RESET ) ); SET_BIT( RCC->CFGR, RCC_CFGR_SW_PLL ); while ( READ_BIT( RCC->CR, RCC_CFGR_SWS_1 == RESET ) ); } GPIO_init(void ) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; GPIOC->MODER |= GPIO_MODER_MODER13_0; GPIOA->MODER &= ~GPIO_MODER_MODER0_0; GPIOA->MODER &= ~GPIO_MODER_MODER0_1; SET_BIT( GPIOA->PUPDR, GPIO_PUPDR_PUPD0_0 ); } TIM2_init(void){ RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->PSC = 8000-1; TIM2->ARR = 1000-1; TIM2->DIER |= TIM_DIER_UDE; TIM2->CR1 |= TIM_CR1_CEN; NVIC_EnableIRQ(TIM2_IRQn); NVIC_SetPriority(TIM2_IRQn, 13); } int main( void ) { // RCC_Init(); GPIO_init(); TIM2_init(); exti_init(); while ( 1 ) { } } void RCC_IRQHandler() { } void EXTI0_IRQHandler( void ) { if ( EXTI->PR & EXTI_PR_PR0 ) { EXTI->PR = EXTI_PR_PR0; GPIOC->ODR ^= GPIO_ODR_ODR_13; } } void TIM2_IRQHandler(void) { TIM2->SR = TIM_SR_UIF; GPIOC->ODR ^= GPIO_ODR_ODR_13; }
×
×
  • Создать...