系统异常中断与外部中断统称为中断,复位中断的优先级最高,
NVIC(NestedVectored Interrupt Controller)嵌套向量中断控制器,调整各个中断的优先级,中断优先级 =抢占优先级(1-4bit)+子优先级(0、1)如果两个中断的抢占优先级与子优先级参数一致,则按照中断向量表里的顺序区分优先级。GPIO的中断,EXTI(External interrupt/event controller)外部中断/事件(event)控制器,外部中断为用户自定义中断内容(用户编写程序发生中断后要干啥事儿),外部事件为具体对应外设自动执行,EXTI 0-15总共16个,GPIO A-G当中的pin尾数与EXTI尾数对应,
例如: GPIOA_Pin_0、GPIOB_Pin_0都对应 EXTI 0;
GPIOA_Pin_1、GPIOB_Pin_1都对应EXTI 1;
中断内部的程序尽量简单(只改个标志位值flag啥的),处理函数放在主函数比较稳妥,中断占用太多资源,则其他中断就歇菜了。假设主函数要处理的问题需要对应的技能类似于孙悟空的72变,那么中断要处理的棘手问题需要对应的技能类似于观音给予孙悟空的三根毫毛,别没啥事儿瞎用。
串口分类及电平都在右侧了。
串口助手用:Mobaxterm,
在STM32项目里,Keil Options forTarget里勾选右侧 Use Micro LIB,
添加如下代码就可以在Keil里使用printf函数了。
代码:
#include "stdio.h" //标准输入输出头文件
int fputc(int ch, FILE *f) //写字符文件函数
{
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);
return ch;
}
int fgetc(FILE *f) //读字符文件函数
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, (uint8_t*)&ch, 1, 10);
return (int)ch;
}
//添加以上代码 + √选 UseMicro LIB 后,就可以调用printf函数