Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
1

Прерывание по приему USART1 в STM32F100RB

18.10.2014, 00:32. Показов 2180. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, осваиваю stm-ки. Пишу в IAR , камень - stm32f100rb (st32vldiscovery)
Есть такая мною написанная небольшая програмка, в ней настраивается UART1 на приём/передачу. Передает всё нормально, принимаю символ 'a'. С приёмом сложнее - пытаюсь принимать по прерыванию, но в момент приёма всё крашится, в тело обработчика прерываний программа не попадает...
Думал что мб дело в том что уровень сигнала немного превышает положенный, там больше 3.5В, но если сделать приём без прерывания в main() то всё работает нормально, в чём мб причина?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stm32f10x.h>
char f=1;
char uart_data;
 
void initGpio()
  {
  RCC->APB2ENR|=RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USORT1EN | RCC_APB2ENR_AFIOEN;;
  GPIOC->CRH|=GPIO_CRH_MODE8_1 | GPIO_CRH_MODE9_1;
  GPIOC->CRH&=~(GPIO_CRH_CNF8_0 | GPIO_CRH_CNF9_0);
  GPIOC->ODR|=GPIO_ODR_ODR8 | GPIO_ODR_ODR9;
 
  GPIOA->CRH &= !GPIO_CRH_CNF10;                // в 0
  GPIOA->CRH &= !GPIO_CRH_MODE10;               // в 0
  GPIOA->CRH  |= GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9_0;    //PA9
  GPIOA->CRH  |= GPIO_CRH_CNF10_0;                      //PA10
  USORT1->BRR=0x341;                              // делитель на 9600
  USORT1->CR1 |= USORT_CR1_TE | USORT_CR1_RE;     // вкл. приём и передача
 
  USORT1->CR1 |= USORT_CR1_UE;        // Запускаем модуль USORT
 
  __enable_irq();                     // глобальное включение прерывания
  NVIC_EnableIRQ (USORT1_IRQn);       // разрешаем прерывание по USORT1
  USORT1->CR1 |= USORT_CR1_RXNEIE;    // разрешаем прерывание по приёму
  }
 
void USORT1_Send(char chr) {
  while(!(USORT1->SR & USORT_SR_TC));
  USORT1->DR = chr;
}
void USORT1_IRQHandler(void)
    {
    uart_data=USORT1->DR;
    GPIOC->ODR&=~GPIO_ODR_ODR8;
    }
int main()
{
initGpio();
  while(1)
  {
      for(int i=0;i<9000;i++);
      if(f==1)
          {
          GPIOC->ODR&=(~GPIO_ODR_ODR9);
          GPIOC->ODR|=GPIO_ODR_ODR8;
          USORT1_Send('a');
          }
      if(f==0)
          {   
          GPIOC->ODR&=~GPIO_ODR_ODR8;
          GPIOC->ODR|=GPIO_ODR_ODR9;
          USORT1_Send('b');
          }
     if(uart_data=='g')
        {   
        GPIOC->ODR&=~GPIO_ODR_ODR8;
        GPIOC->ODR|=GPIO_ODR_ODR9;
        }
  }
}
Добавлено через 1 час 47 минут
вообщем при любом прерывании попадаю в обработчик...с чем связно не понятно...брял даже другой пример работающий с форума
C
1
2
3
4
void HardFault_Handler( void )
{
   while(1);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2014, 00:32
Ответы с готовыми решениями:

Прерывание по приему SPI
Добрый день. Прошу вашей помощи. Настроил SPI2 на прерывание на окончание передачи. то есть я хочу...

Не получается запустить прерывание по приему FDCAN, stm32h743
Доброго времени суток. Задача следующая: необходимо передавать и принимать сообщения по CAN шине....

USART1+stmf103rb
Добрый день! Набросал программку: моргает светодиодом по прерыванию таймера. Решил чтонибудь...

Не работает USART1 RX
приветствую. Использую отладочную плату stm32f4discovery с мк stm32f429zi. Настроил USART1 на прием...

2
Модератор
Эксперт по электронике
8915 / 6684 / 918
Регистрация: 14.02.2011
Сообщений: 23,546
18.10.2014, 00:44 2
Лучший ответ Сообщение было отмечено dzrkot как решение

Решение

Цитата Сообщение от dzrkot Посмотреть сообщение
Пишу в IAR
с IAR не работал не могу сказать
но похоже что у тебя не устанавливается обработчик прерываний
посмотри имена обработчиков в стартовом файле файле (для Кеила это startup_stm32f10x_hd.s)

вот привожу таблицу векторов

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     vPortSVCHandler           ; SVCall Handler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
                DCD     xPortPendSVHandler        ; PendSV Handler
                DCD     xPortSysTickHandler       ; SysTick Handler
 
                ; External Interrupts
                DCD     WWDG_IRQHandler            ; Window Watchdog
                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
                DCD     TAMPER_IRQHandler          ; Tamper
                DCD     RTC_IRQHandler             ; RTC
                DCD     FLASH_IRQHandler           ; Flash
                DCD     RCC_IRQHandler             ; RCC
                DCD     EXTI0_IRQHandler           ; EXTI Line 0
                DCD     EXTI1_IRQHandler           ; EXTI Line 1
                DCD     EXTI2_IRQHandler           ; EXTI Line 2
                DCD     EXTI3_IRQHandler           ; EXTI Line 3
                DCD     EXTI4_IRQHandler           ; EXTI Line 4
                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1
                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2
                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3
                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4
                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5
                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6
                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7
                DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2
                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE
                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5
                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break
                DCD     TIM1_UP_IRQHandler         ; TIM1 Update
                DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation
                DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare
                DCD     TIM2_IRQHandler            ; TIM2
                DCD     TIM3_IRQHandler            ; TIM3
                DCD     TIM4_IRQHandler            ; TIM4
                DCD     I2C1_EV_IRQHandler         ; I2C1 Event
                DCD     I2C1_ER_IRQHandler         ; I2C1 Error
                DCD     I2C2_EV_IRQHandler         ; I2C2 Event
                DCD     I2C2_ER_IRQHandler         ; I2C2 Error
                DCD     SPI1_IRQHandler            ; SPI1
                DCD     SPI2_IRQHandler            ; SPI2
                DCD     USORT1_IRQHandler          ; USORT1
                DCD     USORT2_IRQHandler          ; USORT2
                DCD     USORT3_IRQHandler          ; USORT3
                DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10
                DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
                DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend
                DCD     TIM8_BRK_IRQHandler        ; TIM8 Break
                DCD     TIM8_UP_IRQHandler         ; TIM8 Update
                DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation
                DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare
                DCD     ADC3_IRQHandler            ; ADC3
                DCD     FSMC_IRQHandler            ; FSMC
                DCD     SDIO_IRQHandler            ; SDIO
                DCD     TIM5_IRQHandler            ; TIM5
                DCD     SPI3_IRQHandler            ; SPI3
                DCD     UART4_IRQHandler           ; UART4
                DCD     UART5_IRQHandler           ; UART5
                DCD     TIM6_IRQHandler            ; TIM6
                DCD     TIM7_IRQHandler            ; TIM7
                DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1
                DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2
                DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3
                DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
__Vectors_End
вот эта строчка DCD USORT1_IRQHandler ; USORT1
имя олжно совпадать с именем обработчика
1
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
18.10.2014, 01:10  [ТС] 3
спасибо, я его вообще не прикрутил к проекту как оказалось))
проблема решена)
0
18.10.2014, 01:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2014, 01:10
Помогаю со студенческими работами здесь

USART1 и stm32f103
Нужно по USORT1 получить отклик от нажатия PE6, но я не могу понять почему не получается, помогите...

Проблема с USART1
Доброго времени суток! Пытаюсь наладить связь отладочной платы STM32-H152 с мп STM32T152VB с...

USART1 на STM32F4-Discovery
Пытаюсь настроить USORT1 на STM32F4-Dyscovery. Плата подключена к компьютеру через USB-UART...

STM32F103C8t6 настройка USART1
Добрый день! Начал настраивать STM32F103C8T6, в частности USORT1! Код такой: ...

USART1 with DMA1 не работает прием данных
Код программы//************************ INCLUDES *********************************// #include...

STM32 - разница между USART1 и USART2
Плата Pinboard 2 с модулем STM32. Использую USORT для командной строки с помощью библиотеки...

Обвязка STM32F100RB
Сделал проект на отладочной плате VLDISCOVERY теперь хочется развести платку. Хотелось бы уточнить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru