编码 -
#include<stm32f030x6.h>
void _delay_ms(unsigned int del) {
//Delay with systick
}
void sys_init() {
//Set Clock to 6 * 8MHz crystal
}
void TIM14_IRQHandler(void) {
//If UEV was generated, toggle PA4 (Connected to LED)
if(TIM14->SR & TIM_SR_UIF) {
GPIOA->BSRR = (GPIOA->ODR & GPIO_ODR_4)?(GPIO_BSRR_BR_4):(GPIO_BSRR_BS_4);
TIM14->SR &= ~TIM_SR_UIF;
}
}
int main(void) {
sys_init();
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM14EN;
GPIOA->MODER = 0b1 << GPIO_MODER_MODER4_Pos;
//GPIOA->AFR[0] = 4 << GPIO_AFRL_AFRL4_Pos;
//Init timer
TIM14->ARR = 731;
TIM14->PSC = 0xffff;
TIM14->DIER |= TIM_DIER_UIE;
TIM14->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(TIM14_IRQn);
NVIC_SetPriority(TIM14_IRQn, 0);
while(1);
}
如问题中所述,当我直接从闪存启动(BOOT0 连接到 GND)时,此代码工作得很好,但在使用引导加载程序时它不起作用。一旦引发中断,芯片就会重置并再次返回引导加载程序。我怎样才能解决这个问题?
我应该提到我使用了一个自定义链接器脚本和一个经过大量修改的boot.s。