【STM32】中断编程入门
一. 实验目的:
学习stm32中断原理和开发编程方法。使用标准库完成以下任务:
二. 实验内容:
1)用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。如果完成后,尝试在main函数while循环中加入一个串口每隔1s 发送一次字符的代码片段,观察按键中断对串口发送是否会带来干扰或延迟。
按键中断点亮LED灯可参考教材课件上的6.4.3示例。
2)采用串口中断方式重做上周查询方式的串口通信作业,分别实现:
(1)当stm32接收到1个字符“s”时,停止持续发送“hello windows!”; 当接收到1个字符“t”时,持续发送“hello windows!”(提示:采用一个全局标量做信号灯);
(2)当stm32接收到字符“stop stm32!”时,停止持续发送“hello windows!”; 当接收到字符“go stm32!”时,持续发送“hello windows!”(提示:要将接收到的连续字符保存到一个字符数组里,进行判别匹配。写一个接收字符串的函数。
三. 具体实验过程:
EXIT中断通常指的是在STM32微控制器中使用的外部中断(External Interrupt)
这些中断可以由外部信号触发,用于响应外部事件,如按键按下、传感器信号变化等。在STM32中,外部中断是通过配置GPIO(通用输入输出)引脚和EXTI(外部中断/事件控制器)来实现的。
以下资料来自bilibili-江协科技https://www.bilibili.com/video/BV1th411z7sn
EXTI (Extern Interrupt)外部中断
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电
平变化时,EXTI将 立即向NVIC发出中断申请,经过NVIC裁决后 即可
中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软 件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
通道数: 16个GPIO Pin,外加PVD输 出、RTC闹钟、USB唤醒、以
太网唤醒
触发响应方式:中断响应/事件响应
主要代码
int main(void)
{
/*模块初始化*/
OLED_Init(); //OLED初始化
Timer_Init(); //定时中断初始化
/*显示静态字符串*/
OLED_ShowString(1, 1, "Num:"); //1行1列显示字符串Num:
while (1)
{
OLED_ShowNum(1, 5, Num, 5); //不断刷新显示Num变量
}
}
/**
* 函 数:TIM2中断函数
* 参 数:无
* 返 回 值:无
* 注意事项:此函数为中断函数,无需调用,中断触发后自动执行
* 函数名为预留的指定名称,可以从启动文件复制
* 请确保函数名正确,不能有任何差异,否则中断函数将不能进入
*/
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) //判断是否是TIM2的更新事件触发的中断
{
Num ++; //Num变量自增,用于测试定时中断
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM2更新事件的中断标志位
//中断标志位必须清除
//否则中断将连续不断地触发,导致主程序卡死
}
}
四. 总结:
本次实验中学习了通过外部中断来控制单片机任务进程的方法,使我受益匪浅