编程技巧(基于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、程序框架编写

相关推荐
潘潘的嵌入式日记4 小时前
嵌入式安全重构——新老两套同时跑
嵌入式·架构设计·验证·代码重构
sramdram6 小时前
MCU微控制器OA打印机方案
单片机·嵌入式硬件·mcu·mcu微控制器
Fu_Lin_9 小时前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式
科芯创展11 小时前
3.5A,60VIN,异步降压芯片,XZ1815
单片机·嵌入式硬件
Kuakewei88812 小时前
PW2609A在2.6A负载下压差0.14V,温升较3A工况低11°C
单片机·嵌入式硬件
Zyed12 小时前
[FreeRTOS]Day7项目介绍
stm32·单片机·嵌入式硬件
xuxie9914 小时前
start7 电机闭环控制
单片机·嵌入式硬件
LCG元15 小时前
嵌入式开发踩坑排查实战:从 STM32 外设初始化到 Linux SPI 驱动的 15 类硬件疑难故障深度复盘
linux·stm32·单片机
piaoyiren15 小时前
基于 STM32F103 蓝牙遥控云台超声波避障小车
stm32·单片机·嵌入式硬件·蓝牙·超声波测距·直流电机
潘潘的嵌入式日记15 小时前
一个宏在调试阶段挡住所有误操作
安全·嵌入式··调试·编译期·bring-up