STM32F103C8T6学习笔记_中断

1、NVIC 嵌套向量中断控制器     即中断优先级管理

SCR->AIRCR寄存器   bit10~8  



111    0位抢占优先级   4位响应优先级     【这是整个系统的】

每一个中断(    对应IP寄存器)  可设置成抢占优先级~~    响应优先级0~16      【这是对应具体一个中断的】


110    1位抢占优先级   3位响应优先级

        IP   可设置抢占优先级0或1       响应优先级0~7



101    2位抢占优先级   2位响应优先级

        IP            抢占0~3            响应0~3



100    3位抢占优先级   1位响应优先级

011    4位抢占优先级   0位响应优先级


数值越小  级别越高


2、

中断.C配置  怎么写?

系统

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //或者0 1 2 3 4

priority   优先 优先权  n.

configuration     配置   n.

具体到每个中断

NVIC_InitType    NVIC_InitStructure;     
NVIC_InitStructure.NVIC_IBQChannel=USART1_IRQn;            //串口1中断     哪个通道?IBQ
NVIC_InitStructure.NVIC_IBQChannelPreemptionPriority=1;    //抢占优先级1
NVIC_InitStructure.NVIC_IBQChannelSubPriority=2;           //响应(子)优先级2
NVIC_InitStructure.NVIC_IBQChannelCmd=ENABLE;              //使能IBQ通道
NVIC_Init(&NVIC_InitStructure);                            //初始化

Preemption   先占   先发制人

handler            处理n.

3、

串口中断服务程序.C  怎么写?

void USART1_IRQHandler(void)         //这是中断服务函数,这个函数名不能随便写    在startup.stm32f10x.hd.s中有定义

{

   u8   res;      //接受到的数据

    /*调用各种串口操作库函数 */

    if(USART_GetITStatus(USART1,USART_IT_RXNE)

   {

      res=USART_ReceiveData(USART1);

      USART_SendData(USART1,res);

}

例如:

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, unit 16_t USART_IT);    //获取中断状态标志位函数

if(USART_GetITStatus(USART1, USART_IT_RXNE) )                                            //打开串口1接收中断       当串口1接收到数据时会触发此中断

void USART_SendData(USART_TypeDef*USARTx*, unit16_t USART_IT);          //串口数据发送

    1   、USART_SendData(USART1,res);

void USART_ReceiveData(USART_TypeDef*USARTx);          //串口数据接收

res=USART_ReceiveData( USART1);

 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)     //等待数据发送完毕

    2   、while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

status   状态

正点原子的串口函数  接收协议?




你可能感兴趣的:(STM32F103C8T6学习笔记_中断)