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 状态
正点原子的串口函数 接收协议?