【发布时间】:2021-01-07 11:13:48
【问题描述】:
我正在使用蓝色药丸,并试图找出中断。我有一个中断处理程序:
void __attribute__ ((interrupt ("TIM4_IRQHandler"))) myhandler()
{
puts("hi");
TIM4->EGR |= TIM_EGR_UG; // send an update even to reset timer and apply settings
TIM4->SR &= ~0x01; // clear UIF
TIM4->DIER |= 0x01; // UIE
}
我设置了计时器:
RCC_APB1ENR |= RCC_APB1ENR_TIM4EN;
TIM4->PSC=7999;
TIM4->ARR=1000;
TIM4->EGR |= TIM_EGR_UG; // send an update even to reset timer and apply settings
TIM4->EGR |= (TIM_EGR_TG | TIM_EGR_UG);
TIM4->DIER |= 0x01; // UIE enable interrupt
TIM4->CR1 |= TIM_CR1_CEN;
我的计时器似乎没有启动。我认为我实际上并没有启用它。我有吗??
我在很多示例代码命令中看到:
NVIC_EnableIRQ(USART1_IRQn);
NVIC_EnableIRQ() 中实际发生了什么?
我在 Google 上四处搜索,但找不到与我类似的实际裸机代码。
我似乎错过了一个关键步骤。
2020 年 9 月 23 日更新感谢回答此问题的人。诀窍是在 NVIC_ISER 寄存器中设置中断号位。正如我在下面指出的,STM32F101xx 参考手册中似乎没有提到这一点,所以我可能永远无法自己解决这个问题;并不是说我在阅读数据表方面有任何真正的技能。
无论如何,天哪,我设法让中断工作!你可以在这里看到代码:https://github.com/blippy/rpi/tree/master/stm32/bare/04-timer-interrupt
【问题讨论】:
-
Cortex内核相关的细节一般在《编程手册》中提到,而不是在《参考手册》中。
-
在此处找到 NVIC 寄存器的描述:booksite.elsevier.com/9780124080829/downloads/APP-06.pdf
标签: stm32 interrupt bare-metal