Mam kłopot, wykonuję ćwiczenia według "Poradnik STM32 v1_9" z elektrody,Chodzi o cykl STM32 bez bibliotek SPL.
Problem jest kiedy staram się odebrać dane w przerwaniu, po wysłaniu jakiegoś znaku z terminala, procesor się zawiesza.
Natomiast jeśli wyłączę przerwania NVIC_EnableIRQ(USART1_IRQn); a całą procedurę obsługi przerwania przeniosę do
głównej pętli while to wszystko śmiga wyśmienicie.
Ktoś ma może jakieś sugestie?
Kod: Zaznacz cały
#include "stm32f10x.h"
int main(void)
{
RCC->APB2ENR = RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;
gpio_pin_cfg(GPIOB, PB1, gpio_mode_output_PP_2MHz);
gpio_pin_cfg(GPIOA, PA9, gpio_mode_alternate_PP_2MHz);
gpio_pin_cfg(GPIOA, PA10, gpio_mode_input_floating);
SysTick_Config(8000000/2);
USART1->BRR = 8000000/9600;
USART1->CR1 = USART_CR1_UE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
NVIC_EnableIRQ(USART1_IRQn);
while(1)
{
//__WFI();
}
}
__attribute__((interrupt)) void USART1_IRQHandler(void)
{
if ( USART1->SR & USART_SR_RXNE)
{
USART1->SR &= ~USART_SR_RXNE;
uint16_t tmp;
tmp = USART1->DR;
USART1->DR = tmp+1;
}
}
__attribute__((interrupt)) void SysTick_Handler(void){
GPIOB->ODR ^= PB1;
}