2.3.1
https://www.st.com/zh/embedded-software/stsw-stm8069.html
IAR Assembler for STMicroelectronics STM8 3.11.1
https://oshwhub.com/perseverance51/stm8s207rbt6-kai-fa-ban
✨使用标准库就不在对寄存器的功能做阐述介绍了,只对相关的内容进行说明。
- 从上面的中断向量表可以知道,只有
EXTI0
-EXTI4
,EXTI外部中断的引脚端口分别为:PortA、B、C、D、E,共5组GPIO。
typedef enum {
EXTI_SENSITIVITY_FALL_LOW = (uint8_t)0x00, /*!< Interrupt on Falling edge and Low level */
EXTI_SENSITIVITY_RISE_ONLY = (uint8_t)0x01, /*!< Interrupt on Rising edge only */
EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */
EXTI_SENSITIVITY_RISE_FALL = (uint8_t)0x03 /*!< Interrupt on Rising and Falling edges */
} EXTI_Sensitivity_TypeDef;
//EXTI中断引脚配置
void EXTI_PortE_Init(void)
{
//设置PE0为含中断带上拉电阻输入
GPIO_Init(GPIOE , GPIO_PIN_0 , GPIO_MODE_IN_PU_IT);//中断上拉
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);//配置中断触发方式为仅下降沿触发
//设置PE1为不含中断带上拉电阻输入
GPIO_Init(GPIOE , GPIO_PIN_1 , GPIO_MODE_IN_PU_IT);//中断上拉
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);//配置中断触发方式为仅下降沿触发
EXTI_SetTLISensitivity(EXTI_TLISENSITIVITY_FALL_ONLY); //设置/获取高级中断触发方式
ITC_SetSoftwarePriority(ITC_IRQ_PORTE,ITC_PRIORITYLEVEL_3 );//配置软件优先级为 2
}
//EXTI中断服务函数
INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
if(KEY1==0)
{
delay_ms(25);
while(KEY1==0);
LED1_TOGGLE;
}
if(KEY2==0)
{
delay_ms(25);
while(KEY2==0);
LED2_TOGGLE;
}
}
/**************************************************************************************
实验现象:按下K1键,控制LED1指示灯亮灭,按下K2键,控制LED2指示灯亮灭
接线说明: 1,STM8S单片机-->LED
PC7-->LED1
PC6-->LED2
2,STM8S单片机-->独立按键模块
PE0-->K1
PE1-->K2
注意事项:1、点击“Download active application”按钮,程序下载完成后,即可运行程序。
***************************************************************************************/
#include "stm8s.h" /* 添加库函数头文件 */
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
/* 主函数 */
int main( void )
{
disableInterrupts(); //关闭系统总中断
//内部时钟为1分频 = 16Mhz
CLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );
LED_Init();
EXTI_PortE_Init();
enableInterrupts(); //打开系统总中断
while( 1 )
{
}
}
//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
void assert_failed( u8* file, u32 line )
{
while ( 1 )
{
}
}
链接: https://pan.baidu.com/s/1_agF_yvmdfqEee5lb7p7EA
提取码: pwpp