Страницы

Страницы

понедельник, 1 августа 2016 г.

STM32 config

В STM32 перед тем как что то использовать НЕОБХОДИМО РАЗРЕШИТЬ это что то . По умолчанию все находится в отключенном состоянии . Поэтому любая инициализация периферии должна начинаться со строчек типа этого даже если напрямую в мануале нет об этом упоминаний 

/* Enable ADCx, DMA and GPIO clocks ****************************************/ 
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

Если используются прерывания то необходимо также настроить контроллер по типу этого 

static void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

/* Configure the preemption priority and subpriority:
- 1 bits for pre-emption priority: possible value are 0 or 1 
- 3 bits for subpriority: possible value are 0..7
- Lower values gives higher priority 
*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/* Enable the WAKEUP_BUTTON_EXTI_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = WAKEUP_BUTTON_EXTI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ubPreemptionPriorityValue;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Enable the KEY_BUTTON_EXTI_IRQn/TAMPER_BUTTON_EXTI_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = BUTTON_EXTI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

и не забыть создать обработчик прерывания 


/**
* @brief This function handles External line 0 interrupt request.
* @param None
* @retval None
*/
void EXTI0_IRQHandler(void)
{
/* Generate SysTick exception */
SCB->ICSR |= 0x04000000;

/* Clear WAKEUP_BUTTON_EXTI_LINE pending bit */
EXTI_ClearITPendingBit(WAKEUP_BUTTON_EXTI_LINE);
}

в противном случае программа будет вываливаться в какой нить обработчик системных ошибок типа BusFault_Handler,MemManage_Handler,HardFault_Handler в зависимости от того как построена система в каждом конкретном случае .