1、CPU_IntDis();
原型:void CPU_IntDis (void);
作用:关闭CPU中断(即禁止CPU中断)
备注:这其实就代码临界段:“代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。”比如,在一个任务里面有一个全局变量,如果在对这个全局变量赋完值,这时有中断。系统就会进入中断子程序,当中断子程序执行完成后,系统去检测有无更高优先级任务。如果有就去执行更高优先级任务去了,如果这个任务里面又有对这个变量的操作,等这个任务完成后。这时程序又回到以前的任务,这个全局变量已被刚才更高优先级任务改变,这样系统就出现问题了。
2、GPIO的八钟模式
typedef enum
{ GPIO_Mode_AIN = 0x0, /* 模拟输入,接收模拟量(电压值)一般用于AD采集 */
GPIO_Mode_IN_FLOATING = 0x04, /* 浮空输入,复位后的状态 */
GPIO_Mode_IPD = 0x28, /* 下拉输入,这里的下拉是指单片机内部的电阻 */
GPIO_Mode_IPU = 0x48, /* 上拉输入,这里的上拉是指单片机内部的电阻 */
GPIO_Mode_Out_OD = 0x14, /* 开漏输出 */
GPIO_Mode_Out_PP = 0x10, /* 推挽输出 */
GPIO_Mode_AF_OD = 0x1C, /* 复用开漏输出 */
GPIO_Mode_AF_PP = 0x18 /* 复用推挽输出 */
}GPIOMode_TypeDef;
端口配置低位寄存器(GPIOx_CRL)(x = A ... E)
端口配置高位寄存器(GPIOx_CRH)(x = A ... E)
端口输入数据寄存器()
4 STM32开关总中断
使用库函数
NVIC_SETFAULTMASK(); //关闭总中断
NVIC_RESETFAULTMASK();//开放总中断
直接指令
asm("CPSID I"); //关中断
asm("CPSIE I"); //开中断