编程技巧(基于STM32)第三章 模式切换程序模板

参考教程:https://www.bilibili.com/video/BV19DAAzdEbz/?spm_id_from=333.1387.favlist.content.click&vd_source=8f8a7bd7765d52551c498d7eaed8acd5

一、实验前信息储备

1、模式切换程序框架

(1)每个模式都可整体划分三种行为------进入模式的准备工作、模式激活的循环工作和退出模式的收尾工作,可以将这三种行为分别封装为三个函数:

①Init:进入模式前,执行一遍Init函数,用于模式初始化工作。

②Loop:执行完Init函数后,不断循环执行Loop函数,用于模式主体功能。

③Exit:退出模式前,执行一遍Exit函数,用于收尾工作。

(2)下图所示的是由模式1切换到模式2的程序流示意图。

(3)当处于某个模式时,可能需要定期执行某些动作(比如LED状态翻转),由于要控制时间间隔,所以不适合放在Loop函数中,对此可以使用定时中断,在定时器中断函数中判断当前模式,然后执行当前模式对应的周期性动作。

2、模式切换管理

(1)可以使用CurrMode和NextMode两个变量来处理模式切换,CurrMode表示当前所处的模式,NextMode表示下一时刻希望切换的目标模式。

(2)CurrMode与NextMode相等时,说明下一时刻不需要切换目标模式,执行当前模式的Loop函数即可;CurrMode与NextMode不相等时,说明下一时刻需要切换目标模式,执行当前模式的Exit函数和目标模式的Init函数,然后将CurrMode改为目标模式,即可完成模式切换。

二、实验步骤

1、准备工作

(1)拷贝一份STM32教程中"使用OLED屏进行显示"的工程文件夹,并更名为"模式切换程序模板",同时按下图所示接好电路(OLED屏未示出,按照第一章的实验电路连接即可)。

(2)在STM32教程中"定时器定时中断"的工程文件夹中找到Timer.c和Timer.h文件,将其添加进本工程中,并将TIM2的定时时间配置为1ms。

cpp 复制代码
void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	TIM_InternalClockConfig(TIM2);
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;        //重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;    //预分频系数(TIM2的频率是72MHz)
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM2, ENABLE);
}

2、程序框架编写

相关推荐
我是一棵无人问荆的小草6 小时前
stm32f103单片机的NVIC分组2介绍
stm32·单片机·嵌入式硬件
紫幽6 小时前
从 0 用 Vue 做屏并生成 LVGL 单片机代码(完整源码备忘)
前端·单片机
Be for thing8 小时前
【嵌入式成长3】STC89C51外部中断|中断原理、寄存器、中断服务函数
单片机·嵌入式硬件·学习
科芯创展9 小时前
1A,5.5VIN,同步升降压恒流芯片,XZ3442
单片机
9稳10 小时前
基于PLC的小车运料装卸控制系统设计
开发语言·网络·数据库·单片机·嵌入式硬件
拾知_H11 小时前
STM32+FreeRTOS基础配置
stm32·嵌入式硬件·freertos
智购科技自动贩卖机11 小时前
自动售货机硬件主控方案选型实战:单片机、树莓派、ESP32怎么选?
人工智能·单片机·嵌入式硬件·物联网·网络协议·yolo·架构
LCG元12 小时前
STM32 多通道 ADC + DMA 采集实战:数据错位、读数跳动的根因与滤波选型
stm32·单片机·嵌入式硬件
WWJA王文举13 小时前
# STM32使用DMA后数据异常?可能不是DMA配置问题:从缓存、变量类型、时序到外设状态全面排查
stm32·嵌入式硬件·缓存
电化学仪器白超13 小时前
MV-CS200-10UC相机参数配置
python·单片机·嵌入式硬件·数码相机·自动化·ltspice