没有hal库函数如何设置USART1和USART2中断优先级
时间: 2024-05-04 18:18:37 浏览: 141
在没有HAL库函数的情况下,可以使用标准库函数来设置USART1和USART2中断的优先级。以下是一个示例代码:
```c
#include "stm32f4xx.h"
void USART1_IRQHandler(void)
{
// USART1 interrupt handler code
}
void USART2_IRQHandler(void)
{
// USART2 interrupt handler code
}
int main(void)
{
// Enable USART1 and USART2 clocks
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
// Configure USART1
USART1->BRR = 0x208D; // 9600 baud @ 16 MHz
USART1->CR1 |= USART_CR1_UE | USART_CR1_RXNEIE; // Enable USART1 and its RX interrupt
// Configure USART2
USART2->BRR = 0x208D; // 9600 baud @ 16 MHz
USART2->CR1 |= USART_CR1_UE | USART_CR1_RXNEIE; // Enable USART2 and its RX interrupt
// Set USART1 interrupt priority (lower number = higher priority)
NVIC_SetPriority(USART1_IRQn, 1);
NVIC_EnableIRQ(USART1_IRQn);
// Set USART2 interrupt priority
NVIC_SetPriority(USART2_IRQn, 2);
NVIC_EnableIRQ(USART2_IRQn);
while (1)
{
// Main loop code
}
}
```
在上述代码中,我们首先启用了USART1和USART2的时钟,并设置了它们的波特率和中断使能。然后,我们使用`NVIC_SetPriority()`函数来设置中断优先级,并使用`NVIC_EnableIRQ()`函数来启用中断。在这个例子中,我们将USART1的中断优先级设置为1,将USART2的中断优先级设置为2。这意味着当USART1和USART2的中断同时触发时,USART1的中断处理程序将首先运行。
请注意,以上代码仅用于示例目的。在实际应用中,您需要根据您的要求和硬件设置来调整中断优先级。
阅读全文