Уже второй раз берусь за прерывания, но без положительного результата, хотя уже чуть лучше.
Микроконтроллер STM32F100RBT6B на отладочной плате Discovery тактовая частота 8 МГц, программа написана в IAR C/C++ Compiler for ARM 7.20.5.7591.
При прерывании заходит в startup_stm32f10x_md_vl.s и крутится на строчке "B TIM6_DAC_IRQHandler"
Почему не выходит на функцию обработки прерывания?
void TIM6_DAC_IRQHandler(void)
Проект во вложении
Цитата:
|
PHP код:
|
#include "stm32f10x.h" #include "stm32f10x_conf.h"
int state=0;
void TIM6_DAC_IRQHandler(void) { if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM6, TIM_IT_Update); if(state) GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET); else GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET); state = 1 - state; } }
int main() { //RCC-›APB2ENR |= RCC_APB2ENR_IOPCEN; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //GPIOC-›CRH |= GPIO_CRH_MODE9_0 | GPIO_CRH_MODE9_1; //GPIOC-›CRH &= ~GPIO_CRH_CNF9; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_Init(GPIOC, &GPIO_InitStructure); TIM_TimeBaseInitTypeDef TIM_InitStructure; // Заводим структуру TIM_TimeBaseStructInit(&TIM_InitStructure); // Инициализация структуры TIM_InitStructure.TIM_Prescaler = 24000; // Предделитель TIM_InitStructure.TIM_Period = 1000; // Период таймера TIM_TimeBaseInit(TIM6, &TIM_InitStructure); // Функция настройки таймера TIM_Cmd(TIM6, ENABLE); // Включение таймера NVIC_EnableIRQ(TIM6_DAC_IRQn); TIM_ITConfig(TIM6, TIM_DIER_UIE, ENABLE); while(1) { /* GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_SET); for (volatile unsigned int i=0; i‹100000; i++) { } GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET); for (volatile unsigned int i=0; i‹100000; i++) { } */ } //return 0; }
|
|
http://otvet.mail.ru/question/44328930