int main(void) { // https://blog.csdn.net/p1279030826/article/details/103250849 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2 delay_init(); SERVO_Init(); uart_init(9600); // ´®¿Ú³õʼ»¯Îª9600 esp8266Ϊ9600 esp32Ϊ115200 //ServoOpen90(); printf("initializing 1..#\r\n"); PIN_OUT_Init(); printf("initializing 2..#\r\n"); // ADC INIT ËÄͨµÀÄ£ÄâÁ¿²É¼¯ PA0 - PA3 printf("initializing 3..#\r\n"); ADC_Init_Config(); printf("initializing 4..#\r\n"); TIM3_Int_Init(9999,7199); DHT11_Init(); printf("initializing DHT11_Init..#\r\n"); ServoOpen0(); sg90_status = 0;解释代码
时间: 2024-04-03 07:37:03 浏览: 178
这段代码是一个基于STM32的嵌入式系统的C语言代码,主要实现的功能是初始化一些硬件模块,如ADC(模拟-数字转换器)、DHT11传感器和SG90舵机。其中,函数`NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)`用于配置中断优先级分组,函数`delay_init()`用于初始化延时函数,函数`SERVO_Init()`用于舵机的初始化,函数`uart_init(9600)`用于初始化串口通信,函数`PIN_OUT_Init()`用于初始化输出引脚,函数`ADC_Init_Config()`用于初始化ADC模块。函数`TIM3_Int_Init(9999,7199)`用于初始化定时器,函数`DHT11_Init()`用于初始化DHT11传感器,函数`ServoOpen0()`用于将SG90舵机旋转到0度位置,变量`sg90_status`的值被初始化为0。在这段代码中,还使用了printf函数输出一些调试信息。
相关问题
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //外部中断 NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
根据你提供的代码片段,这部分代码是用于配置外部中断的中断优先级。根据代码中的设置,`NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority`和`NVIC_InitStructure.NVIC_IRQChannelSubPriority`都被设置为3。
在ARM Cortex-M系列微控制器中,中断优先级通常由两个部分组成:抢占优先级(Preemption Priority)和子优先级(Subpriority)。
抢占优先级用于确定中断处理的优先级顺序。具有更高抢占优先级的中断可以打断正在执行的较低优先级中断。同一抢占优先级的中断之间会按照子优先级来确定执行顺序。
根据你的代码,抢占优先级和子优先级都被设置为3。这意味着该外部中断的优先级为3/3(抢占优先级/子优先级),在抢占优先级相同的情况下,子优先级为3的中断会在子优先级为0、1、2的中断之后执行。
请注意,具体的中断优先级配置方法可能因芯片型号和使用的编程环境而有所不同。在配置中断优先级时,请参考芯片的手册或官方文档,以确保正确的配置和理解中断优先级的工作方式。
解释代码void NVIC_Configuration(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 }
这段代码是用来配置NVIC中断优先级分组的。NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)是ARM Cortex-M系列处理器中的一个重要模块,用于管理和响应中断。NVIC中断优先级分组是指将NVIC中断分为抢占优先级和响应优先级两部分,并将它们分别分配给不同的中断信号。这段代码中,调用了STM32库函数`NVIC_PriorityGroupConfig`,将NVIC中断分组设置为2,即抢占优先级有2位,响应优先级有2位。这意味着在同一抢占优先级中,响应优先级高的中断会被优先处理。
阅读全文