gpt4 book ai didi

c++ - 为什么STM32不中断?

转载 作者:行者123 更新时间:2023-11-30 16:07:41 25 4
gpt4 key购买 nike

我正在为微 Controller STM32F407 磁盘驱动器编写一个简单的程序。我已经学会了如何使用计时器来延迟程序的执行,但是如果我需要启动计时器而不考虑主程序怎么办?我尝试按照技术文档进行所有操作,但定时器溢出中断不起作用。不管怎样,谢谢你的回答!

    #include "stm32f4xx.h"
#include "stdbool.h"

void clock_perif ();
void init_HSE ();
void init_GPIOD ();
void init_TIM6(int time);


#define ledTime 1

int main(void){
init_HSE ();




__enable_irq ();
//NVIC_EnableIRQ(TIM6_DAC_IRQn);
NVIC->ISER[1] = 0x400000;

clock_perif ();

init_GPIOD ();
init_TIM6 (ledTime);



while (1){
}

}


/*
init RCC
*/

void clock_perif (){
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
}


/*
Activate external qarzt
*/

void init_HSE (){
RCC->CR = RCC_CR_HSEON;
while (!(RCC->CR & RCC_CR_HSERDY));
RCC->CFGR |= RCC_CFGR_SW_0;
while (!(RCC->CFGR & RCC_CFGR_SWS_0));
RCC->CFGR &= ~ RCC_CFGR_HPRE_3 | RCC_CFGR_PPRE1_2 | RCC_CFGR_PPRE2_2;
}


/*
Activate GPIOs
*/

void init_GPIOD (){
GPIOD->MODER |= GPIO_MODER_MODE15_0 | GPIO_MODER_MODE14_0 | GPIO_MODER_MODE13_0 | GPIO_MODER_MODE12_0;
GPIOD->PUPDR |= GPIO_PUPDR_PUPD15_1 | GPIO_PUPDR_PUPD14_1 | GPIO_PUPDR_PUPD13_1 | GPIO_PUPDR_PUPD13_1;
}


/*
Timer 6
*/
void init_TIM6(int time){
TIM6->CR1 |= TIM_CR1_URS | TIM_CR1_UDIS;
TIM6->DIER |= TIM_DIER_UIE;
TIM6->CNT = 0;
TIM6->PSC = 7900;
TIM6->ARR = 1;
TIM6->EGR = 1;
TIM6->SR = 0;
TIM6->CR1 |= TIM_CR1_CEN;
}


//Interrupts!
void TIM6_DAC_IRQHandler (){
GPIOD->BSRR |= GPIO_BSRR_BS15 | GPIO_BSRR_BS14 | GPIO_BSRR_BS13 | GPIO_BSRR_BS12;
}

我是微 Controller 编程新手,但仍然遇到问题

最佳答案

您可以通过设置位TIM_CR1_UDIS来禁用更新事件生成。因此不会产生中断。

关于c++ - 为什么STM32不中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59560359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com