美文网首页
NVIC 和 USART

NVIC 和 USART

作者: 土DOU吹雪 | 来源:发表于2019-01-19 20:59 被阅读0次

    STM32 系统中,中断优先级分为抢占优先级(Group Priority)和响应优先级(Subpriority)。抢占优先级不同时,高的可以打断低的;抢占优先级相同,响应优先级不同时,不可打断;若两优先级均相同,已先响应到达时间早的中断。

    抢占优先级和响应优先级通过 NVIC_PriorityGroupConfig 函数进行设置,本质上是对 SCB_AIRCR 寄存器中的 PRIGROUP 字段进行设置。


    PRIGROUPPRIGROUP

    而具体的每种向量的中断优先级,以及某些系统错误的中断优先级,可以在 NVIC->IPR 寄存器和 SCB->PRI_N 寄存器中设置。

    下图是 STM32 中各个中断的具体信息。


    向量中断表向量中断表

    通过 NVIC_InitTypeDef 类和 NVIC_Init() 函数,可以对每个中断的优先级及使能等信息进行设置,下图为对 USART 中断进行设置。


    中断设置中断设置

    NVIC_Init()函数,本质上是对 NVIC->ICER、NVIC->ISER 和 NVIC->IPR 寄存器进行设置,其中 ICER 和 ISER 共同控制使能或失能中断,当 ISER 置 1 时,ICER 对应位会置 0,反之同理。NVIC 寄存器如下图所示。


    NVICNVIC

    USART 中断同样有多种中断组成,如下图所示。


    USART中断USART中断

    通过 USART_ITConfig()函数对 USART 中不同中断使能,本质上是对 USART 的 CR1、CR2、CR3 寄存器进行配置。

    以接收中断 RXNEIE 为例:

    1. 首先,通过 USART_ITConfig()函数将 USART->CR1 中的 RXNEIE 位置 1,允许产生中断。
    2. 当 USART->DR 寄存器接收到数据时,USART->SR 寄存器中 RXNE 位被硬件置 1,产生中断。
    3. 进入中断处理程序,读出数据,自动或手动清理标志位。

    另外,通过 USART_InitTypeDef类、USART_ClockInitTypeDef类、USART_Init()等函数能够对基本的 USART 串口参数进行配置,本质好像同样是对 USART 的 CR1、CR2、CR3、BRR 等寄存器进行设置,以后有时间试更多的东西再说。

    相关文章

      网友评论

          本文标题:NVIC 和 USART

          本文链接:https://www.haomeiwen.com/subject/qezzdqtx.html