STM8L 系列单片机是 ST公司推出的低功耗单片机,与STM8S系列比较功耗降低了许多,但内部结构也删减了许多,运用时一定要仔细阅读手册。 这是第一次运用STM8,完成功用不是很杂乱就没想研讨库函数,预备直接操控寄存器操作,没想到自己 由于中止问题纠结了大半天。
在外部中止中这一点很不同, STM8S主动铲除外部中止,而STM8L是需求软件铲除, 铲除标志位的寄存器依据设置而不同,下面有阐明。
下面以STM8L外部中止 PB1为例 阐明外部中止 寄存器操作
设置外部中止有下面几步:
第一步、设置IO口为中止输入 经过设置 (PB_DDR = 0X00;PB_CR1 = 0X02;PB_CR2 = 0X02;)
第二步、设置中止触发方法(00: Falling edge and low level;01: Rising edge only;10: Falling edge only;11: Rising and falling edge)
第三步、更改中止向量表 (stm8_interrupt_vector.c 文件中)
第四步、编写中止处理函数,记住在函数晒干铲除中止
第一步、设置IO口为中止输入
PB_DDR = 0X00; // 输入
PB_CR1 = 0X02; // 0_0010
PB_CR2 = 0X02; // 0_0010 CR1与CR2结合确定为 上拉外部中止输入
第二步、设置中止触发方法STM8L中 PB 与 PD 端口比较特别能够有两种触发形式
EXTI_CONF= 0x00;
这两种触发形式经过寄存器EXTI_CONF 进行设置
第一种方法 与A,C port相同经过下面两个寄存器设置触发形式 设置 寄存器EXTI_CONF[0]为0 ,一共Port B[3:0] 运用第一种方法(我在此命名为一般方法)
EXTI_CR1 寄存器设置Port A, B, C and/or D external interrupts 的 3、2、1、0引脚
EXTI_CR2 寄存器设置Port A, B, C and/or D external interrupts 的 7、6、5、4引脚
第二种方法 经过EXTI_CR3寄存器设置触发形式EXTI_CONF[0]为1,一共Port B[3:0] 运用第二种方法(我在此命名为特别方法)
EXTI_CR3 寄存器的 [3:2] 位 设置 端口D 的触发形式
EXTI_CR3 寄存器的 [1:0] 位 设置 端口B 的触发形式
第三步、更改中止向量表
{0x82, KEY_Interrupt}, /* irq9 */
PB1一般形式中止向量号为9 ,其间KEY_Interrupt 能够依据实践命名, 只要和后边写的中止函数名共同就能够。
为什么挑选为9 看下面的图片就知道了。
第四步、编写中止处理函数
@far @interrupt void KEY_Interrupt(void)
{
LED1 = !LED1;
//EXTI_SR2 = 0x01; // 假如设置为 特别形式 经过此寄存器铲除 中止标志位
EXTI_SR1 =0x02; // 假如设置为 一般形式经过此寄存器铲除 中止标志位
}
在这一过程中有两点 阐明:
1、假如中止碑文函数不想在stm8_interrupt_vector.c 文件中编写,需求在stm8_interrupt_vector.c 文件中增加这样一个函数
@far @interrupt void KEY_Interrupt(void);
2、EXTI_SR2 = 0x01; // 假如设置为 特别形式 经过此寄存器铲除 中止标志位
EXTI_SR1 =0x02; // 假如设置为 一般形式经过此寄存器铲除 中止标志位
中止向量等级:
经过下面的第一个表格 能够知道 假如咱们用一般中止形式 端口B1的中止 归于 EXTI1 (假如是PB2 归于EXTI2), 特别形式 端口B的中止归于EXTIB and EXTID,
知道这点 后咱们结合手册中的中止向量 表就知道 咱们应该在哪个方位写中止 进口函数名了。